diff --git a/Makefile b/Makefile
index 892d0355b..6394f8daa 100644
--- a/Makefile
+++ b/Makefile
@@ -102,7 +102,7 @@ endif
# Check code syntax with host compiler
ifneq ($(RUN_CC_CHECK),0)
- CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label
+ CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label -Wno-sign-compare -Wno-tautological-compare
CC_CHECK := gcc -fno-builtin -fsyntax-only -funsigned-char -fdiagnostics-color -std=gnu89 -D _LANGUAGE_C -D NON_MATCHING $(IINC) -nostdinc $(CHECK_WARNINGS)
ifneq ($(WERROR), 0)
CC_CHECK += -Werror
@@ -117,13 +117,14 @@ MKLDSCRIPT := tools/buildtools/mkldscript
YAZ0 := tools/buildtools/yaz0
ZAPD := tools/ZAPD/ZAPD.out
FADO := tools/fado/fado.elf
+MAKEYAR := tools/buildtools/makeyar
OPTFLAGS := -O2 -g3
ASFLAGS := -march=vr4300 -32 -Iinclude
MIPS_VERSION := -mips2
-# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Surpress the warnings with -woff.
-CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 624,649,838,712,516
+# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Suppress the warnings with -woff.
+CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 649,838,712,516
# Use relocations and abi fpr names in the dump
OBJDUMP_FLAGS := --disassemble --reloc --disassemble-zeroes -Mreg-names=32
@@ -184,9 +185,11 @@ C_FILES := $(foreach dir,$(SRC_DIRS) $(ASSET_BIN_DIRS_C_FILES),$(wildcard
S_FILES := $(shell grep -F "build/asm" spec | sed 's/.*build\/// ; s/\.o\".*/.s/') \
$(shell grep -F "build/data" spec | sed 's/.*build\/// ; s/\.o\".*/.s/')
BASEROM_FILES := $(shell grep -F "build/baserom" spec | sed 's/.*build\/// ; s/\.o\".*//')
+ARCHIVES_O := $(shell grep -F ".yar.o" spec | sed 's/.*include "// ; s/\.o\".*/.o/')
O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \
$(foreach f,$(C_FILES:.c=.o),build/$f) \
- $(foreach f,$(BASEROM_FILES),build/$f.o)
+ $(foreach f,$(BASEROM_FILES),build/$f.o) \
+ $(ARCHIVES_O)
OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' )
@@ -303,6 +306,7 @@ setup:
$(MAKE) -C tools
python3 tools/fixbaserom.py
python3 tools/extract_baserom.py
+ python3 tools/decompress_yars.py
assets:
python3 extract_assets.py -j $(N_THREADS)
@@ -344,6 +348,10 @@ build/assets/%.o: assets/%.c
$(OBJCOPY_BIN)
$(RM_MDEBUG)
+build/assets/archives/%.yar.o: build/assets/archives/%.o
+ $(MAKEYAR) $< $(@:.yar.o=.yar.bin) $(@:.yar.o=.symbols.o)
+ $(OBJCOPY) -I binary -O elf32-big $(@:.yar.o=.yar.bin) $@
+
build/baserom/%.o: baserom/%
$(OBJCOPY) -I binary -O elf32-big $< $@
@@ -392,3 +400,6 @@ build/assets/%.jpg.inc.c: assets/%.jpg
$(ZAPD) bren -eh -i $< -o $@
-include $(DEP_FILES)
+
+# Print target for debugging
+print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true
diff --git a/assets/xml/archives/icon_item_24_static.xml b/assets/xml/archives/icon_item_24_static.xml
new file mode 100644
index 000000000..7b3b338a3
--- /dev/null
+++ b/assets/xml/archives/icon_item_24_static.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/icon_item_static.xml b/assets/xml/archives/icon_item_static.xml
new file mode 100644
index 000000000..3084ab2a5
--- /dev/null
+++ b/assets/xml/archives/icon_item_static.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/item_name_static.xml b/assets/xml/archives/item_name_static.xml
new file mode 100644
index 000000000..280d8862a
--- /dev/null
+++ b/assets/xml/archives/item_name_static.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/map_grand_static.xml b/assets/xml/archives/map_grand_static.xml
new file mode 100644
index 000000000..d5d80bdd6
--- /dev/null
+++ b/assets/xml/archives/map_grand_static.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/map_i_static.xml b/assets/xml/archives/map_i_static.xml
new file mode 100644
index 000000000..dbb64185d
--- /dev/null
+++ b/assets/xml/archives/map_i_static.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/map_name_static.xml b/assets/xml/archives/map_name_static.xml
new file mode 100644
index 000000000..980eb890e
--- /dev/null
+++ b/assets/xml/archives/map_name_static.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/archives/schedule_dma_static.xml b/assets/xml/archives/schedule_dma_static.xml
new file mode 100644
index 000000000..f3b7ba834
--- /dev/null
+++ b/assets/xml/archives/schedule_dma_static.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/icon_item_vtx_static.xml b/assets/xml/interface/icon_item_vtx_static.xml
new file mode 100644
index 000000000..37ccb0063
--- /dev/null
+++ b/assets/xml/interface/icon_item_vtx_static.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/schedule_static.xml b/assets/xml/interface/schedule_static.xml
new file mode 100644
index 000000000..68b097d51
--- /dev/null
+++ b/assets/xml/interface/schedule_static.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/misc/title_static.xml b/assets/xml/misc/title_static.xml
new file mode 100644
index 000000000..5e6cea55f
--- /dev/null
+++ b/assets/xml/misc/title_static.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_f40_obj.xml b/assets/xml/objects/object_f40_obj.xml
index 17e7210de..636a80682 100644
--- a/assets/xml/objects/object_f40_obj.xml
+++ b/assets/xml/objects/object_f40_obj.xml
@@ -1,17 +1,25 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_hakugin_demo.xml b/assets/xml/objects/object_hakugin_demo.xml
index 24c7a2ba2..8c8b5837c 100644
--- a/assets/xml/objects/object_hakugin_demo.xml
+++ b/assets/xml/objects/object_hakugin_demo.xml
@@ -1,8 +1,9 @@
+
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml
index e677f9c3f..666e9e07c 100644
--- a/assets/xml/objects/object_moonend.xml
+++ b/assets/xml/objects/object_moonend.xml
@@ -1,6 +1,7 @@
-
+
+
@@ -19,7 +20,8 @@
-
+
+
diff --git a/assets/xml/objects/object_oF1d_map.xml b/assets/xml/objects/object_oF1d_map.xml
index 0f331cbce..a241eac13 100644
--- a/assets/xml/objects/object_oF1d_map.xml
+++ b/assets/xml/objects/object_oF1d_map.xml
@@ -47,16 +47,16 @@
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_snowwd.xml b/assets/xml/objects/object_snowwd.xml
index c61d07beb..9bb2209d9 100644
--- a/assets/xml/objects/object_snowwd.xml
+++ b/assets/xml/objects/object_snowwd.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot11_obj.xml b/assets/xml/objects/object_spot11_obj.xml
index c049bb337..58d146203 100644
--- a/assets/xml/objects/object_spot11_obj.xml
+++ b/assets/xml/objects/object_spot11_obj.xml
@@ -1,13 +1,13 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_taisou.xml b/assets/xml/objects/object_taisou.xml
index 696285927..0143f2444 100644
--- a/assets/xml/objects/object_taisou.xml
+++ b/assets/xml/objects/object_taisou.xml
@@ -1,12 +1,13 @@
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_tree.xml b/assets/xml/objects/object_tree.xml
index 9d5fb66dd..89e3984c5 100644
--- a/assets/xml/objects/object_tree.xml
+++ b/assets/xml/objects/object_tree.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Syateki_Okuta.xml b/assets/xml/overlays/ovl_En_Syateki_Okuta.xml
index 0e5054c19..aa38c8533 100644
--- a/assets/xml/overlays/ovl_En_Syateki_Okuta.xml
+++ b/assets/xml/overlays/ovl_En_Syateki_Okuta.xml
@@ -7,7 +7,7 @@
-
-
+
+
diff --git a/assets/xml/overlays/ovl_fbdemo_wipe3.xml b/assets/xml/overlays/ovl_fbdemo_wipe3.xml
new file mode 100644
index 000000000..fe4804689
--- /dev/null
+++ b/assets/xml/overlays/ovl_fbdemo_wipe3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml
new file mode 100644
index 000000000..cac6f3d9d
--- /dev/null
+++ b/assets/xml/overlays/ovl_file_choose.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/diff_settings.py b/diff_settings.py
old mode 100755
new mode 100644
diff --git a/docs/tools.md b/docs/tools.md
index 5005f7f93..e190fe0a3 100644
--- a/docs/tools.md
+++ b/docs/tools.md
@@ -273,7 +273,7 @@ Probably the best of the Nintendo 64 texture viewing programs. It is quite simpl
### Z64Utils
-Basically essential for convenient analysis of object files. Can analyse and display DisplayLists, some textures, skeletons, animations, and a few other resources. Download from .
+Basically essential for convenient analysis of object files. Can analyse and display DisplayLists, some textures, skeletons, animations, and a few other resources. Download from .
## Retired tools
diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md
index 43e9e6d46..aa4ba3621 100644
--- a/docs/tutorial/advanced_control_flow.md
+++ b/docs/tutorial/advanced_control_flow.md
@@ -136,7 +136,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) {
void EnMs_Draw(Actor* thisx, PlayState* play) {
EnMs* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md
index 71f3347e3..11d8b3546 100644
--- a/docs/tutorial/documenting.md
+++ b/docs/tutorial/documenting.md
@@ -244,7 +244,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]);
diff --git a/docs/tutorial/draw_functions.md b/docs/tutorial/draw_functions.md
index ccc738219..43fe8579c 100644
--- a/docs/tutorial/draw_functions.md
+++ b/docs/tutorial/draw_functions.md
@@ -29,7 +29,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) {
temp_a0 = play->state.gfxCtx;
sp30 = temp_a0;
- func_8012C28C(temp_a0);
+ Gfx_SetupDL25_Opa(temp_a0);
temp_v1 = sp30->polyOpa.p;
sp30->polyOpa.p = temp_v1 + 8;
temp_v1->words.w0 = 0xDB060020;
@@ -105,7 +105,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]);
@@ -217,7 +217,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) {
sp34 = (s16) (s32) (f32) thisx->shape.rot.z;
temp_a0 = play->state.gfxCtx;
temp_s0 = temp_a0;
- func_8012C28C(temp_a0);
+ Gfx_SetupDL25_Opa(temp_a0);
temp_v0 = temp_s0->polyOpa.p;
temp_s0->polyOpa.p = temp_v0 + 8;
temp_v0->words.w0 = 0xDA380003;
@@ -309,7 +309,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, D_06000680);
diff --git a/include/PR/gbi.h b/include/PR/gbi.h
index 3ba8748b0..1b57c6a34 100644
--- a/include/PR/gbi.h
+++ b/include/PR/gbi.h
@@ -4699,7 +4699,7 @@ _DW({ \
/* like gSPTextureRectangle but accepts negative position arguments */
#define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{ \
+_DW({ \
Gfx *_g = (Gfx *)(pkt); \
\
_g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
@@ -4723,7 +4723,7 @@ _DW({ \
0, 16))); \
gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \
_SHIFTL((dtdy), 0, 16))); \
-}
+})
#define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
diff --git a/include/functions.h b/include/functions.h
index 6df6ce8e4..8bdc6c6c8 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -128,44 +128,7 @@ void MtxConv_L2F(MtxF* mtx, Mtx* mf);
void __assert(const char* file, u32 lineNum);
// void func_800862B4(void);
-void* SystemArena_MallocMin1(u32 size);
-void SystemArena_FreeNullCheck(void* ptr);
-void SystemArena_RunInits(void);
-void SystemArena_Init(void* start, size_t size);
s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3);
-f32 func_80086760(f32 x);
-// void func_80086794(void);
-// void func_800867B4(void);
-// void func_800867D4(void);
-// void func_800867F4(void);
-f32 func_80086814(f32 x);
-// void func_80086834(void);
-// void func_80086880(void);
-// void func_800869A4(void);
-// void func_80086AF0(void);
-f32 func_80086B30(f32 y, f32 x);
-// void func_80086C18(void);
-f32 func_80086C48(f32 x);
-// void func_80086C70(void);
-f64 func_80086C7C(f64 param_1);
-s32 func_80086C88(f32 param_1);
-s32 func_80086C98(f64 param_1);
-// void func_80086CA8(void);
-f64 func_80086CB4(f64 param_1);
-s32 func_80086CC0(f32 param_1);
-s32 func_80086CD0(f64 param_1);
-// void func_80086CE0(void);
-f64 func_80086CEC(f64 param_1);
-s32 func_80086CF8(f32 param_1);
-s32 func_80086D08(f64 param_1);
-// void func_80086D18(void);
-f64 func_80086D24(f64);
-s32 func_80086D30(f32 param_1);
-s32 func_80086D40(f64 param_1);
-// void func_80086D50(void);
-f64 func_80086D6C(f64 param_1);
-s32 func_80086D8C(f32 param_1);
-s32 func_80086DAC(f64 param_1);
u32 Rand_Next(void);
void Rand_Seed(u32 seed);
@@ -194,7 +157,6 @@ void osStopThread(OSThread* t);
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags);
OSIntMask osSetIntMask(OSIntMask im);
// OSIntMask osGetIntMask(void);
-// void osVoiceSetWord(void);
void guScale(Mtx* mtx, f32 x, f32 y, f32 z);
f32 sinf(f32 __x);
s16 sins(u16 x);
@@ -223,7 +185,6 @@ void __osDispatchThread(void);
void __osCleanupThread(void);
void __osDequeueThread(OSThread** queue, OSThread* t);
void osDestroyThread(OSThread* t);
-// void __osVoiceCheckResult(void);
void bzero(void* begin, s32 length);
void __osSiCreateAccessQueue(void);
@@ -236,7 +197,6 @@ void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPr
s32 osContStartReadData(OSMesgQueue* mq);
void osContGetReadData(OSContPad* data);
void __osPackReadData(void);
-// void osVoiceGetReadData(void);
uintptr_t osVirtualToPhysical(void* virtualAddress);
u32 __osGetSR(void);
void __osSetSR(u32 value);
@@ -295,11 +255,8 @@ void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f
void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight);
s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap);
void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac);
-// void osVoiceClearDictionary(void);
void osUnmapTLBAll(void);
s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction);
-// void __osVoiceContRead2(void);
-u8 __osVoiceContDataCrc(u8* data, size_t numBytes);
const char* strchr(const char* s, s32 c);
size_t strlen(const char* s);
void* memcpy(void* s1, const void* s2, size_t n);
@@ -310,7 +267,6 @@ void __osTimerServicesInit(void);
void __osTimerInterrupt(void);
void __osSetTimerIntr(OSTime tim);
OSTime __osInsertTimer(OSTimer* t);
-// void __osVoiceContRead36(void);
s32 __osSpDeviceBusy(void);
s32 __osSiDeviceBusy(void);
void guMtxIdent(Mtx* mtx);
@@ -328,12 +284,9 @@ OSTime osGetTime(void);
void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z);
void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z);
void __osSetGlobalIntMask(u32 mask);
-s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* handle, s32 channel);
s32 __osContChannelReset(OSMesgQueue* mq, s32 channel);
-// void __osVoiceSetADConverter(void);
s32 osAiSetFrequency(u32 frequency);
s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer);
-// void __osVoiceContWrite20(void);
u8 __osContAddressCrc(u16 addr);
u8 __osContDataCrc(u8* data);
OSThread* __osGetActiveQueue(void);
@@ -358,12 +311,10 @@ s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data);
void osViSetSpecialFeatures(u32 func);
s16 coss(u16 x);
void osSetTime(OSTime ticks);
-// void osVoiceStopReadData(void);
void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount);
s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern);
// void __osPfsRequestData(void);
// void __osPfsGetInitData(void);
-s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status);
OSPiHandle* osCartRomInit(void);
// void guS2DInitBg(void);
s32 __osPfsSelectBank(OSPfs* pfs, u8 bank);
@@ -397,7 +348,6 @@ void osCreateViManager(OSPri pri);
__OSViContext* __osViGetCurrentContext(void);
void osWritebackDCacheAll(void);
OSThread* __osGetCurrFaultedThread(void);
-// void osVoiceMaskDictionary(void);
void guMtxF2L(float mf[4][4], Mtx* m);
void osStartThread(OSThread* t);
void osViSetYScale(f32 value);
@@ -410,12 +360,8 @@ double __ll_to_d(long long s);
float __ll_to_f(long long s);
double __ull_to_d(unsigned long long u);
float __ull_to_f(unsigned long long u);
-// void osVoiceCheckWord(void);
-// void osVoiceControlGain(void);
-// void osVoiceStartReadData(void);
u32* osViGetCurrentFramebuffer(void);
s32 __osSpSetPc(void* pc);
-// void __osVoiceContWrite4(void);
void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg);
void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg);
u32 __osGetWatchLo(void);
@@ -726,8 +672,9 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params);
void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx);
void Enemy_StartFinishingBlow(PlayState* play, Actor* actor);
-s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3);
-s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList);
void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 radius, s32 countMinusOne, f32 randAccelWeight, s16 scale, s16 scaleStep, u8 useLighting);
void func_800BBFB0(PlayState* play, Vec3f* position, f32 arg2, s32 arg3, s16 arg4, s16 scaleStep, u8 arg6);
@@ -840,217 +787,6 @@ void Camera_SetTargetActor(Camera* camera, Actor* actor);
f32 Camera_GetWaterYPos(Camera* camera);
void func_800E0348(Camera* camera);
-DamageTable* DamageTable_Get(s32 index);
-void DamageTable_Clear(DamageTable* damageTable);
-f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect);
-f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac);
-s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo);
-s32 Collider_InitBase(PlayState* play, Collider* collider);
-s32 Collider_DestroyBase(PlayState* play, Collider* collider);
-s32 Collider_SetBaseToActor(PlayState* play, Collider* collider, ColliderInitToActor* src);
-s32 Collider_SetBaseType1(PlayState* play, Collider* collider, Actor* actor, ColliderInitType1* src);
-s32 Collider_SetBase(PlayState* play, Collider* collider, Actor* actor, ColliderInit* src);
-void Collider_ResetATBase(PlayState* play, Collider* collider);
-void Collider_ResetACBase(PlayState* play, Collider* collider);
-void Collider_ResetOCBase(PlayState* play, Collider* collider);
-s32 Collider_InitTouch(PlayState* play, ColliderTouch* touch);
-s32 Collider_DestroyTouch(PlayState* play, ColliderTouch* touch);
-s32 Collider_SetTouch(PlayState* play, ColliderTouch* touch, ColliderTouchInit* src);
-void Collider_ResetATInfoUnk(PlayState* play, ColliderInfo* info);
-s32 Collider_InitBump(PlayState* play, ColliderBump* bump);
-s32 Collider_DestroyBump(PlayState* play, ColliderBump* bump);
-s32 Collider_SetBump(PlayState* play, ColliderBump* bump, ColliderBumpInit* src);
-s32 Collider_InitInfo(PlayState* play, ColliderInfo* info);
-s32 Collider_DestroyInfo(PlayState* play, ColliderInfo* info);
-s32 Collider_SetInfo(PlayState* play, ColliderInfo* info, ColliderInfoInit* src);
-void Collider_ResetATInfo(PlayState* play, ColliderInfo* info);
-void Collider_ResetACInfo(PlayState* play, ColliderInfo* info);
-void Collider_ResetOCInfo(PlayState* play, ColliderInfo* info);
-s32 Collider_InitJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dim);
-s32 Collider_DestroyJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dim);
-s32 Collider_SetJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dest, ColliderJntSphElementDimInit* src);
-s32 Collider_InitJntSphElement(PlayState* play, ColliderJntSphElement* element);
-s32 Collider_DestroyJntSphElement(PlayState* play, ColliderJntSphElement* element);
-s32 Collider_SetJntSphElement(PlayState* play, ColliderJntSphElement* dest, ColliderJntSphElementInit* src);
-s32 Collider_ResetJntSphElementAT(PlayState* play, ColliderJntSphElement* collider);
-s32 Collider_ResetJntSphElementAC(PlayState* play, ColliderJntSphElement* collider);
-s32 Collider_ResetJntSphElementOC(PlayState* play, ColliderJntSphElement* collider);
-s32 Collider_InitJntSph(PlayState* play, ColliderJntSph* collider);
-s32 Collider_FreeJntSph(PlayState* play, ColliderJntSph* collider);
-s32 Collider_DestroyJntSph(PlayState* play, ColliderJntSph* collider);
-s32 Collider_SetJntSphToActor(PlayState* play, ColliderJntSph* collider, ColliderJntSphInitToActor* src);
-s32 Collider_SetJntSphAllocType1(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInitType1* src);
-s32 Collider_SetJntSph(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
-s32 Collider_InitAndSetJntSph(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
-s32 Collider_ResetJntSphAT(PlayState* play, Collider* collider);
-s32 Collider_ResetJntSphAC(PlayState* play, Collider* collider);
-s32 Collider_ResetJntSphOC(PlayState* play, Collider* collider);
-s32 Collider_InitCylinderDim(PlayState* play, Cylinder16* dim);
-s32 Collider_DestroyCylinderDim(PlayState* play, Cylinder16* dim);
-s32 Collider_SetCylinderDim(PlayState* play, Cylinder16* dim, Cylinder16* src);
-s32 Collider_InitCylinder(PlayState* play, ColliderCylinder* collider);
-s32 Collider_DestroyCylinder(PlayState* play, ColliderCylinder* collider);
-s32 Collider_SetCylinderToActor(PlayState* play, ColliderCylinder* collider, ColliderCylinderInitToActor* src);
-s32 Collider_SetCylinderType1(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInitType1* src);
-s32 Collider_SetCylinder(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src);
-s32 Collider_InitAndSetCylinder(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src);
-s32 Collider_ResetCylinderAT(PlayState* play, Collider* collider);
-s32 Collider_ResetCylinderAC(PlayState* play, Collider* collider);
-s32 Collider_ResetCylinderOC(PlayState* play, Collider* collider);
-s32 Collider_InitTrisElementDim(PlayState* play, TriNorm* dim);
-s32 Collider_DestroyTrisElementDim(PlayState* play, TriNorm* dim);
-s32 Collider_SetTrisElementDim(PlayState* play, TriNorm* dim, ColliderTrisElementDimInit* src);
-s32 Collider_InitTrisElement(PlayState* play, ColliderTrisElement* element);
-s32 Collider_DestroyTrisElement(PlayState* play, ColliderTrisElement* element);
-s32 Collider_SetTrisElement(PlayState* play, ColliderTrisElement* element, ColliderTrisElementInit* src);
-s32 Collider_ResetTrisElementAT(PlayState* play, ColliderTrisElement* element);
-s32 Collider_ResetTrisElementAC(PlayState* play, ColliderTrisElement* element);
-s32 Collider_ResetTrisElementOC(PlayState* play, ColliderTrisElement* element);
-s32 Collider_InitTris(PlayState* play, ColliderTris* tris);
-s32 Collider_FreeTris(PlayState* play, ColliderTris* tris);
-s32 Collider_DestroyTris(PlayState* play, ColliderTris* tris);
-s32 Collider_SetTrisAllocType1(PlayState* play, ColliderTris* tris, Actor* actor, ColliderTrisInitType1* src);
-s32 Collider_SetTris(PlayState* play, ColliderTris* triGroup, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* tris);
-s32 Collider_InitAndSetTris(PlayState* play, ColliderTris* tris, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* elements);
-s32 Collider_ResetTrisAT(PlayState* play, Collider* collider);
-s32 Collider_ResetTrisAC(PlayState* play, Collider* collider);
-s32 Collider_ResetTrisOC(PlayState* play, Collider* collider);
-s32 Collider_InitQuadDim(PlayState* play, ColliderQuadDim* dim);
-s32 Collider_DestroyQuadDim(PlayState* play, ColliderQuadDim* dim);
-s32 Collider_ResetQuadACDist(PlayState* play, ColliderQuadDim* dim);
-void Collider_SetQuadMidpoints(ColliderQuadDim* dim);
-s32 Collider_SetQuadDim(PlayState* play, ColliderQuadDim* dim, ColliderQuadDimInit* init);
-s32 Collider_InitQuad(PlayState* play, ColliderQuad* collider);
-s32 Collider_DestroyQuad(PlayState* play, ColliderQuad* collider);
-s32 Collider_SetQuadType1(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInitType1* src);
-s32 Collider_SetQuad(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src);
-s32 Collider_InitAndSetQuad(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src);
-s32 Collider_ResetQuadAT(PlayState* play, Collider* collider);
-s32 Collider_ResetQuadAC(PlayState* play, Collider* collider);
-s32 Collider_ResetQuadOC(PlayState* play, Collider* collider);
-s32 Collider_QuadSetNearestAC(PlayState* play, ColliderQuad* quad, Vec3f* hitPos);
-s32 Collider_InitSphere(PlayState* play, ColliderSphere* collider);
-s32 Collider_DestroySphere(PlayState* play, ColliderSphere* collider);
-s32 Collider_SetSphere(PlayState* play, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src);
-s32 Collider_InitAndSetSphere(PlayState* play, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src);
-s32 Collider_ResetSphereAT(PlayState* play, Collider* collider);
-s32 Collider_ResetSphereAC(PlayState* play, Collider* collider);
-s32 Collider_ResetSphereOC(PlayState* play, Collider* collider);
-s32 Collider_InitLine(PlayState* play, OcLine* line);
-s32 Collider_DestroyLine(PlayState* play, OcLine* line);
-s32 Collider_SetLinePoints(PlayState* play, OcLine* line, Vec3f* a, Vec3f* b);
-s32 Collider_SetLine(PlayState* play, OcLine* line, OcLine* src);
-s32 Collider_ResetLineOC(PlayState* play, OcLine* line);
-void CollisionCheck_InitContext(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_DestroyContext(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_ClearContext(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_EnableSAC(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_DisableSAC(PlayState* play, CollisionCheckContext* colCtxt);
-s32 CollisionCheck_SetAT(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-s32 CollisionCheck_SetAT_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
-s32 CollisionCheck_SetAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-s32 CollisionCheck_SetAC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
-s32 CollisionCheck_SetOC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-s32 CollisionCheck_SetOC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
-s32 CollisionCheck_SetOCLine(PlayState* play, CollisionCheckContext* colCtxt, OcLine* line);
-s32 CollisionCheck_SkipTouch(ColliderInfo* info);
-s32 CollisionCheck_SkipBump(ColliderInfo* info);
-s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper);
-void CollisionCheck_NoBlood(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_BlueBlood(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_GreenBlood(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_WaterBurst(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_RedBlood(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v);
-void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos);
-s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo);
-void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, Vec3f* hitPos);
-void CollisionCheck_SetBounce(Collider* at, Collider* ac);
-s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo, Vec3f* atPos, Collider* ac, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos);
-void CollisionCheck_TrisAvgPoint(ColliderTrisElement* tri, Vec3f* avg);
-void CollisionCheck_QuadAvgPoint(ColliderQuad* quad, Vec3f* avg);
-void CollisionCheck_AC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_JntSphVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_JntSphVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_JntSphVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_CylVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_CylVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_CylVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_TrisVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_TrisVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_TrisVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_TrisVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_TrisVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_QuadVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_QuadVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_QuadVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_QuadVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_QuadVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_SphereVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_SphereVsCylinder(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_SphereVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_SphereVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_AC_SphereVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
-void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_SetSphereHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_SetHitEffects(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT);
-void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colCtxt);
-s32 CollisionCheck_GetMassType(u8 mass);
-void CollisionCheck_SetOCvsOC(PlayState* play, Collider* left, ColliderInfo* leftInfo, Vec3f* leftPos, Collider* right, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlap);
-void CollisionCheck_OC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_JntSphVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_CylVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_SphereVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_SphereVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-void CollisionCheck_OC_SphereVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
-s32 CollisionCheck_SkipOC(Collider* collider);
-s32 CollisionCheck_Incompatible(Collider* left, Collider* right);
-void CollisionCheck_OC(PlayState* play, CollisionCheckContext* colCtxt);
-void CollisionCheck_InitInfo(CollisionCheckInfo* info);
-void CollisionCheck_ResetDamage(CollisionCheckInfo* info);
-void CollisionCheck_SetInfoNoDamageTable(CollisionCheckInfo* info, CollisionCheckInfoInit* init);
-void CollisionCheck_SetInfo(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit* init);
-void CollisionCheck_SetInfo2(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit2* init);
-void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, CollisionCheckInfoInit2* init);
-void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, ColliderInfo* info);
-void CollisionCheck_ApplyDamageJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_ApplyDamageCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_ApplyDamageTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_ApplyDamageQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_ApplyDamageSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
-void CollisionCheck_Damage(PlayState* play, CollisionCheckContext* colCtxt);
-s32 CollisionCheck_LineOC_JntSph(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
-s32 CollisionCheck_LineOC_Cyl(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
-s32 CollisionCheck_LineOC_Sphere(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
-s32 CollisionCheck_LineOC(PlayState* play, CollisionCheckContext* colChkCtx, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions);
-s32 CollisionCheck_LineOCCheckAll(PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b);
-s32 CollisionCheck_LineOCCheck(PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions);
-void Collider_UpdateCylinder(Actor* actor, ColliderCylinder* collider);
-void Collider_SetCylinderPosition(ColliderCylinder* collider, Vec3s* pos);
-void Collider_SetQuadVertices(ColliderQuad* collider, Vec3f* a, Vec3f* b, Vec3f* c, Vec3f* d);
-void Collider_SetTrisVertices(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f* c);
-void Collider_SetTrisDim(PlayState* play, ColliderTris* collider, s32 index, ColliderTrisElementDimInit* init);
-void Collider_UpdateSpheres(s32 limb, ColliderJntSph* collider);
-void Collider_UpdateSpheresElement(ColliderJntSph* collider, s32 index, Actor* actor);
-void Collider_UpdateSphere(s32 limb, ColliderSphere* collider);
-void CollisionCheck_SpawnRedBlood(PlayState* play, Vec3f* v);
-void CollisionCheck_SpawnWaterDroplets(PlayState* play, Vec3f* v);
-void CollisionCheck_SpawnShieldParticles(PlayState* play, Vec3f* v);
-void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v);
-void CollisionCheck_SpawnShieldParticlesMetalSound(PlayState* play, Vec3f* v, Vec3f* pos);
-void CollisionCheck_SpawnShieldParticlesMetal2(PlayState* play, Vec3f* v);
-void CollisionCheck_SpawnShieldParticlesWood(PlayState* play, Vec3f* v, Vec3f* pos);
-s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* actorPos, Vec3f* itemPos, Vec3f* itemProjPos, Vec3f* out1, Vec3f* out2);
void Actor_ContinueText(PlayState* play, Actor* actor, u16 textId);
s32 Flags_GetEventChkInf(s32 flag);
void Flags_SetEventChkInf(s32 flag);
@@ -1064,25 +800,10 @@ void SaveContext_Init(void);
void GetItem_Draw(PlayState* play, s16 drawId);
-void SoundSource_InitAll(PlayState* play);
-void SoundSource_UpdateAll(PlayState* play);
-void SoundSource_PlaySfxAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId);
-void SoundSource_PlaySfxEachFrameAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId);
u16 QuestHint_GetTatlTextId(PlayState* play);
u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet);
-s32 func_800F3940(PlayState* play);
-// void func_800F39B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800F3A64(void);
-void func_800F3B2C(PlayState* play);
-// void func_800F3B68(void);
-// void func_800F3C44(void);
-// void func_800F3ED4(void);
-void func_800F40A0(GameState* gameState, Player* player);
-void func_800F415C(Actor* actor, Vec3f* arg1, s16 arg2);
-UNK_TYPE func_800F41E4(PlayState* play, ActorContext* actorCtx);
-
void func_800F4A10(PlayState* play);
void KaleidoSetup_Update(PlayState* play);
void KaleidoSetup_Init(PlayState* play);
@@ -1093,7 +814,7 @@ void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset);
void Font_LoadMessageBoxEndIcon(Font* font, u16 icon);
void Font_LoadOrderedFont(Font* font);
// void func_800F5090(void);
-// void func_800F50D4(void);
+s32 Environment_ZBufValToFixedPoint(s32 zBufferVal);
void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2);
u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5);
f32 Environment_LerpWeight(u16 max, u16 min, u16 val);
@@ -1139,10 +860,10 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue,
void Environment_DrawSandstorm(PlayState* play, u8 sandstormState);
s32 func_800FD2B4(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4);
void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4);
-void func_800FD59C(PlayState* play, Color_RGB8* pzParm2, f32 fParm3);
-void func_800FD5E0(PlayState* play, Color_RGB8* pzParm2, f32 fParm3);
-void func_800FD654(PlayState* play, Color_RGB8* pzParm2, f32 fParm3);
-void func_800FD698(PlayState* play, s16 arg1, s16 arg2, f32 arg3);
+void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp);
+void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 zFarTarget, f32 lerp);
// u32 get_days_elapsed(void);
// void reset_days_elapsed(void);
// u32 get_current_day(void);
@@ -1175,70 +896,17 @@ void func_800FEA50(PlayState* play);
void func_800FEAB0(void);
// void func_800FEAC0(void);
void func_800FEAF4(EnvironmentContext* envCtx);
+
void* Lib_MemCpy(void* dest, void* src, size_t size);
void* Lib_MemSet(void* buffer, s32 value, size_t size);
-f32 Math_CosS(s16 angle);
-f32 Math_SinS(s16 angle);
-s32 Math_StepToIImpl(s32 start, s32 target, s32 step);
-void Math_StepToIGet(s32* pValue, s32 target, s32 step);
-s32 Math_StepToI(s32* pValue, s32 target, s32 step);
-s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step);
-s32 Math_StepToS(s16* pValue, s16 target, s16 step);
-s32 Math_StepToC(s8* pValue, s8 target, s8 step);
-s32 Math_StepToF(f32* pValue, f32 target, f32 step);
-s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step);
-s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step);
-s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep);
-s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step);
-s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep);
void func_800FF3A0(f32* distOut, s16* angleOut, Input* input);
-s16 Rand_S16Offset(s16 base, s16 range);
-s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range);
-void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src);
-void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src);
-void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src);
-void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src);
-void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest);
-void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest);
-void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r);
-void Math_Vec3f_Scale(Vec3f* vec, f32 scale);
-void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest);
-void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest);
-void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest);
-void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest);
-void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest);
-f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
-f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
-f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b);
-f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz);
-f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed);
-f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b);
-s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b);
-s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b);
void Actor_ProcessInitChain(Actor* actor, InitChainEntry* ichain);
-// void IChain_Apply_u8(u8* actor, InitChainEntry* init);
-// void IChain_Apply_s8(u8* actor, InitChainEntry* init);
-// void IChain_Apply_u16(u8* actor, InitChainEntry* init);
-// void IChain_Apply_s16(u8* actor, InitChainEntry* init);
-// void IChain_Apply_u32(u8* actor, InitChainEntry* init);
-// void IChain_Apply_s32(u8* actor, InitChainEntry* init);
-// void IChain_Apply_f32(u8* actor, InitChainEntry* init);
-// void IChain_Apply_f32div1000(u8* actor, InitChainEntry* init);
-// void IChain_Apply_Vec3f(u8* actor, InitChainEntry* init);
-// void IChain_Apply_Vec3fdiv1000(u8* actor, InitChainEntry* init);
-// void IChain_Apply_Vec3s(u8* actor, InitChainEntry* init);
-f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
-void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep);
-void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep);
-s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
-void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep);
void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src);
void func_801000A4(u16 sfxId);
void func_801000CC(u16 sfxId);
void Lib_PlaySfxAtPos(Vec3f* pos, u16 sfxId);
void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst);
void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst);
-f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed);
void Lib_Nop801004FC(void);
void* Lib_SegmentedToVirtual(void* ptr);
void* Lib_SegmentedToVirtualNull(void* ptr);
@@ -1468,52 +1136,7 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b);
void OLib_Vec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode);
void OLib_Vec3fAdd(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode);
-Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point);
-Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point);
-
-void Interface_StartTimer(s16 timerId, s16 seconds);
-void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState);
-void Interface_NewDay(PlayState* play, s32 day);
-void Interface_SetHudVisibility(u16 hudVisibility);
-void Interface_UpdateButtonsPart2(PlayState* play);
-void Interface_SetSceneRestrictions(PlayState* play);
-void Interface_InitMinigame(PlayState* play);
-void Interface_LoadItemIconImpl(PlayState* play, u8 btn);
-void Interface_LoadItemIcon(PlayState* play, u8 btn);
-void Interface_UpdateButtonsAlt(PlayState* play, u16 flag);
-u8 Item_Give(PlayState* play, u8 item);
-u8 Item_CheckObtainability(u8 item);
-void Inventory_DeleteItem(s16 item, s16 slot);
-void Inventory_UnequipItem(s16 item);
-s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem);
-void Inventory_UpdateDeitySwordEquip(PlayState* play) ;
-s32 Inventory_HasEmptyBottle(void);
-s32 Inventory_HasItemInBottle(u8 item);
-void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn);
-s32 Inventory_ConsumeFairy(PlayState* play);
-void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item);
-void func_8011552C(PlayState* play, u16 arg1);
-void func_801155B4(PlayState* play, s16 arg1);
-void func_80115764(PlayState* play, UNK_TYPE arg1);
-void func_80115844(PlayState* play, s16 doAction);
-s32 Health_ChangeBy(PlayState* play, s16 healthChange);
-void Health_GiveHearts(s16 hearts);
-void Rupees_ChangeBy(s16 rupeeChange);
-void Inventory_ChangeAmmo(s16 item, s16 ammoChange);
-void Magic_Add(PlayState* play, s16 magicToAdd);
-void Magic_Reset(PlayState* play);
-s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type);
-void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType);
-void Interface_StartMoonCrash(PlayState* play);
-void Interface_Draw(PlayState* play);
-void Interface_Update(PlayState* play);
-void Interface_Destroy(PlayState* play);
-void Interface_Init(PlayState* play);
-
-Path* Path_GetByIndex(PlayState* play, s16 index, s16 max);
+Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone);
f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw);
void Path_CopyLastPoint(Path* path, Vec3f* dest);
@@ -1611,90 +1234,6 @@ void Inventory_SaveDekuPlaygroundHighScore(s16 timerId);
void Inventory_IncrementSkullTokenCount(s16 sceneIndex);
s16 Inventory_GetSkullTokenCount(s16 sceneIndex);
void Inventory_SaveLotteryCodeGuess(PlayState* play);
-s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
-void Object_InitBank(GameState* gameState, ObjectContext* objectCtx);
-void Object_UpdateBank(ObjectContext* objectCtx);
-s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId);
-s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index);
-void Object_LoadAll(ObjectContext* objectCtx);
-void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id);
-void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandActorList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandActorCutsceneCamList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandCollisionHeader(PlayState* play, SceneCmd* cmd);
-void Scene_CommandRoomList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandEntranceList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd);
-void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd);
-void Scene_CommandMesh(PlayState* play, SceneCmd* cmd);
-void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandLightList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandPathList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandTransiActorList(PlayState* play, SceneCmd* cmd);
-void Scene_ResetTransiActorList(GameState* gameState, TransitionActorList* transitionActors);
-void Scene_CommandEnvLightSettings(PlayState* play, SceneCmd* cmd);
-void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex);
-void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd);
-void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd);
-void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd);
-void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd);
-void Scene_CommandExitList(PlayState* play, SceneCmd* cmd);
-void Scene_Command09(PlayState* play, SceneCmd* cmd);
-void Scene_CommandSoundSettings(PlayState* play, SceneCmd* cmd);
-void Scene_CommandEchoSetting(PlayState* play, SceneCmd* cmd);
-void Scene_CommandAltHeaderList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandCutsceneScriptList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd);
-void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd);
-void Scene_Command1D(PlayState* play, SceneCmd* cmd);
-void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd);
-void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd);
-void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd);
-void Scene_SetExitFade(PlayState* play);
-s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd);
-u16 Entrance_Create(s32 scene, s32 spawn, s32 layer);
-u16 Entrance_CreateFromSpawn(s32 spawn);
-void Scene_Draw(PlayState* play);
-void Scene_DrawConfigDefault(PlayState* play);
-Gfx* AnimatedMat_TexScroll(PlayState* play, AnimatedMatTexScrollParams* params);
-void AnimatedMat_DrawTexScroll(PlayState* play, s32 segment, void* params);
-Gfx* AnimatedMat_TwoLayerTexScroll(PlayState* play, AnimatedMatTexScrollParams* params);
-void AnimatedMat_DrawTwoTexScroll(PlayState* play, s32 segment, void* params);
-void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor);
-void AnimatedMat_DrawColor(PlayState* play, s32 segment, void* params);
-s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm);
-void AnimatedMat_DrawColorLerp(PlayState* play, s32 segment, void* params);
-f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp);
-u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp);
-void AnimatedMat_DrawColorNonLinearInterp(PlayState* play, s32 segment, void* params);
-void AnimatedMat_DrawTexCycle(PlayState* play, s32 segment, void* params);
-void AnimatedMat_DrawMain(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags);
-void AnimatedMat_Draw(PlayState* play, AnimatedMaterial* matAnim);
-void AnimatedMat_DrawOpa(PlayState* play, AnimatedMaterial* matAnim);
-void AnimatedMat_DrawXlu(PlayState* play, AnimatedMaterial* matAnim);
-void AnimatedMat_DrawAlpha(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
-void AnimatedMat_DrawAlphaOpa(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
-void AnimatedMat_DrawAlphaXlu(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
-void AnimatedMat_DrawStep(PlayState* play, AnimatedMaterial* matAnim, u32 step);
-void AnimatedMat_DrawStepOpa(PlayState* play, AnimatedMaterial* matAnim, u32 step);
-void AnimatedMat_DrawStepXlu(PlayState* play, AnimatedMaterial* matAnim, u32 step);
-void AnimatedMat_DrawAlphaStep(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
-void AnimatedMat_DrawAlphaStepOpa(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
-void AnimatedMat_DrawAlphaStepXlu(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
-void Scene_DrawConfigMatAnim(PlayState* play);
-void Scene_DrawConfig3(PlayState* play);
-void Scene_DrawConfig4(PlayState* play);
-void Scene_DrawConfigDoNothing(PlayState* play);
-void Scene_SetRenderModeXlu(PlayState* play, s32 index, u32 flags);
-void Scene_SetCullFlag(PlayState* play, s32 index, u32 flags);
-void Scene_DrawConfig5(PlayState* play);
-void Scene_DrawConfigMatAnimManualStep(PlayState* play);
-void Scene_DrawConfigGreatBayTemple(PlayState* play);
-EntranceTableEntry* Entrance_GetTableEntry(u16 entrance);
-s32 Entrance_GetSceneId(u16 entrance);
-s32 Entrance_GetSceneIdAbsolute(u16 entrance);
-s32 Entrance_GetSpawnNum(u16 entrance);
-s32 Entrance_GetTransitionFlags(u16 entrance);
s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output);
@@ -1723,22 +1262,23 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a);
void SkinMatrix_MulYRotation(MtxF* mf, s16 a);
void SkinMatrix_SetZRotation(MtxF* mf, s16 a);
-void func_80140260(OSViMode* vimode);
-// void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6, s32 param_7, s32 param_8, UNK_TYPE4 param_9, s32 param_10, s16 param_11, u32 param_12, UNK_TYPE4 param_13);
-// void func_80140730(void);
-// void func_80140810(void);
-void func_80140898(void* arg0);
-void func_80140900(void* arg0);
-// void func_8014090C(void);
-// void func_80140970(void);
-void func_80140CE0(void* arg0);
-void func_80140D04(void* arg0);
-void func_80140D10(void* arg0, Gfx** gfx, u32 arg2);
+void ViMode_LogPrint(OSViMode* vimode);
+void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit,
+ s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust);
+void ViMode_Save(ViMode* viMode);
+void ViMode_Load(ViMode* viMode);
+void ViMode_Init(ViMode* viMode);
+void ViMode_Destroy(ViMode* viMode);
+void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures);
+void ViMode_Update(ViMode* viMode, Input* input);
+void VisCvg_Init(struct_801F8010* this);
+void VisCvg_Destroy(struct_801F8010* this);
+void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp);
void func_80140E80(Struct_80140E80* arg0);
void func_80140EA0(Struct_80140E80* arg0);
// void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_80141008(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10);
-void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 arg5);
+void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height, s32 arg5);
// void func_801411B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10);
// void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
@@ -1790,7 +1330,7 @@ void func_801514B0(PlayState* play, u16 arg1, u8 arg2);
void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor);
void Message_ContinueTextbox(PlayState* play, u16 textId);
void func_80151A68(PlayState* play, u16 textId);
-void func_80151BB4(PlayState* play, u8 arg1);
+void Message_BombersNotebookQueueEvent(PlayState* play, u8 event);
// void func_80151C9C(void);
void func_80151DA4(PlayState* play, u16 arg2);
void func_80152434(PlayState* play, u16 arg2);
@@ -1920,19 +1460,6 @@ void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId);
void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha);
void Play_Init(GameState* thisx);
-// void func_8016AC10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10);
-// void func_8016AE1C(void);
-// void func_8016B278(void);
-// void func_8016B4B0(void);
-// void func_8016C344(void);
-// void func_8016CD4C(void);
-// void func_8016E40C(void);
-// void func_8016EA90(void);
-void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx);
-// void func_8016F4EC(void);
-void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input);
-void BombersNotebook_Init(BombersNotebook* this);
-void BombersNotebook_Destroy(BombersNotebook* this);
void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg);
void PreRender_Init(PreRender* this);
void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf);
@@ -1969,25 +1496,6 @@ void AudioMgr_ThreadEntry(void* arg);
void AudioMgr_Unlock(AudioMgr* audioMgr);
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr);
-void Game_UpdateFramerateVariables(s32 divisor);
-void Game_SetFramerateDivisor(GameState* gameState, s32 divisor);
-void GameState_SetFBFilter(Gfx** gfx, void* zbuffer);
-void Game_Nop80173534(GameState* gameState);
-void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx);
-void GameState_SetFrameBuffer(GraphicsContext* gfxCtx);
-void func_801736DC(GraphicsContext* gfxCtx);
-void Game_UpdateInput(GameState* gameState);
-void Game_Update(GameState* gameState);
-void Game_IncrementFrameCount(GameState* gameState);
-void GameState_InitArena(GameState* gameState, size_t size);
-void GameState_Realloc(GameState* gameState, size_t size);
-void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx);
-void GameState_Destroy(GameState* gameState);
-GameStateFunc GameState_GetInit(GameState* gameState);
-size_t GameState_GetSize(GameState* gameState);
-u32 GameState_IsRunning(GameState* gameState);
-s32 GameState_GetArenaSize(GameState* gameState);
-s32 func_80173B48(GameState* gameState);
void GameAlloc_Log(GameAlloc* this);
void* GameAlloc_Malloc(GameAlloc* this, size_t size);
void GameAlloc_Free(GameAlloc* this, void* data);
@@ -2047,15 +1555,14 @@ void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32
void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ);
void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ);
-void func_80178750(void);
-void func_80178818(void);
-void func_80178978(void);
-// void func_801789D4(void);
-void* SysCfb_GetFbPtr(s32 index);
+void SysCfb_SetLoResMode(void);
+void SysCfb_SetHiResMode(void);
+void SysCfb_Init(void);
+void* SysCfb_GetFramebuffer(s32 index);
void* SysCfb_GetZBuffer(void);
-// UNK_TYPE4 func_80178A24(void);
-// void func_80178A34(void);
-s32 func_80178A94(s32 param_1, s32 param_2);
+void* SysCfb_GetWorkBuffer(void);
+u16 SysCfb_GetZBufferPixel(s32 x, s32 y);
+s32 SysCfb_GetZBufferInt(s32 x, s32 y);
void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size);
void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size);
// void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value);
@@ -2066,13 +1573,7 @@ void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size);
// void Check_DrawRegionLockErrorMessage(void);
void Check_ExpansionPak(void);
void Check_RegionIsSupported(void);
-f32 func_80179300(f32 n);
-f32 func_80179400(s32 n);
-f32 pow_int(f32 base, s32 exp);
-f32 sin_rad(f32 rad);
-f32 cos_rad(f32 rad);
-f32 Rand_ZeroFloat(f32 scale);
-f32 randPlusMinusPoint5Scaled(f32 scale);
+
f32 Math3D_Normalize(Vec3f* vec);
s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint);
s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6);
@@ -2168,11 +1669,6 @@ s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z);
// void func_8017FB1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11);
// void func_8017FD44(void);
-s16 Math_Atan2S(f32 y, f32 x);
-f32 Math_Atan2F(f32 y, f32 x);
-s16 Math_Atan2S_XY(f32 x, f32 y);
-f32 Math_Atan2F_XY(f32 x, f32 y);
-
u64* SysUcode_GetUCodeBoot(void);
size_t SysUcode_GetUCodeBootSize(void);
u64* SysUcode_GetUCode(void);
@@ -2221,22 +1717,15 @@ void func_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx, OverrideKe
// void func_801853C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_80185460(void);
-// void func_801857C0(void);
-// char* func_801857D0(void);
-// void func_80185864(void);
-u32 func_80185908(void);
-UNK_TYPE func_80185968(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2);
-// void func_801859F0(void);
-// void func_80185A2C(void);
-// void func_80185B1C(void);
-// void func_80185BE4(void);
-// void func_80185C24(void);
-void SysFlashrom_ThreadEntry(s80185D40* param_1);
-void func_80185DDC(u8* arg0, u32 arg1, u32 arg2);
-s32 func_80185EC4(void);
-s32 func_80185F04(void);
-void func_80185F64(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2);
-s32 func_80185F90(u32 param_1);
+s32 SysFlashrom_InitFlash(void);
+s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount);
+void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount);
+s32 SysFlashrom_IsBusy(void);
+s32 SysFlashrom_AwaitResult(void);
+void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount);
+
+s32 func_80185F90(u32 arg0);
+
u32 osFlashGetAddr(u32 pageNum);
OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start);
void osFlashChange(u32 flashNum);
diff --git a/include/gfx.h b/include/gfx.h
index e08df2013..dfbd78d74 100644
--- a/include/gfx.h
+++ b/include/gfx.h
@@ -8,6 +8,83 @@
struct GameState;
+typedef enum SetupDL {
+ /* 0x00 */ SETUPDL_0,
+ /* 0x01 */ SETUPDL_1,
+ /* 0x02 */ SETUPDL_2,
+ /* 0x03 */ SETUPDL_3,
+ /* 0x04 */ SETUPDL_4,
+ /* 0x05 */ SETUPDL_5,
+ /* 0x06 */ SETUPDL_6,
+ /* 0x07 */ SETUPDL_7,
+ /* 0x08 */ SETUPDL_8,
+ /* 0x09 */ SETUPDL_9,
+ /* 0x0A */ SETUPDL_10,
+ /* 0x0B */ SETUPDL_11,
+ /* 0x0C */ SETUPDL_12,
+ /* 0x0D */ SETUPDL_13,
+ /* 0x0E */ SETUPDL_14,
+ /* 0x0F */ SETUPDL_15,
+ /* 0x10 */ SETUPDL_16,
+ /* 0x11 */ SETUPDL_17,
+ /* 0x12 */ SETUPDL_18,
+ /* 0x13 */ SETUPDL_19,
+ /* 0x14 */ SETUPDL_20,
+ /* 0x15 */ SETUPDL_21,
+ /* 0x16 */ SETUPDL_22,
+ /* 0x17 */ SETUPDL_23,
+ /* 0x18 */ SETUPDL_24,
+ /* 0x19 */ SETUPDL_25,
+ /* 0x1A */ SETUPDL_26,
+ /* 0x1B */ SETUPDL_27,
+ /* 0x1C */ SETUPDL_28,
+ /* 0x1D */ SETUPDL_29,
+ /* 0x1E */ SETUPDL_30,
+ /* 0x1F */ SETUPDL_31,
+ /* 0x20 */ SETUPDL_32,
+ /* 0x21 */ SETUPDL_33,
+ /* 0x22 */ SETUPDL_34,
+ /* 0x23 */ SETUPDL_35,
+ /* 0x24 */ SETUPDL_36,
+ /* 0x25 */ SETUPDL_37,
+ /* 0x26 */ SETUPDL_38,
+ /* 0x27 */ SETUPDL_39,
+ /* 0x28 */ SETUPDL_40,
+ /* 0x29 */ SETUPDL_41,
+ /* 0x2A */ SETUPDL_42,
+ /* 0x2B */ SETUPDL_43,
+ /* 0x2C */ SETUPDL_44,
+ /* 0x2D */ SETUPDL_45,
+ /* 0x2E */ SETUPDL_46,
+ /* 0x2F */ SETUPDL_47,
+ /* 0x30 */ SETUPDL_48,
+ /* 0x31 */ SETUPDL_49,
+ /* 0x32 */ SETUPDL_50,
+ /* 0x33 */ SETUPDL_51,
+ /* 0x34 */ SETUPDL_52,
+ /* 0x35 */ SETUPDL_53,
+ /* 0x36 */ SETUPDL_54,
+ /* 0x37 */ SETUPDL_55,
+ /* 0x38 */ SETUPDL_56,
+ /* 0x39 */ SETUPDL_57,
+ /* 0x3A */ SETUPDL_58,
+ /* 0x3B */ SETUPDL_59,
+ /* 0x3C */ SETUPDL_60,
+ /* 0x3D */ SETUPDL_61,
+ /* 0x3E */ SETUPDL_62,
+ /* 0x3F */ SETUPDL_63,
+ /* 0x40 */ SETUPDL_64,
+ /* 0x41 */ SETUPDL_65,
+ /* 0x42 */ SETUPDL_66,
+ /* 0x43 */ SETUPDL_67,
+ /* 0x44 */ SETUPDL_68,
+ /* 0x45 */ SETUPDL_69,
+ /* 0x46 */ SETUPDL_70,
+ /* 0x47 */ SETUPDL_71,
+ /* 0x48 */ SETUPDL_72,
+ /* 0x49 */ SETUPDL_MAX
+} SetupDL;
+
typedef struct {
/* 0x000 */ Gfx taskStart[9];
/* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl
@@ -78,72 +155,72 @@ typedef struct GraphicsContext {
Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f);
Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f);
Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f);
-Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i);
-Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i);
-void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i);
-Gfx* func_8012BFC4(Gfx* gfx);
-Gfx* func_8012BFEC(Gfx* gfx);
-Gfx* func_8012C014(Gfx* gfx);
-void func_8012C058(GraphicsContext* gfxCtx);
-void func_8012C080(GraphicsContext* gfxCtx);
-void func_8012C0A8(GraphicsContext* gfxCtx);
-void func_8012C0D0(GraphicsContext* gfxCtx);
-void func_8012C0F8(GraphicsContext* gfxCtx);
-void func_8012C120(GraphicsContext* gfxCtx);
-void func_8012C148(GraphicsContext* gfxCtx);
-void func_8012C170(GraphicsContext* gfxCtx);
-Gfx* func_8012C198(Gfx* gfx);
-void func_8012C1C0(GraphicsContext* gfxCtx);
-Gfx* func_8012C1EC(Gfx* gfx);
-void func_8012C214(GraphicsContext* gfxCtx);
-void func_8012C240(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i);
+Gfx* Gfx_SetupDL(Gfx* gfx, u32 i);
+void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i);
+Gfx* Gfx_SetupDL57(Gfx* gfx);
+Gfx* Gfx_SetupDL57_b(Gfx* gfx);
+Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx);
+void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL26(Gfx* gfx);
+void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL23(Gfx* gfx);
+void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx);
void func_8012C268(struct GameState* gameState);
-void func_8012C28C(GraphicsContext* gfxCtx);
-Gfx* func_8012C2B4(Gfx* gfx);
-void func_8012C2DC(GraphicsContext* gfxCtx);
-Gfx* func_8012C304(Gfx* gfx);
-void func_8012C32C(GraphicsContext* gfxCtx);
-void func_8012C354(GraphicsContext* gfxCtx);
-void func_8012C37C(GraphicsContext* gfxCtx);
-Gfx* func_8012C3A4(Gfx* gfx);
-Gfx* func_8012C3CC(Gfx* gfx);
-void func_8012C3F4(GraphicsContext* gfxCtx);
-void func_8012C420(GraphicsContext* gfxCtx);
-void func_8012C448(GraphicsContext* gfxCtx);
-void func_8012C470(GraphicsContext* gfxCtx);
-Gfx* func_8012C498(Gfx* gfx);
-void func_8012C4C0(GraphicsContext* gfxCtx);
-void func_8012C4E8(GraphicsContext* gfxCtx);
-void func_8012C510(GraphicsContext* gfxCtx);
-void func_8012C538(GraphicsContext* gfxCtx);
-void func_8012C560(GraphicsContext* gfxCtx);
-void func_8012C588(GraphicsContext* gfxCtx);
-void func_8012C5B0(GraphicsContext* gfxCtx);
-void func_8012C5D8(GraphicsContext* gfxCtx);
-Gfx* func_8012C600(Gfx* gfx);
-void func_8012C628(GraphicsContext* gfxCtx);
-void func_8012C654(GraphicsContext* gfxCtx);
-void func_8012C680(Gfx** gfxp);
-void func_8012C6AC(GraphicsContext* gfxCtx);
-void func_8012C6D4(GraphicsContext* gfxCtx);
-void func_8012C6FC(GraphicsContext* gfxCtx);
-Gfx* func_8012C724(Gfx* gfx);
-Gfx* func_8012C74C(Gfx* gfx);
-Gfx* func_8012C774(Gfx* gfx);
-Gfx* func_8012C7B8(Gfx* gfx);
-Gfx* func_8012C7FC(Gfx* gfx);
-Gfx* func_8012C840(Gfx* gfx);
-Gfx* func_8012C868(Gfx* gfx);
-void func_8012C8AC(GraphicsContext* gfxCtx);
-void func_8012C8D4(GraphicsContext* gfxCtx);
-void func_8012C8FC(GraphicsContext* gfxCtx);
-void func_8012C924(GraphicsContext* gfxCtx);
-void func_8012C94C(GraphicsContext* gfxCtx);
-void func_8012C974(GraphicsContext* gfxCtx);
-void func_8012C9BC(GraphicsContext* gfxCtx);
-void func_8012C9E4(GraphicsContext* gfxCtx);
-void func_8012CA0C(Gfx** gfxp);
-void func_8012CA38(GraphicsContext* gfxCtx);
+void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL71(Gfx* gfx);
+void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL72(Gfx* gfx);
+void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL64(Gfx* gfx);
+Gfx* Gfx_SetupDL34(Gfx* gfx);
+void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL28(Gfx* gfx);
+void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx);
+void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL39(Gfx* gfx);
+void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx);
+void Gfx_SetupDL39_Ptr(Gfx** gfxp);
+void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx);
+Gfx* Gfx_SetupDL66(Gfx* gfx);
+Gfx* Gfx_SetupDL67(Gfx* gfx);
+Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx);
+Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx);
+Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx);
+Gfx* Gfx_SetupDL70(Gfx* gfx);
+Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx);
+void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx);
+void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx);
+void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx);
+void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx);
+void Gfx_SetupDL56_Ptr(Gfx** gfxp);
+void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx);
Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height);
void func_8012CB04(Gfx** gfxp, u32 x, u32 y);
Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y);
@@ -156,7 +233,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b);
void func_8012D40C(f32* param_1, f32* param_2, s16* param_3);
-extern Gfx sSetupDL[73 * 6];
+extern Gfx gSetupDLs[SETUPDL_MAX][6];
extern Gfx gEmptyDL[];
#define WORK_DISP __gfxCtx->work.p
diff --git a/include/global.h b/include/global.h
index 9fa3ef7bc..193c2d90d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -2,7 +2,6 @@
#define GLOBAL_H
#include "z64.h"
-#include "regs.h"
#include "functions.h"
#include "variables.h"
#include "macros.h"
diff --git a/include/io/controller.h b/include/io/controller.h
index b588b4198..d29c11f1f 100644
--- a/include/io/controller.h
+++ b/include/io/controller.h
@@ -4,6 +4,8 @@
#include "PR/ultratypes.h"
#include "PR/pfs.h"
+#define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4)
+
#define SIAccessQueueSize 2
#define BLOCKSIZE 32
#define MAXCONTROLLERS 4
diff --git a/include/macros.h b/include/macros.h
index 9e74c40cd..7924066b6 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -3,13 +3,14 @@
#include "libc/stdint.h"
#include "ultra64/convert.h"
-#include "z64.h"
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
+#define SCREEN_WIDTH_HIRES 640
+#define SCREEN_HEIGHT_HIRES 480
-#define SCREEN_WIDTH_HIGH_RES 576
-#define SCREEN_HEIGHT_HIGH_RES 454
+#define HIRES_BUFFER_WIDTH 576
+#define HIRES_BUFFER_HEIGHT 454
#define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2))
#define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2))
@@ -17,6 +18,8 @@
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
+#define ARRAY_COUNT_2D(arr) (ARRAY_COUNT(arr) * ARRAY_COUNT(arr[0]))
+
// TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + RDRAM_CACHED)
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED)
@@ -24,27 +27,13 @@
#define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId])
-#define STOP_GAMESTATE(curState) \
- do { \
- GameState* state = curState; \
- \
- state->running = false; \
- } while(0)
-
-#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \
- do { \
- GameState* state = curState; \
- \
- (state)->init = nextInit; \
- (state)->size = nextSize; \
- } while (0)
-
#define GET_PLAYER(play) ((Player*)(play)->actorCtx.actorLists[ACTORCAT_PLAYER].first)
#define GET_FIRST_ENEMY(play) ((Actor*)(play)->actorCtx.actorLists[ACTORCAT_ENEMY].first)
#define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60))
#define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1))
+#define CLOCK_TIME_HOUR (CLOCK_TIME(1, 0))
#define DAY_LENGTH (CLOCK_TIME(24, 0))
#define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000))
@@ -55,6 +44,7 @@
#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f)))
#define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000))
#define CLOCK_TIME_ALT2_F(hr, min) ((((hr) + (min) / 60.0f) * 60.0f) / (24.0f * 60.0f / 0x10000))
+#define CLOCK_TIME_HOUR_F (CLOCK_TIME_F(1, 0))
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
@@ -77,6 +67,17 @@
#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
#define ALIGN256(val) (((val) + 0xFF) & ~0xFF)
+#define BIT_FLAG_TO_SHIFT(flag) \
+ ((flag & 0x80) ? 7 : \
+ (flag & 0x40) ? 6 : \
+ (flag & 0x20) ? 5 : \
+ (flag & 0x10) ? 4 : \
+ (flag & 0x8) ? 3 : \
+ (flag & 0x4) ? 2 : \
+ (flag & 0x2) ? 1 : \
+ (flag & 0x1) ? 0 : \
+ 0)
+
/**
* `x` vertex x
* `y` vertex y
diff --git a/include/os.h b/include/os.h
index 6e34bd428..47fed80a0 100644
--- a/include/os.h
+++ b/include/os.h
@@ -142,11 +142,4 @@ typedef struct {
/* 0xC */ u32* text_end;
} OSProf; // size = 0x10
-typedef struct {
- /* 0x0 */ OSMesgQueue* mq;
- /* 0x4 */ s32 port; /* Controller port */
- /* 0x8 */ s32 mode;
- /* 0xC */ u8 status;
-} OSVoiceHandle; // size = 0x10
-
#endif
diff --git a/include/regs.h b/include/regs.h
index 112a00239..bc8bacb1b 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -65,6 +65,13 @@ extern RegEditor* gRegEditor;
#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT
#define R_ROOM_IMAGE_NODRAW_FLAGS SREG(25)
#define R_UPDATE_RATE SREG(30)
+#define R_VI_MODE_EDIT_STATE SREG(48)
+#define R_VI_MODE_EDIT_WIDTH SREG(49)
+#define R_VI_MODE_EDIT_HEIGHT SREG(50)
+#define R_VI_MODE_EDIT_ULY_ADJ SREG(51)
+#define R_VI_MODE_EDIT_LRY_ADJ SREG(52)
+#define R_VI_MODE_EDIT_ULX_ADJ SREG(53)
+#define R_VI_MODE_EDIT_LRX_ADJ SREG(54)
#define R_FB_FILTER_TYPE SREG(80)
#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
#define R_FB_FILTER_A SREG(84)
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index 9fc49a6cb..214970933 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -52,11 +52,12 @@ DECLARE_ROM_SEGMENT(map_i_static)
DECLARE_ROM_SEGMENT(map_grand_static)
DECLARE_ROM_SEGMENT(item_name_static)
DECLARE_ROM_SEGMENT(map_name_static)
-DECLARE_ROM_SEGMENT(icon_item_static_test)
-DECLARE_ROM_SEGMENT(icon_item_static_old)
-DECLARE_ROM_SEGMENT(icon_item_24_static_test)
-DECLARE_ROM_SEGMENT(icon_item_24_static_old)
-DECLARE_ROM_SEGMENT(schedule_dma_static_test)
+DECLARE_ROM_SEGMENT(icon_item_static_yar)
+DECLARE_ROM_SEGMENT(icon_item_static_syms)
+DECLARE_ROM_SEGMENT(icon_item_24_static_yar)
+DECLARE_ROM_SEGMENT(icon_item_24_static_syms)
+DECLARE_ROM_SEGMENT(schedule_dma_static_yar)
+DECLARE_ROM_SEGMENT(schedule_dma_static_syms)
DECLARE_ROM_SEGMENT(schedule_static)
DECLARE_ROM_SEGMENT(story_static)
DECLARE_ROM_SEGMENT(do_action_static)
@@ -124,56 +125,44 @@ DECLARE_ROM_SEGMENT(d2_fine_pal_static)
DECLARE_ROM_SEGMENT(elf_message_field)
DECLARE_ROM_SEGMENT(elf_message_ydan)
-DECLARE_ROM_SEGMENT(Z2_20SICHITAI2)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_00)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_01)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_02)
-DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP)
DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP_room_00)
-DECLARE_ROM_SEGMENT(Z2_LAST_BS)
DECLARE_ROM_SEGMENT(Z2_LAST_BS_room_00)
-DECLARE_ROM_SEGMENT(Z2_HAKASHITA)
DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_00)
DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_01)
DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_02)
DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_03)
DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_04)
-DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP)
DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_00)
DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_01)
-DECLARE_ROM_SEGMENT(Z2_OMOYA)
DECLARE_ROM_SEGMENT(Z2_OMOYA_room_00)
DECLARE_ROM_SEGMENT(Z2_OMOYA_room_01)
DECLARE_ROM_SEGMENT(Z2_OMOYA_room_02)
-DECLARE_ROM_SEGMENT(Z2_BOWLING)
DECLARE_ROM_SEGMENT(Z2_BOWLING_room_00)
-DECLARE_ROM_SEGMENT(Z2_SONCHONOIE)
DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_00)
DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_01)
DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_02)
DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_03)
-DECLARE_ROM_SEGMENT(Z2_IKANA)
DECLARE_ROM_SEGMENT(Z2_IKANA_room_00)
DECLARE_ROM_SEGMENT(Z2_IKANA_room_01)
DECLARE_ROM_SEGMENT(Z2_IKANA_room_02)
DECLARE_ROM_SEGMENT(Z2_IKANA_room_03)
DECLARE_ROM_SEGMENT(Z2_IKANA_room_04)
-DECLARE_ROM_SEGMENT(Z2_KAIZOKU)
DECLARE_ROM_SEGMENT(Z2_KAIZOKU_room_00)
-DECLARE_ROM_SEGMENT(Z2_MILK_BAR)
DECLARE_ROM_SEGMENT(Z2_MILK_BAR_room_00)
-DECLARE_ROM_SEGMENT(Z2_INISIE_N)
DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_00)
DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_01)
DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_02)
@@ -187,10 +176,8 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_09)
DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_10)
DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_11)
-DECLARE_ROM_SEGMENT(Z2_TAKARAYA)
DECLARE_ROM_SEGMENT(Z2_TAKARAYA_room_00)
-DECLARE_ROM_SEGMENT(Z2_INISIE_R)
DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_00)
DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_01)
DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_02)
@@ -204,14 +191,11 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_09)
DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_10)
DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_11)
-DECLARE_ROM_SEGMENT(Z2_OKUJOU)
DECLARE_ROM_SEGMENT(Z2_OKUJOU_room_00)
-DECLARE_ROM_SEGMENT(Z2_OPENINGDAN)
DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_00)
DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_01)
-DECLARE_ROM_SEGMENT(Z2_MITURIN)
DECLARE_ROM_SEGMENT(Z2_MITURIN_room_00)
DECLARE_ROM_SEGMENT(Z2_MITURIN_room_01)
DECLARE_ROM_SEGMENT(Z2_MITURIN_room_02)
@@ -226,10 +210,8 @@ DECLARE_ROM_SEGMENT(Z2_MITURIN_room_10)
DECLARE_ROM_SEGMENT(Z2_MITURIN_room_11)
DECLARE_ROM_SEGMENT(Z2_MITURIN_room_12)
-DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI)
DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI_room_00)
-DECLARE_ROM_SEGMENT(Z2_CASTLE)
DECLARE_ROM_SEGMENT(Z2_CASTLE_room_00)
DECLARE_ROM_SEGMENT(Z2_CASTLE_room_01)
DECLARE_ROM_SEGMENT(Z2_CASTLE_room_02)
@@ -241,16 +223,12 @@ DECLARE_ROM_SEGMENT(Z2_CASTLE_room_07)
DECLARE_ROM_SEGMENT(Z2_CASTLE_room_08)
DECLARE_ROM_SEGMENT(Z2_CASTLE_room_09)
-DECLARE_ROM_SEGMENT(Z2_DEKUTES)
DECLARE_ROM_SEGMENT(Z2_DEKUTES_room_00)
-DECLARE_ROM_SEGMENT(Z2_MITURIN_BS)
DECLARE_ROM_SEGMENT(Z2_MITURIN_BS_room_00)
-DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU)
DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU_room_00)
-DECLARE_ROM_SEGMENT(Z2_HAKUGIN)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_00)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_01)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_02)
@@ -266,10 +244,8 @@ DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_11)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_12)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_13)
-DECLARE_ROM_SEGMENT(Z2_ROMANYMAE)
DECLARE_ROM_SEGMENT(Z2_ROMANYMAE_room_00)
-DECLARE_ROM_SEGMENT(Z2_PIRATE)
DECLARE_ROM_SEGMENT(Z2_PIRATE_room_00)
DECLARE_ROM_SEGMENT(Z2_PIRATE_room_01)
DECLARE_ROM_SEGMENT(Z2_PIRATE_room_02)
@@ -286,20 +262,16 @@ DECLARE_ROM_SEGMENT(Z2_PIRATE_room_12)
DECLARE_ROM_SEGMENT(Z2_PIRATE_room_13)
DECLARE_ROM_SEGMENT(Z2_PIRATE_room_14)
-DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI)
DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI_room_00)
-DECLARE_ROM_SEGMENT(Z2_SINKAI)
DECLARE_ROM_SEGMENT(Z2_SINKAI_room_00)
-DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI)
DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_00)
DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_01)
DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_02)
DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_03)
DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_04)
-DECLARE_ROM_SEGMENT(Z2_KINSTA1)
DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_00)
DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_01)
DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_02)
@@ -307,7 +279,6 @@ DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_03)
DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_04)
DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_05)
-DECLARE_ROM_SEGMENT(Z2_KINDAN2)
DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_00)
DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_01)
DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_02)
@@ -315,108 +286,77 @@ DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_03)
DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_04)
DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_05)
-DECLARE_ROM_SEGMENT(Z2_TENMON_DAI)
DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_00)
DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_01)
-DECLARE_ROM_SEGMENT(Z2_LAST_DEKU)
DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_00)
DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_01)
-DECLARE_ROM_SEGMENT(Z2_22DEKUCITY)
DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_00)
DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_01)
DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_02)
-DECLARE_ROM_SEGMENT(Z2_KAJIYA)
DECLARE_ROM_SEGMENT(Z2_KAJIYA_room_00)
-DECLARE_ROM_SEGMENT(Z2_00KEIKOKU)
DECLARE_ROM_SEGMENT(Z2_00KEIKOKU_room_00)
-DECLARE_ROM_SEGMENT(Z2_POSTHOUSE)
DECLARE_ROM_SEGMENT(Z2_POSTHOUSE_room_00)
-DECLARE_ROM_SEGMENT(Z2_LABO)
DECLARE_ROM_SEGMENT(Z2_LABO_room_00)
-DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST)
DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_00)
DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_01)
-DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE)
DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_00)
DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_01)
-DECLARE_ROM_SEGMENT(Z2_33ZORACITY)
DECLARE_ROM_SEGMENT(Z2_33ZORACITY_room_00)
-DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP)
DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP_room_00)
-DECLARE_ROM_SEGMENT(Z2_F01)
DECLARE_ROM_SEGMENT(Z2_F01_room_00)
-DECLARE_ROM_SEGMENT(Z2_INISIE_BS)
DECLARE_ROM_SEGMENT(Z2_INISIE_BS_room_00)
-DECLARE_ROM_SEGMENT(Z2_30GYOSON)
DECLARE_ROM_SEGMENT(Z2_30GYOSON_room_00)
-DECLARE_ROM_SEGMENT(Z2_31MISAKI)
DECLARE_ROM_SEGMENT(Z2_31MISAKI_room_00)
-DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI)
DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI_room_00)
-DECLARE_ROM_SEGMENT(Z2_TORIDE)
DECLARE_ROM_SEGMENT(Z2_TORIDE_room_00)
-DECLARE_ROM_SEGMENT(Z2_FISHERMAN)
DECLARE_ROM_SEGMENT(Z2_FISHERMAN_room_00)
-DECLARE_ROM_SEGMENT(Z2_GORONSHOP)
DECLARE_ROM_SEGMENT(Z2_GORONSHOP_room_00)
-DECLARE_ROM_SEGMENT(Z2_DEKU_KING)
DECLARE_ROM_SEGMENT(Z2_DEKU_KING_room_00)
-DECLARE_ROM_SEGMENT(Z2_LAST_GORON)
DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_00)
DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_01)
-DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI)
DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI_room_00)
-DECLARE_ROM_SEGMENT(Z2_F01_B)
DECLARE_ROM_SEGMENT(Z2_F01_B_room_00)
-DECLARE_ROM_SEGMENT(Z2_F01C)
DECLARE_ROM_SEGMENT(Z2_F01C_room_00)
-DECLARE_ROM_SEGMENT(Z2_BOTI)
DECLARE_ROM_SEGMENT(Z2_BOTI_room_00)
DECLARE_ROM_SEGMENT(Z2_BOTI_room_01)
-DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS)
DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS_room_00)
-DECLARE_ROM_SEGMENT(Z2_20SICHITAI)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_00)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_01)
DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_02)
-DECLARE_ROM_SEGMENT(Z2_21MITURINMAE)
DECLARE_ROM_SEGMENT(Z2_21MITURINMAE_room_00)
-DECLARE_ROM_SEGMENT(Z2_LAST_ZORA)
DECLARE_ROM_SEGMENT(Z2_LAST_ZORA_room_00)
-DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2)
DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_00)
DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_01)
-DECLARE_ROM_SEGMENT(Z2_SEA)
DECLARE_ROM_SEGMENT(Z2_SEA_room_00)
DECLARE_ROM_SEGMENT(Z2_SEA_room_01)
DECLARE_ROM_SEGMENT(Z2_SEA_room_02)
@@ -434,10 +374,8 @@ DECLARE_ROM_SEGMENT(Z2_SEA_room_13)
DECLARE_ROM_SEGMENT(Z2_SEA_room_14)
DECLARE_ROM_SEGMENT(Z2_SEA_room_15)
-DECLARE_ROM_SEGMENT(Z2_35TAKI)
DECLARE_ROM_SEGMENT(Z2_35TAKI_room_00)
-DECLARE_ROM_SEGMENT(Z2_REDEAD)
DECLARE_ROM_SEGMENT(Z2_REDEAD_room_00)
DECLARE_ROM_SEGMENT(Z2_REDEAD_room_01)
DECLARE_ROM_SEGMENT(Z2_REDEAD_room_02)
@@ -453,31 +391,24 @@ DECLARE_ROM_SEGMENT(Z2_REDEAD_room_11)
DECLARE_ROM_SEGMENT(Z2_REDEAD_room_12)
DECLARE_ROM_SEGMENT(Z2_REDEAD_room_13)
-DECLARE_ROM_SEGMENT(Z2_BANDROOM)
DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_00)
DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_01)
DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_02)
DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_03)
DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_04)
-DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO)
DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_00)
DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_01)
-DECLARE_ROM_SEGMENT(Z2_GORON_HAKA)
DECLARE_ROM_SEGMENT(Z2_GORON_HAKA_room_00)
-DECLARE_ROM_SEGMENT(Z2_SECOM)
DECLARE_ROM_SEGMENT(Z2_SECOM_room_00)
DECLARE_ROM_SEGMENT(Z2_SECOM_room_01)
-DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA)
DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA_room_00)
-DECLARE_ROM_SEGMENT(Z2_TOUGITES)
DECLARE_ROM_SEGMENT(Z2_TOUGITES_room_00)
-DECLARE_ROM_SEGMENT(Z2_DANPEI)
DECLARE_ROM_SEGMENT(Z2_DANPEI_room_00)
DECLARE_ROM_SEGMENT(Z2_DANPEI_room_01)
DECLARE_ROM_SEGMENT(Z2_DANPEI_room_02)
@@ -488,48 +419,34 @@ DECLARE_ROM_SEGMENT(Z2_DANPEI_room_06)
DECLARE_ROM_SEGMENT(Z2_DANPEI_room_07)
DECLARE_ROM_SEGMENT(Z2_DANPEI_room_08)
-DECLARE_ROM_SEGMENT(Z2_IKANAMAE)
DECLARE_ROM_SEGMENT(Z2_IKANAMAE_room_00)
-DECLARE_ROM_SEGMENT(Z2_DOUJOU)
DECLARE_ROM_SEGMENT(Z2_DOUJOU_room_00)
-DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE)
DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE_room_00)
-DECLARE_ROM_SEGMENT(Z2_IKNINSIDE)
DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_00)
DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_01)
-DECLARE_ROM_SEGMENT(Z2_MAP_SHOP)
DECLARE_ROM_SEGMENT(Z2_MAP_SHOP_room_00)
-DECLARE_ROM_SEGMENT(Z2_F40)
DECLARE_ROM_SEGMENT(Z2_F40_room_00)
-DECLARE_ROM_SEGMENT(Z2_F41)
DECLARE_ROM_SEGMENT(Z2_F41_room_00)
-DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2)
DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_00)
DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_01)
-DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI)
DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI_room_00)
-DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE)
DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE_room_00)
-DECLARE_ROM_SEGMENT(Z2_17SETUGEN)
DECLARE_ROM_SEGMENT(Z2_17SETUGEN_room_00)
-DECLARE_ROM_SEGMENT(Z2_17SETUGEN2)
DECLARE_ROM_SEGMENT(Z2_17SETUGEN2_room_00)
-DECLARE_ROM_SEGMENT(Z2_SEA_BS)
DECLARE_ROM_SEGMENT(Z2_SEA_BS_room_00)
-DECLARE_ROM_SEGMENT(Z2_RANDOM)
DECLARE_ROM_SEGMENT(Z2_RANDOM_room_00)
DECLARE_ROM_SEGMENT(Z2_RANDOM_room_01)
DECLARE_ROM_SEGMENT(Z2_RANDOM_room_02)
@@ -537,21 +454,17 @@ DECLARE_ROM_SEGMENT(Z2_RANDOM_room_03)
DECLARE_ROM_SEGMENT(Z2_RANDOM_room_04)
DECLARE_ROM_SEGMENT(Z2_RANDOM_room_05)
-DECLARE_ROM_SEGMENT(Z2_YADOYA)
DECLARE_ROM_SEGMENT(Z2_YADOYA_room_00)
DECLARE_ROM_SEGMENT(Z2_YADOYA_room_01)
DECLARE_ROM_SEGMENT(Z2_YADOYA_room_02)
DECLARE_ROM_SEGMENT(Z2_YADOYA_room_03)
DECLARE_ROM_SEGMENT(Z2_YADOYA_room_04)
-DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT)
DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT_room_00)
-DECLARE_ROM_SEGMENT(Z2_INSIDETOWER)
DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_00)
DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_01)
-DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI)
DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_00)
DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_01)
DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_02)
@@ -562,12 +475,10 @@ DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_06)
DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_07)
DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_08)
-DECLARE_ROM_SEGMENT(Z2_LOST_WOODS)
DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_00)
DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_01)
DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_02)
-DECLARE_ROM_SEGMENT(Z2_LAST_LINK)
DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_00)
DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_01)
DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_02)
@@ -577,40 +488,28 @@ DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_05)
DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_06)
DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_07)
-DECLARE_ROM_SEGMENT(Z2_SOUGEN)
DECLARE_ROM_SEGMENT(Z2_SOUGEN_room_00)
-DECLARE_ROM_SEGMENT(Z2_BOMYA)
DECLARE_ROM_SEGMENT(Z2_BOMYA_room_00)
-DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA)
DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA_room_00)
-DECLARE_ROM_SEGMENT(Z2_KOEPONARACE)
DECLARE_ROM_SEGMENT(Z2_KOEPONARACE_room_00)
-DECLARE_ROM_SEGMENT(Z2_GORONRACE)
DECLARE_ROM_SEGMENT(Z2_GORONRACE_room_00)
-DECLARE_ROM_SEGMENT(Z2_TOWN)
DECLARE_ROM_SEGMENT(Z2_TOWN_room_00)
-DECLARE_ROM_SEGMENT(Z2_ICHIBA)
DECLARE_ROM_SEGMENT(Z2_ICHIBA_room_00)
-DECLARE_ROM_SEGMENT(Z2_BACKTOWN)
DECLARE_ROM_SEGMENT(Z2_BACKTOWN_room_00)
-DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER)
DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER_room_00)
-DECLARE_ROM_SEGMENT(Z2_ALLEY)
DECLARE_ROM_SEGMENT(Z2_ALLEY_room_00)
-DECLARE_ROM_SEGMENT(SPOT00)
DECLARE_ROM_SEGMENT(SPOT00_room_00)
-DECLARE_ROM_SEGMENT(KAKUSIANA)
DECLARE_ROM_SEGMENT(KAKUSIANA_room_00)
DECLARE_ROM_SEGMENT(KAKUSIANA_room_01)
DECLARE_ROM_SEGMENT(KAKUSIANA_room_02)
diff --git a/include/system_heap.h b/include/system_heap.h
new file mode 100644
index 000000000..e0864cca6
--- /dev/null
+++ b/include/system_heap.h
@@ -0,0 +1,11 @@
+#ifndef SYSTEM_HEAP_H
+#define SYSTEM_HEAP_H
+
+#include "libc/stddef.h"
+#include "PR/ultratypes.h"
+
+void* SystemHeap_Malloc(size_t size);
+void SystemHeap_Free(void* ptr);
+void SystemHeap_Init(void* start, size_t size);
+
+#endif
diff --git a/include/system_malloc.h b/include/system_malloc.h
index e92eaf89f..cf91899ef 100644
--- a/include/system_malloc.h
+++ b/include/system_malloc.h
@@ -1,5 +1,5 @@
-#ifndef SYSTEM_MALLOC
-#define SYSTEM_MALLOC
+#ifndef SYSTEM_MALLOC_H
+#define SYSTEM_MALLOC_H
#include "PR/ultratypes.h"
#include "os_malloc.h"
@@ -11,7 +11,7 @@ void SystemArena_Free(void* ptr);
void* SystemArena_Calloc(u32 elements, size_t size);
void SystemArena_GetSizes(size_t* maxFreeBlock, size_t* bytesFree, size_t* bytesAllocated);
u32 SystemArena_CheckArena(void);
-void SystemArena_InitArena(void* start, size_t size);
+void SystemArena_Init(void* start, size_t size);
void SystemArena_Cleanup(void);
u8 SystemArena_IsInitialized(void);
diff --git a/include/tables/bombers_notebook/event_table.h b/include/tables/bombers_notebook/event_table.h
new file mode 100644
index 000000000..161269a7e
--- /dev/null
+++ b/include/tables/bombers_notebook/event_table.h
@@ -0,0 +1,48 @@
+/**
+ * Bombers Notebook Event Table
+ *
+ * DEFINE_EVENT should be used for events in the notebook
+ * - Argument 0: Enum value for the event
+ * - Argument 1: Icon to use (see BombersNotebookEventIcon)
+ * - Argument 2: WeekEventFlag that updates the icons color
+ * - Argument 3: Message id for the description of this event
+ * - Argument 4: Message id for the completion of this event
+ * - Argument 5: WeekEventFlag for the completion of this event
+ *
+ * Note: These events are after the MET events, so will start indexing at BOMBERS_NOTEBOOK_PERSON_MAX
+ */
+/* 0x14 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x2198, 0x2152, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY)
+/* 0x15 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING, 0x2199, 0x2153, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING)
+/* 0x16 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219A, 0x2154, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI)
+/* 0x17 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219B, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI)
+/* 0x18 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI, 0x219C, 0x2156, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI)
+/* 0x19 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES, 0x219D, 0x2157, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES)
+/* 0x1A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x219E, 0x2158, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES)
+/* 0x1B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x219F, 0x2159, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT)
+/* 0x1C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM, 0x21A0, 0x215A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM)
+/* 0x1D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DEFENDED_AGAINST_THEM, 0x21A1, 0x215B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM)
+/* 0x1E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A2, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE)
+/* 0x1F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCORTED_CREMIA, 0x21A3, 0x215D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA)
+/* 0x20 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A4, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK)
+/* 0x21 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A5, 0x215F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK)
+/* 0x22 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PRIORITY_MAIL, 0x21A6, 0x2160, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL)
+/* 0x23 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A7, 0x2161, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL)
+/* 0x24 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A8, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE)
+/* 0x25 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A9, 0x2163, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK)
+/* 0x26 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AA, 0x2164, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP)
+/* 0x27 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AB, 0x2165, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP)
+/* 0x28 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AC, 0x2166, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP)
+/* 0x29 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AD, 0x2167, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP)
+/* 0x2A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AE, 0x2168, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP)
+/* 0x2B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AF, 0x2169, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP)
+/* 0x2C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B0, 0x216A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK)
+/* 0x2D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B1, 0x216B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK)
+/* 0x2E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B2, 0x216C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD)
+/* 0x2F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B3, 0x216D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK)
+/* 0x30 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B4, 0x216E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK)
+/* 0x31 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B5, 0x216F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT)
+/* 0x32 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B6, 0x2170, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK)
+/* 0x33 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B7, 0x2171, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK)
+/* 0x34 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B8, 0x2172, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK)
+/* 0x35 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B9, 0x2173, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK)
+/* 0x36 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21BA, 0x2174, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK)
diff --git a/include/tables/bombers_notebook/person_table.h b/include/tables/bombers_notebook/person_table.h
new file mode 100644
index 000000000..e6ef49b27
--- /dev/null
+++ b/include/tables/bombers_notebook/person_table.h
@@ -0,0 +1,31 @@
+/**
+ * Bombers Notebook Person Table
+ *
+ * DEFINE_PERSON should be used for people with entries in the notebook
+ * - Argument 0: Enum value for this person
+ * - Argument 1: Photo texture for this person
+ * - Argument 2: Message id for the description of this person
+ * - Argument 3: Enum value for the event meeting this person
+ * - Argument 4: Message id for the event meeting this person
+ * - Argument 5: WeekEventFlag for the event meeting this person
+ */
+/* 0x00 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMBERS, schedule_dma_static_yar_Blob_009800, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS)
+/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, schedule_dma_static_yar_Blob_000000, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU)
+/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, schedule_dma_static_yar_Blob_000800, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI)
+/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, schedule_dma_static_yar_Blob_001000, 0x21CC, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN, 0x2136, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN)
+/* 0x04 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMB_SHOP_LADY, schedule_dma_static_yar_Blob_001800, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY)
+/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, schedule_dma_static_yar_Blob_002000, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI)
+/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, schedule_dma_static_yar_Blob_002800, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA)
+/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, schedule_dma_static_yar_Blob_003000, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR)
+/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, schedule_dma_static_yar_Blob_003800, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA)
+/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, schedule_dma_static_yar_Blob_004000, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO)
+/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, schedule_dma_static_yar_Blob_004800, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN)
+/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, schedule_dma_static_yar_Blob_005000, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN)
+/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, schedule_dma_static_yar_Blob_005800, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS)
+/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, schedule_dma_static_yar_Blob_006000, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND)
+/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, schedule_dma_static_yar_Blob_006800, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER)
+/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, schedule_dma_static_yar_Blob_007000, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO)
+/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, schedule_dma_static_yar_Blob_007800, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG)
+/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, schedule_dma_static_yar_Blob_008000, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS)
+/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, schedule_dma_static_yar_Blob_008800, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO)
+/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, schedule_dma_static_yar_Blob_009000, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU)
diff --git a/include/tables/scene_table.h b/include/tables/scene_table.h
new file mode 100644
index 000000000..ebd8cdb03
--- /dev/null
+++ b/include/tables/scene_table.h
@@ -0,0 +1,229 @@
+/**
+ * Scene Table
+ *
+ * DEFINE_SCENE should be used for non-empty scenes
+ * - Argument 0: Name of the scene segment in spec
+ * - Argument 1: Enum value for this scene
+ * - Argument 2: Title card's text id, or zero for no title card
+ * - Argument 3: Scene draw config index
+ * - Argument 4: Restriction flags. See `RESTRICTIONS_SET` on z_parameter.c
+ * - Argument 5: Persistent cycle flag set: bitwise flags which won't be turned off on a cycle reset (will persist between cycles)
+ *
+ * DEFINE_SCENE_UNSET is needed to define empty entries from the original game
+ * - Argument 0: Enum value for this scene
+ */
+// Southern Swamp (Clear)
+/* 0x00 */ DEFINE_SCENE(Z2_20SICHITAI2, SCENE_20SICHITAI2, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30)))
+/* 0x01 */ DEFINE_SCENE_UNSET(SCENE_UNSET_01)
+/* 0x02 */ DEFINE_SCENE_UNSET(SCENE_UNSET_02)
+/* 0x03 */ DEFINE_SCENE_UNSET(SCENE_UNSET_03)
+/* 0x04 */ DEFINE_SCENE_UNSET(SCENE_UNSET_04)
+/* 0x05 */ DEFINE_SCENE_UNSET(SCENE_UNSET_05)
+/* 0x06 */ DEFINE_SCENE_UNSET(SCENE_UNSET_06)
+// Lone Peak Shrine & Grottos
+/* 0x07 */ DEFINE_SCENE(KAKUSIANA, SCENE_KAKUSIANA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 2) | (1 << 10) | (1 << 11)))
+// Cutscene Scene
+/* 0x08 */ DEFINE_SCENE(SPOT00, SCENE_SPOT00, 0, SCENE_DRAW_CFG_NOTHING, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+/* 0x09 */ DEFINE_SCENE_UNSET(SCENE_UNSET_09)
+// Magic Hags' Potion Shop
+/* 0x0A */ DEFINE_SCENE(Z2_WITCH_SHOP, SCENE_WITCH_SHOP, 0x11A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Majora's Lair
+/* 0x0B */ DEFINE_SCENE(Z2_LAST_BS, SCENE_LAST_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Beneath the Graveyard
+/* 0x0C */ DEFINE_SCENE(Z2_HAKASHITA, SCENE_HAKASHITA, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Curiosity Shop
+/* 0x0D */ DEFINE_SCENE(Z2_AYASHIISHOP, SCENE_AYASHIISHOP, 0x10E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+/* 0x0E */ DEFINE_SCENE_UNSET(SCENE_UNSET_0E)
+/* 0x0F */ DEFINE_SCENE_UNSET(SCENE_UNSET_0F)
+// Mama's House (Ranch House in PAL) & Barn
+/* 0x10 */ DEFINE_SCENE(Z2_OMOYA, SCENE_OMOYA, 0x132, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Honey & Darling's Shop
+/* 0x11 */ DEFINE_SCENE(Z2_BOWLING, SCENE_BOWLING, 0x108, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// The Mayor's Residence
+/* 0x12 */ DEFINE_SCENE(Z2_SONCHONOIE, SCENE_SONCHONOIE, 0x10B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Ikana Canyon
+/* 0x13 */ DEFINE_SCENE(Z2_IKANA, SCENE_IKANA, 0x141, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 1) | (1 << 30)))
+// Pirates' Fortress
+/* 0x14 */ DEFINE_SCENE(Z2_KAIZOKU, SCENE_KAIZOKU, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Milk Bar
+/* 0x15 */ DEFINE_SCENE(Z2_MILK_BAR, SCENE_MILK_BAR, 0x10C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Stone Tower Temple
+/* 0x16 */ DEFINE_SCENE(Z2_INISIE_N, SCENE_INISIE_N, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0))
+// Treasure Chest Shop
+/* 0x17 */ DEFINE_SCENE(Z2_TAKARAYA, SCENE_TAKARAYA, 0x109, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_SET(2, 0, 0, 0))
+// Inverted Stone Tower Temple
+/* 0x18 */ DEFINE_SCENE(Z2_INISIE_R, SCENE_INISIE_R, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0))
+// Clock Tower Rooftop
+/* 0x19 */ DEFINE_SCENE(Z2_OKUJOU, SCENE_OKUJOU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Before Clock Town
+/* 0x1A */ DEFINE_SCENE(Z2_OPENINGDAN, SCENE_OPENINGDAN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0))
+// Woodfall Temple
+/* 0x1B */ DEFINE_SCENE(Z2_MITURIN, SCENE_MITURIN, 0x11F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 12) | (1 << 13) | (1 << 15) | (1 << 20) | (1 << 21) | (1 << 22), 0, 0, 0))
+// Path to Mountain Village
+/* 0x1C */ DEFINE_SCENE(Z2_13HUBUKINOMITI, SCENE_13HUBUKINOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Ancient Castle of Ikana
+/* 0x1D */ DEFINE_SCENE(Z2_CASTLE, SCENE_CASTLE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, (1 << 31), 0, (1 << 10)))
+// Deku Scrub Playground
+/* 0x1E */ DEFINE_SCENE(Z2_DEKUTES, SCENE_DEKUTES, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+// Odolwa's Lair
+/* 0x1F */ DEFINE_SCENE(Z2_MITURIN_BS, SCENE_MITURIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Town Shooting Gallery
+/* 0x20 */ DEFINE_SCENE(Z2_SYATEKI_MIZU, SCENE_SYATEKI_MIZU, 0x107, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Snowhead Temple
+/* 0x21 */ DEFINE_SCENE(Z2_HAKUGIN, SCENE_HAKUGIN, 0x12B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 5) | (1 << 21) | (1 << 23) | (1 << 24), 0, 0, 0))
+// Milk Road
+/* 0x22 */ DEFINE_SCENE(Z2_ROMANYMAE, SCENE_ROMANYMAE, 0x149, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Pirates' Fortress Interior
+/* 0x23 */ DEFINE_SCENE(Z2_PIRATE, SCENE_PIRATE, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 12)))
+// Swamp Shooting Gallery
+/* 0x24 */ DEFINE_SCENE(Z2_SYATEKI_MORI, SCENE_SYATEKI_MORI, 0x11B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Pinnacle Rock
+/* 0x25 */ DEFINE_SCENE(Z2_SINKAI, SCENE_SINKAI, 0x135, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2))
+// Fairy's Fountain
+/* 0x26 */ DEFINE_SCENE(Z2_YOUSEI_IZUMI, SCENE_YOUSEI_IZUMI, 0x13E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Swamp Spider House
+/* 0x27 */ DEFINE_SCENE(Z2_KINSTA1, SCENE_KINSTA1, 0x11E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Oceanside Spider House
+/* 0x28 */ DEFINE_SCENE(Z2_KINDAN2, SCENE_KINDAN2, 0x13F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Astral Observatory
+/* 0x29 */ DEFINE_SCENE(Z2_TENMON_DAI, SCENE_TENMON_DAI, 0x114, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Moon Deku Trial
+/* 0x2A */ DEFINE_SCENE(Z2_LAST_DEKU, SCENE_LAST_DEKU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2))
+// Deku Palace
+/* 0x2B */ DEFINE_SCENE(Z2_22DEKUCITY, SCENE_22DEKUCITY, 0x118, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30)))
+// Mountain Smithy
+/* 0x2C */ DEFINE_SCENE(Z2_KAJIYA, SCENE_KAJIYA, 0x127, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Termina Field
+/* 0x2D */ DEFINE_SCENE(Z2_00KEIKOKU, SCENE_00KEIKOKU, 0x100, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4), 0, 0, 0))
+// Post Office
+/* 0x2E */ DEFINE_SCENE(Z2_POSTHOUSE, SCENE_POSTHOUSE, 0x111, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_SET(3, 0, 0, 0))
+// Marine Research Lab
+/* 0x2F */ DEFINE_SCENE(Z2_LABO, SCENE_LABO, 0x13A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+// Beneath the Graveyard (Day 3) and Dampe's House
+/* 0x30 */ DEFINE_SCENE(Z2_DANPEI2TEST, SCENE_DANPEI2TEST, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+/* 0x31 */ DEFINE_SCENE_UNSET(SCENE_UNSET_31)
+// Goron Shrine
+/* 0x32 */ DEFINE_SCENE(Z2_16GORON_HOUSE, SCENE_16GORON_HOUSE, 0x124, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Zora Hall
+/* 0x33 */ DEFINE_SCENE(Z2_33ZORACITY, SCENE_33ZORACITY, 0x136, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Trading Post
+/* 0x34 */ DEFINE_SCENE(Z2_8ITEMSHOP, SCENE_8ITEMSHOP, 0x10F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+// Romani Ranch
+/* 0x35 */ DEFINE_SCENE(Z2_F01, SCENE_F01, 0x12E, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Twinmold's Lair
+/* 0x36 */ DEFINE_SCENE(Z2_INISIE_BS, SCENE_INISIE_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Great Bay Coast
+/* 0x37 */ DEFINE_SCENE(Z2_30GYOSON, SCENE_30GYOSON, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 20), 0, 0, (1 << 1) | (1 << 5)))
+// Zora Cape
+/* 0x38 */ DEFINE_SCENE(Z2_31MISAKI, SCENE_31MISAKI, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, (1 << 7)))
+// Lottery Shop
+/* 0x39 */ DEFINE_SCENE(Z2_TAKARAKUJI, SCENE_TAKARAKUJI, 0x112, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+/* 0x3A */ DEFINE_SCENE_UNSET(SCENE_UNSET_3A)
+// Pirates' Fortress Moat
+/* 0x3B */ DEFINE_SCENE(Z2_TORIDE, SCENE_TORIDE, 0x138, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Fisherman's Hut
+/* 0x3C */ DEFINE_SCENE(Z2_FISHERMAN, SCENE_FISHERMAN, 0x13B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+// Goron Shop
+/* 0x3D */ DEFINE_SCENE(Z2_GORONSHOP, SCENE_GORONSHOP, 0x129, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Deku King's Chamber
+/* 0x3E */ DEFINE_SCENE(Z2_DEKU_KING, SCENE_DEKU_KING, 0x11C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Moon Goron Trial
+/* 0x3F */ DEFINE_SCENE(Z2_LAST_GORON, SCENE_LAST_GORON, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2))
+// Road to Southern Swamp
+/* 0x40 */ DEFINE_SCENE(Z2_24KEMONOMITI, SCENE_24KEMONOMITI, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 1) | (1 << 31)))
+// Doggy Racetrack
+/* 0x41 */ DEFINE_SCENE(Z2_F01_B, SCENE_F01_B, 0x130, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Cucco Shack
+/* 0x42 */ DEFINE_SCENE(Z2_F01C, SCENE_F01C, 0x12F, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Ikana Graveyard
+/* 0x43 */ DEFINE_SCENE(Z2_BOTI, SCENE_BOTI, 0x106, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Goht's Lair
+/* 0x44 */ DEFINE_SCENE(Z2_HAKUGIN_BS, SCENE_HAKUGIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Southern Swamp (poison)
+/* 0x45 */ DEFINE_SCENE(Z2_20SICHITAI, SCENE_20SICHITAI, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30)))
+// Woodfall
+/* 0x46 */ DEFINE_SCENE(Z2_21MITURINMAE, SCENE_21MITURINMAE, 0x117, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0x102, 0, 0, (1 << 10)))
+// Moon Zora Trial
+/* 0x47 */ DEFINE_SCENE(Z2_LAST_ZORA, SCENE_LAST_ZORA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2))
+// Goron Village (spring)
+/* 0x48 */ DEFINE_SCENE(Z2_11GORONNOSATO2, SCENE_11GORONNOSATO2, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30)))
+// Great Bay Temple
+/* 0x49 */ DEFINE_SCENE(Z2_SEA, SCENE_SEA, 0x13D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4) | (1 << 5) | (1 << 6), 0, 0, 0))
+// Waterfall Rapids
+/* 0x4A */ DEFINE_SCENE(Z2_35TAKI, SCENE_35TAKI, 0x137, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Beneath the Well
+/* 0x4B */ DEFINE_SCENE(Z2_REDEAD, SCENE_REDEAD, 0x145, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Zora Hall Rooms
+/* 0x4C */ DEFINE_SCENE(Z2_BANDROOM, SCENE_BANDROOM, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30)))
+// Goron Village (winter)
+/* 0x4D */ DEFINE_SCENE(Z2_11GORONNOSATO, SCENE_11GORONNOSATO, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30)))
+// Goron Graveyard
+/* 0x4E */ DEFINE_SCENE(Z2_GORON_HAKA, SCENE_GORON_HAKA, 0x12A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Sakon's Hideout
+/* 0x4F */ DEFINE_SCENE(Z2_SECOM, SCENE_SECOM, 0x143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Mountain Village (winter)
+/* 0x50 */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA, SCENE_10YUKIYAMANOMURA, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31)))
+// Ghost Hut
+/* 0x51 */ DEFINE_SCENE(Z2_TOUGITES, SCENE_TOUGITES, 0x146, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Deku Shrine
+/* 0x52 */ DEFINE_SCENE(Z2_DANPEI, SCENE_DANPEI, 0x120, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Road to Ikana
+/* 0x53 */ DEFINE_SCENE(Z2_IKANAMAE, SCENE_IKANAMAE, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Swordsman's School
+/* 0x54 */ DEFINE_SCENE(Z2_DOUJOU, SCENE_DOUJOU, 0x110, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE)
+// Music Box House
+/* 0x55 */ DEFINE_SCENE(Z2_MUSICHOUSE, SCENE_MUSICHOUSE, 0x147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Igos du Ikana's Lair
+/* 0x56 */ DEFINE_SCENE(Z2_IKNINSIDE, SCENE_IKNINSIDE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE)
+// Tourist Information
+/* 0x57 */ DEFINE_SCENE(Z2_MAP_SHOP, SCENE_MAP_SHOP, 0x119, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Stone Tower
+/* 0x58 */ DEFINE_SCENE(Z2_F40, SCENE_F40, 0x140, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Inverted Stone Tower
+/* 0x59 */ DEFINE_SCENE(Z2_F41, SCENE_F41, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Mountain Village (spring)
+/* 0x5A */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA2, SCENE_10YUKIYAMANOMURA2, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31)))
+// Path to Snowhead
+/* 0x5B */ DEFINE_SCENE(Z2_14YUKIDAMANOMITI, SCENE_14YUKIDAMANOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 8)))
+// Snowhead
+/* 0x5C */ DEFINE_SCENE(Z2_12HAKUGINMAE, SCENE_12HAKUGINMAE, 0x125, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0))
+// Path to Goron Village (winter)
+/* 0x5D */ DEFINE_SCENE(Z2_17SETUGEN, SCENE_17SETUGEN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7)))
+// Path to Goron Village (spring)
+/* 0x5E */ DEFINE_SCENE(Z2_17SETUGEN2, SCENE_17SETUGEN2, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7)))
+// Gyorg's Lair
+/* 0x5F */ DEFINE_SCENE(Z2_SEA_BS, SCENE_SEA_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31)))
+// Secret Shrine
+/* 0x60 */ DEFINE_SCENE(Z2_RANDOM, SCENE_RANDOM, 0x12C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10)))
+// Stock Pot Inn
+/* 0x61 */ DEFINE_SCENE(Z2_YADOYA, SCENE_YADOYA, 0x10A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Great Bay Cutscene
+/* 0x62 */ DEFINE_SCENE(Z2_KONPEKI_ENT, SCENE_KONPEKI_ENT, 0x139, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Clock Tower Interior
+/* 0x63 */ DEFINE_SCENE(Z2_INSIDETOWER, SCENE_INSIDETOWER, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(1 << 0, 0, 0, 0))
+// Woods of Mystery
+/* 0x64 */ DEFINE_SCENE(Z2_26SARUNOMORI, SCENE_26SARUNOMORI, 0x11D, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Lost Woods (Intro)
+/* 0x65 */ DEFINE_SCENE(Z2_LOST_WOODS, SCENE_LOST_WOODS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Moon Link Trial
+/* 0x66 */ DEFINE_SCENE(Z2_LAST_LINK, SCENE_LAST_LINK, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2))
+// The Moon
+/* 0x67 */ DEFINE_SCENE(Z2_SOUGEN, SCENE_SOUGEN, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_NONE)
+// Bomb Shop
+/* 0x68 */ DEFINE_SCENE(Z2_BOMYA, SCENE_BOMYA, 0x10D, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE)
+// Giants' Chamber
+/* 0x69 */ DEFINE_SCENE(Z2_KYOJINNOMA, SCENE_KYOJINNOMA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// Gorman Track
+/* 0x6A */ DEFINE_SCENE(Z2_KOEPONARACE, SCENE_KOEPONARACE, 0x131, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE)
+// Goron Racetrack
+/* 0x6B */ DEFINE_SCENE(Z2_GORONRACE, SCENE_GORONRACE, 0x126, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// East Clock Town
+/* 0x6C */ DEFINE_SCENE(Z2_TOWN, SCENE_TOWN, 0x101, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(1, 0, 0, 0))
+// West Clock Town
+/* 0x6D */ DEFINE_SCENE(Z2_ICHIBA, SCENE_ICHIBA, 0x102, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE)
+// North Clock Town
+/* 0x6E */ DEFINE_SCENE(Z2_BACKTOWN, SCENE_BACKTOWN, 0x103, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10)))
+// South Clock Town
+/* 0x6F */ DEFINE_SCENE(Z2_CLOCKTOWER, SCENE_CLOCKTOWER, 0x104, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 10)))
+// Laundry Pool
+/* 0x70 */ DEFINE_SCENE(Z2_ALLEY, SCENE_ALLEY, 0x105, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 1, 0))
diff --git a/include/ultra64.h b/include/ultra64.h
index ad2bc2463..f7baade42 100644
--- a/include/ultra64.h
+++ b/include/ultra64.h
@@ -6,6 +6,7 @@
#include "unk.h"
+#include "ultra64/controller_voice.h"
#include "ultra64/hardware.h"
#include "ultra64/message.h"
#include "ultra64/sptask.h"
diff --git a/include/ultra64/controller_voice.h b/include/ultra64/controller_voice.h
new file mode 100644
index 000000000..a5480d877
--- /dev/null
+++ b/include/ultra64/controller_voice.h
@@ -0,0 +1,71 @@
+#ifndef CONTROLLER_VOICE_H
+#define CONTROLLER_VOICE_H
+
+#include "PR/ultratypes.h"
+#include "ultra64/os_voice.h"
+#include "ultra64/message.h"
+#include "libc/stddef.h"
+
+typedef struct {
+ /* 0x0 */ u8 dummy;
+ /* 0x1 */ u8 txsize;
+ /* 0x2 */ u8 rxsize;
+ /* 0x3 */ u8 cmd;
+ /* 0x4 */ u8 addrh;
+ /* 0x5 */ u8 addrl;
+ /* 0x6 */ u8 data[2];
+ /* 0x8 */ u8 datacrc;
+} __OSVoiceRead2Format; // size = 0x9
+
+typedef struct {
+ /* 0x00 */ u8 dummy;
+ /* 0x01 */ u8 txsize;
+ /* 0x02 */ u8 rxsize;
+ /* 0x03 */ u8 cmd;
+ /* 0x04 */ u8 addrh;
+ /* 0x05 */ u8 addrl;
+ /* 0x06 */ u8 data[36];
+ /* 0x2A */ u8 datacrc;
+} __OSVoiceRead36Format; // size = 0x2B
+
+typedef struct {
+ /* 0x0 */ u8 dummy;
+ /* 0x1 */ u8 txsize;
+ /* 0x2 */ u8 rxsize;
+ /* 0x3 */ u8 cmd;
+ /* 0x4 */ u8 addrh;
+ /* 0x5 */ u8 addrl;
+ /* 0x6 */ u8 data[4];
+ /* 0xA */ u8 datacrc;
+} __OSVoiceWrite4Format; // size = 0xB
+
+typedef struct {
+ /* 0x00 */ u8 dummy;
+ /* 0x01 */ u8 txsize;
+ /* 0x02 */ u8 rxsize;
+ /* 0x03 */ u8 cmd;
+ /* 0x04 */ u8 addrh;
+ /* 0x05 */ u8 addrl;
+ /* 0x06 */ u8 data[20];
+ /* 0x1A */ u8 datacrc;
+} __OSVoiceWrite20Format; // size = 0x1B
+
+typedef struct {
+ /* 0x0 */ u8 txsize;
+ /* 0x1 */ u8 rxsize;
+ /* 0x2 */ u8 cmd;
+ /* 0x3 */ u8 data;
+ /* 0x4 */ u8 scrc;
+ /* 0x5 */ u8 datacrc;
+} __OSVoiceSWriteFormat; // size = 0x6
+
+s32 __osVoiceContRead2(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[2]);
+s32 __osVoiceContRead36(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[36]);
+s32 __osVoiceContWrite4(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[4]);
+s32 __osVoiceContWrite20(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[20]);
+s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status);
+s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status);
+s32 __osVoiceSetADConverter(OSMesgQueue* mq, s32 channel, u8 data);
+u8 __osVoiceContDataCrc(u8* data, size_t numBytes);
+
+#endif
diff --git a/include/ultra64/os_voice.h b/include/ultra64/os_voice.h
new file mode 100644
index 000000000..8452ed45c
--- /dev/null
+++ b/include/ultra64/os_voice.h
@@ -0,0 +1,42 @@
+#ifndef OS_VOICE_H
+#define OS_VOICE_H
+
+#include "PR/ultratypes.h"
+#include "ultra64/message.h"
+
+typedef enum OsVoiceHandleMode {
+ /* 0 */ VOICE_HANDLE_MODE_0,
+ /* 1 */ VOICE_HANDLE_MODE_1,
+ /* 2 */ VOICE_HANDLE_MODE_2,
+ /* 3 */ VOICE_HANDLE_MODE_3,
+ /* 4 */ VOICE_HANDLE_MODE_4
+} OsVoiceHandleMode;
+
+typedef struct {
+ /* 0x0 */ OSMesgQueue* mq;
+ /* 0x4 */ s32 channel; // Controller port
+ /* 0x8 */ OsVoiceHandleMode mode;
+ /* 0xC */ u8 status;
+} OSVoiceHandle; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ u16 warning; // Warning
+ /* 0x02 */ u16 answerNum; // Candidate number (0~5)
+ /* 0x04 */ u16 voiceLevel; // Voice input level
+ /* 0x06 */ u16 voiceRelLevel; // Relative voice level "voice_sn"
+ /* 0x08 */ u16 voiceTime; // Voice input time
+ /* 0x0A */ u16 answer[5]; // Candidate word number
+ /* 0x14 */ u16 distance[5]; // Distance value
+} OSVoiceData; // size = 0x20
+
+s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel);
+s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word);
+s32 osVoiceCheckWord(u8* word);
+s32 osVoiceStartReadData(OSVoiceHandle* hd);
+s32 osVoiceStopReadData(OSVoiceHandle* hd);
+s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result);
+s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords);
+s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size);
+s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital);
+
+#endif
diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h
new file mode 100644
index 000000000..4fea2259a
--- /dev/null
+++ b/include/ultra64/viint.h
@@ -0,0 +1,37 @@
+#ifndef ULTRA64_VIINT_H
+#define ULTRA64_VIINT_H
+
+#define VI_STATE_MODE_SET (1 << 0)
+#define VI_STATE_XSCALE_SET (1 << 1)
+#define VI_STATE_YSCALE_FACTOR_SET (1 << 2)
+#define VI_STATE_CTRL_SET (1 << 3)
+#define VI_STATE_BUFFER_SET (1 << 4)
+#define VI_STATE_BLACK (1 << 5)
+#define VI_STATE_REPEATLINE (1 << 6)
+#define VI_STATE_FADE (1 << 7)
+
+#define VI_SCALE_MASK 0xFFF
+#define VI_2_10_FPART_MASK 0x3FF
+#define VI_SUBPIXEL_SH 0x10
+
+// For use in initializing OSViMode structures
+
+#define BURST(hsync_width, color_width, vsync_width, color_start) \
+ (hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20))
+#define WIDTH(v) v
+#define VSYNC(v) v
+#define HSYNC(duration, leap) (duration | (leap << 16))
+#define LEAP(upper, lower) ((upper << 16) | lower)
+#define START(start, end) ((start << 16) | end)
+
+#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1))
+
+#define F210(val) FTOFIX(val, 2, 10)
+#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16))
+
+#define VCURRENT(v) v
+#define ORIGIN(v) v
+#define VINTR(v) v
+#define HSTART START
+
+#endif
diff --git a/include/variables.h b/include/variables.h
index a128b33b1..4cf303c7c 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -72,11 +72,6 @@ extern UNK_TYPE4 D_80097F10;
extern char spaces[];
extern char zeroes[];
extern OSTimer* __osTimerList;
-// extern UNK_TYPE4 D_80097F80;
-extern float D_80097F90;
-// extern UNK_TYPE1 D_80097FA0;
-// extern UNK_TYPE1 D_80097FA4;
-// extern UNK_TYPE1 D_80097FA5;
extern s32 __osPfsLastChannel;
extern OSViMode osViModeNtscLan1;
extern OSViMode osViModeMpalLan1;
@@ -89,7 +84,7 @@ extern OSViMode osViModeFpalLan1;
// extern u8 udigs[];
// extern OSDevMgr __osViDevMgr;
extern u32 __additional_scanline;
-// extern UNK_TYPE1 D_80098180;
+
extern char bootThreadName[];
extern char idleThreadName[];
extern char irqmgrThreadName[];
@@ -308,8 +303,6 @@ extern OSTask tmp_task;
extern OSMesg siAccessBuf[1];
extern OSMesgQueue __osSiAccessQueue;
-extern UNK_TYPE1 D_8009CF60;
-// extern UNK_TYPE4 D_8009CF70;
extern OSThread __osThreadSave;
extern OSPiHandle D_8009D130;
extern OSPiHandle D_8009D1A8;
@@ -373,7 +366,7 @@ extern UNK_PTR D_801AE260[3];
// extern UNK_TYPE1 D_801AE48C;
// extern UNK_TYPE1 D_801AE490;
extern EffectSsOverlay gParticleOverlayTable[39];
-// extern FlagSetEntry sFlagEntries[];
+
// extern s32 sEntryIndex;
// extern u32 sCurrentBit;
// extern s32 sTimer;
@@ -384,56 +377,12 @@ extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[];
extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B4708;
-extern DamageTable sDamageTablePresets[23];
-extern f32 damageMultipliers[16];
-extern Collider defaultCollider;
-extern ColliderTouch defaultColliderTouch;
-extern ColliderBump defaultColliderBump;
-extern ColliderInfo defaultColliderInfo;
-extern ColliderJntSphElementDim defaultColliderJntSphElementDim;
-extern Cylinder16 defaultColliderCylinderDim;
-extern TriNorm defaultColliderTrisElementDim;
-extern ColliderQuadDim defaultColliderQuadDim;
-extern Vec3f defaultLinePoint;
-extern ColChkResetFunc sATResetFuncs[COLSHAPE_MAX];
-extern ColChkResetFunc sACResetFuncs[COLSHAPE_MAX];
-extern ColChkResetFunc sOCResetFuncs[COLSHAPE_MAX];
-extern ColChkBloodFunc sBloodFuncs[6];
-extern HitInfo sHitInfo[14];
-extern ColChkApplyFunc sColChkApplyFuncs[COLSHAPE_MAX];
-extern ColChkVsFunc sACVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX];
-extern ColChkVsFunc sOCVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX];
-extern CollisionCheckInfo defaultColChkInfo;
-extern ColChkApplyFunc sApplyDamageFuncs[COLSHAPE_MAX];
-extern ColChkLineFunc sOCLineCheckFuncs[COLSHAPE_MAX];
-extern EffectShieldParticleInit shieldParticleInitMetal;
-extern EffectShieldParticleInit shieldParticleInitWood;
-// extern UNK_TYPE4 D_801BB090;
-// extern UNK_TYPE1 D_801BB094;
-// extern UNK_TYPE1 D_801BB0DC;
-// extern UNK_TYPE2 D_801BB0FC;
-// extern UNK_TYPE1 D_801BB100;
-
extern u8 gOpeningEntranceIndex;
extern ActorCutscene sGlobalCutsceneList[8];
extern GameStateOverlay gGameStateOverlayTable[];
extern s32 gGraphNumGameStates;
-// extern UNK_TYPE2 D_801BDA70;
-// extern UNK_TYPE2 D_801BDA74;
-// extern UNK_TYPE2 D_801BDA78;
-// extern UNK_TYPE2 D_801BDA7C;
-extern s32 D_801BDA9C;
-extern UNK_TYPE4 D_801BDAA0;
-extern s32 D_801BDAA4;
-// extern UNK_TYPE2 D_801BDAA8;
-// extern UNK_TYPE2 D_801BDAAA;
-// extern UNK_TYPE2 D_801BDAAC;
-// extern UNK_TYPE2 D_801BDAAE;
-// extern UNK_TYPE2 D_801BDAB0;
-// extern UNK_TYPE2 D_801BDAB2;
-// extern UNK_TYPE2 D_801BDAB4;
-// extern UNK_TYPE2 D_801BDAB6;
+
// extern UNK_TYPE4 D_801BDAC0;
// extern UNK_TYPE4 D_801BDAC4;
// extern UNK_TYPE4 D_801BDAC8;
@@ -473,30 +422,6 @@ extern u8 D_801BDBC8;
// extern UNK_TYPE1 D_801BE92C;
// extern UNK_TYPE1 D_801BE944;
// extern actor_init_var_func sInitChainHandlers[11];
-// extern UNK_TYPE2 sHeartsPrimColors;
-// extern UNK_TYPE2 D_801BE992;
-// extern UNK_TYPE2 D_801BE994;
-// extern UNK_TYPE2 sHeartsEnvColors;
-// extern UNK_TYPE2 D_801BE9A6;
-// extern UNK_TYPE2 D_801BE9A8;
-// extern UNK_TYPE2 sHeartsPrimFactors;
-// extern UNK_TYPE2 sHeartsEnvFactors;
-// extern UNK_TYPE2 sHeartsDDPrimColors;
-// extern UNK_TYPE2 D_801BE9E2;
-// extern UNK_TYPE2 D_801BE9E4;
-// extern UNK_TYPE2 sHeartsDDEnvColors;
-// extern UNK_TYPE2 D_801BE9F6;
-// extern UNK_TYPE2 D_801BE9F8;
-// extern UNK_TYPE2 sHeartsDDPrimFactors;
-// extern UNK_TYPE2 D_801BEA0A;
-// extern UNK_TYPE2 D_801BEA0C;
-// extern UNK_TYPE2 sHeartsDDEnvFactors;
-// extern UNK_TYPE2 D_801BEA1E;
-// extern UNK_TYPE2 D_801BEA20;
-// extern UNK_TYPE1 HeartTextures;
-// extern UNK_TYPE1 HeartDDTextures;
-//extern LightsPosBindFunc posBindFuncs[3];
-//extern LightsBindFunc dirBindFuncs[3];
// extern UNK_TYPE4 D_801BEAD4;
// extern UNK_TYPE4 D_801BEAD8;
// extern UNK_TYPE1 D_801BEAE0;
@@ -581,7 +506,7 @@ extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX];
extern ObjectId gObjectTableSize;
extern RomFile gObjectTable[OBJECT_ID_MAX];
-extern SceneTableEntry gSceneTable[];
+extern SceneTableEntry gSceneTable[SCENE_MAX];
extern UNK_PTR D_801C5C50;
// extern UNK_TYPE1 D_801C5C9C;
extern UNK_PTR D_801C5CB0;
@@ -600,9 +525,7 @@ extern UNK_PTR D_801C5CB0;
// extern UNK_TYPE2 D_801C6A8C;
// extern UNK_TYPE2 D_801C6A90;
// extern UNK_TYPE2 D_801C6A94;
-extern u8 D_801C6A98[5][5];
-// extern UNK_TYPE1 D_801C6AB8;
-// extern UNK_TYPE1 D_801C6B28;
+extern u8 gPageSwitchNextButtonStatus[6][5];
// extern UNK_TYPE1 D_801CED40;
// extern UNK_TYPE2 D_801CFC78;
// extern UNK_TYPE1 D_801CFC7A;
@@ -735,65 +658,14 @@ extern s32 gDbgCamEnabled;
extern Input* D_801D0D60;
// extern UNK_TYPE2 sPlayerCsIdToCsCamId;
// extern UNK_TYPE1 D_801D0D7A;
-// extern UNK_TYPE1 D_801D0D80;
-// extern UNK_TYPE1 D_801D11F4;
-// extern UNK_TYPE1 D_801D1230;
-// extern UNK_TYPE1 D_801D1234;
-// extern UNK_TYPE4 D_801D1238;
-// extern UNK_TYPE1 D_801D1244;
-// extern UNK_TYPE1 D_801D12C0;
-// extern UNK_TYPE1 D_801D12D0;
-// extern UNK_TYPE1 D_801D12D4;
-// extern UNK_TYPE1 D_801D12D8;
-// extern UNK_TYPE1 D_801D12DC;
-// extern UNK_TYPE2 D_801D1330;
-// extern UNK_TYPE1 D_801D1342;
-// extern UNK_TYPE2 D_801D1344;
-// extern UNK_TYPE1 D_801D1368;
-// extern UNK_TYPE2 D_801D1374;
-// extern UNK_TYPE1 D_801D1388;
-// extern UNK_TYPE2 D_801D13D8;
-// extern UNK_TYPE2 D_801D13DC;
-// extern UNK_TYPE2 D_801D13E0;
-// extern UNK_TYPE2 D_801D13E4;
-// extern UNK_TYPE4 D_801D13E8;
-// extern UNK_TYPE1 D_801D13EC;
-// extern UNK_TYPE1 D_801D13F0;
-// extern UNK_TYPE1 D_801D13F4;
-// extern UNK_TYPE1 D_801D13F8;
-// extern UNK_TYPE1 D_801D1420;
-// extern UNK_TYPE2 D_801D142C;
-// extern UNK_TYPE2 D_801D1434;
-// extern UNK_TYPE2 D_801D1438;
-// extern UNK_TYPE2 D_801D143C;
-// extern UNK_TYPE2 D_801D1440;
-// extern UNK_TYPE2 D_801D1444;
-// extern UNK_TYPE2 D_801D1448;
-// extern UNK_TYPE2 D_801D144C;
-// extern UNK_TYPE2 D_801D1450;
-// extern UNK_TYPE2 D_801D1454;
-// extern UNK_TYPE2 D_801D1458;
-// extern UNK_TYPE2 D_801D145C;
-// extern UNK_TYPE2 D_801D1460;
-// extern UNK_TYPE1 D_801D1464;
-// extern UNK_TYPE1 D_801D1468;
-// extern UNK_TYPE1 D_801D146C;
-// extern UNK_TYPE2 D_801D14DC;
-// extern UNK_TYPE2 D_801D14E0;
-// extern UNK_TYPE2 D_801D14E4;
-// extern UNK_TYPE2 D_801D14E8;
// extern UNK_TYPE4 D_801D14F0;
-extern s32 gFramerateDivisor;
-extern f32 gFramerateDivisorF;
-extern f32 gFramerateDivisorHalf;
-extern f32 gFramerateDivisorThird;
+
extern u32 retryCount;
extern u32 cfbIdx[3];
extern s32 gScreenWidth;
extern s32 gScreenHeight;
extern u32 startHeapSize;
extern UNK_PTR D_801D1540;
-// extern f32 sFactorialTbl[13];
extern Vec3f gZeroVec3f;
extern Vec3s gZeroVec3s;
@@ -1605,10 +1477,6 @@ extern f32 D_801DD774;
extern f32 D_801DD780;
extern f32 D_801DD7B0;
extern f32 D_801DD7C0;
-extern f32 D_801DD7E0;
-extern f32 D_801DD7E4;
-extern f32 D_801DD7E8;
-extern f32 D_801DD7EC;
// extern UNK_TYPE2 D_801DD880;
// extern UNK_TYPE1 D_801DD8E0;
// extern UNK_TYPE4 D_801DD900;
@@ -2351,7 +2219,6 @@ extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F5730;
// extern UNK_TYPE1 D_801F57B4;
// extern UNK_TYPE1 D_801F5834;
-// extern NmiBuff* gNMIBuffer;
// extern UNK_TYPE1 sSkyboxDrawMatrix;
// extern UNK_TYPE1 D_801F6AF0;
@@ -2392,7 +2259,7 @@ extern UNK_TYPE1 D_801F7FF0;
extern struct_801F8010 D_801F8010;
extern VisZbuf sVisZbuf;
extern VisMono sMonoColors;
-extern UNK_TYPE1 D_801F8048;
+extern ViMode D_801F8048;
extern FaultAddrConvClient sGraphFaultAddrConvClient;
extern FaultClient sGraphFaultClient;
extern GfxMasterList* gGfxMasterDL;
@@ -2421,30 +2288,32 @@ extern volatile OSTime sRSPOtherTotalTime;
// extern UNK_TYPE1 D_801FBB18;
extern volatile OSTime gRDPTotalTime;
// extern UNK_TYPE1 D_801FBB28;
-extern OSViMode D_801FBB30;
-extern u32* gFramebuffers[2];
-extern OSViMode* D_801FBB88;
+
+extern OSViMode sNotebookViMode;
+extern void* gFramebuffers[2];
+extern OSViMode* gActiveViMode;
extern u16* gZBufferPtr;
-extern void* D_801FBB90;
+extern void* gWorkBuffer;
extern u64* gGfxSPTaskOutputBufferPtr;
-extern size_t gGfxSPTaskOutputBufferSize;
-// extern UNK_TYPE1 D_801FBB9C;
-// extern UNK_TYPE1 D_801FBBA0;
-extern u16 (*gZBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT];
-extern u16 (*gWorkBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT];
-extern u64 (*gGfxSPTaskOutputBuffer)[0x3000];
extern void* gGfxSPTaskOutputBufferEnd;
-// extern UNK_TYPE1 D_801FBBB4;
-// extern UNK_TYPE1 D_801FBBB8;
-// extern UNK_TYPE1 D_801FBBBC;
-// extern UNK_TYPE1 D_801FBBC0;
-extern u64 (*gGfxSPTaskOutputBuffer2)[0x3000];
-extern void* gGfxSPTaskOutputBufferEnd2;
-extern UNK_TYPE2 D_801FBBCC;
-extern UNK_TYPE2 D_801FBBCE;
-// extern UNK_TYPE1 D_801FBBD0;
-// extern UNK_TYPE1 D_801FBBD2;
-extern u8 D_801FBBD4;
+extern void* sCfbLoRes1;
+extern void* sCfbLoRes0;
+extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
+extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
+extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000];
+extern void* gGfxSPTaskOutputBufferEndLoRes;
+extern void* sCfbHiRes1;
+extern void* sCfbHiRes0;
+extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
+extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
+extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000];
+extern void* gGfxSPTaskOutputBufferEndHiRes;
+extern s16 gCfbWidth;
+extern s16 gCfbHeight;
+extern s16 gCfbLeftAdjust;
+extern s16 gCfbUpperAdjust;
+extern u8 gSysCfbHiResEnabled;
+
extern Vec3f D_801FBBF0;
extern LineSegment Math3D_ColSphereTri_line;
extern Vec3f Math3D_ColSphereTri_point;
@@ -2608,7 +2477,6 @@ extern s32 D_801FD120;
// extern UNK_TYPE1 D_801FD598;
// extern UNK_TYPE1 D_801FD5A0;
// extern UNK_TYPE1 D_801FD5A4;
-extern OSVoiceHandle gVoiceHandle;
// extern UNK_TYPE1 D_801FD5C4;
// extern UNK_TYPE1 D_801FD5C8;
// extern UNK_TYPE1 D_801FD5E8;
diff --git a/include/z64.h b/include/z64.h
index b299d883c..444fa0a45 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -35,6 +35,7 @@
#include "z64animation_legacy.h"
#include "z64audio.h"
#include "z64bgcheck.h"
+#include "z64bombers_notebook.h"
#include "z64camera.h"
#include "z64collision_check.h"
#include "z64curve.h"
@@ -44,6 +45,7 @@
#include "z64effect.h"
#include "z64frameadvance.h"
#include "z64game_over.h"
+#include "z64game.h"
#include "z64interface.h"
#include "z64item.h"
#include "z64light.h"
@@ -58,72 +60,20 @@
#include "z64schedule.h"
#include "z64skin.h"
#include "z64skybox.h"
+#include "z64sound_source.h"
#include "z64subs.h"
#include "z64transition.h"
#include "z64view.h"
#include "regs.h"
-#define Z_THREAD_ID_IDLE 1
-#define Z_THREAD_ID_SLOWLY 2
-#define Z_THREAD_ID_MAIN 3
-#define Z_THREAD_ID_GRAPH 4
-#define Z_THREAD_ID_SCHED 5
-#define Z_THREAD_ID_DMAMGR 18
-#define Z_THREAD_ID_IRQMGR 19
-
-#define Z_PRIORITY_SLOWLY 5
-#define Z_PRIORITY_GRAPH 9
-#define Z_PRIORITY_AUDIOMGR 11
-#define Z_PRIORITY_IDLE 12
-#define Z_PRIORITY_MAIN 12
-#define Z_PRIORITY_PADMGR 15
-#define Z_PRIORITY_SCHED 16
-#define Z_PRIORITY_DMAMGR 17
-#define Z_PRIORITY_IRQMGR 18
-
-typedef enum {
- /* 0 */ EQUIP_SLOT_B,
- /* 1 */ EQUIP_SLOT_C_LEFT,
- /* 2 */ EQUIP_SLOT_C_DOWN,
- /* 3 */ EQUIP_SLOT_C_RIGHT,
- /* 4 */ EQUIP_SLOT_A
-} EquipSlot;
-
typedef struct {
- /* 0x0 */ s8 segment;
- /* 0x2 */ s16 type;
- /* 0x4 */ void* params;
-} AnimatedMaterial; // size = 0x8
-
-typedef struct {
- /* 0x0 */ Vec3s pos;
- /* 0x6 */ s16 unk_06;
- /* 0x8 */ Gfx* opa;
- /* 0xC */ Gfx* xlu;
-} PolygonDlist2; // size = 0x10
-
-typedef struct {
- /* 0x0 */ u8 type;
- /* 0x1 */ u8 num; // number of dlist entries
- /* 0x4 */ void* start;
- /* 0x8 */ void* end;
-} PolygonType2; // size = 0xC
-
-typedef struct {
- /* 0x00 */ u32 resetting;
- /* 0x04 */ u32 resetCount;
- /* 0x08 */ OSTime duration;
- /* 0x10 */ OSTime resetTime;
-} NmiBuff; // size >= 0x18
-
-typedef struct {
- /* 0x00 */ int unk0;
- /* 0x04 */ void* unk4;
- /* 0x08 */ int unk8;
- /* 0x0C */ int unkC;
- /* 0x10 */ int unk10;
- /* 0x14 */ OSMesgQueue unk14;
-} s80185D40; // size = 0x2C
+ /* 0x00 */ s32 requestType;
+ /* 0x04 */ OSMesg response;
+ /* 0x08 */ void* addr;
+ /* 0x0C */ s32 pageNum;
+ /* 0x10 */ s32 pageCount;
+ /* 0x14 */ OSMesgQueue messageQueue;
+} FlashromRequest; // size = 0x2C
// End of RDRAM without the Expansion Pak installed
#define NORMAL_RDRAM_END 0x80400000
@@ -157,14 +107,6 @@ typedef struct {
/* 0x38 */ FaultDrawerCallback inputCallback;
} FaultDrawer; // size = 0x3C
-typedef struct {
- /* 0x00 */ u8 countdown;
- /* 0x01 */ u8 playSfxEachFrame;
- /* 0x02 */ u16 sfxId;
- /* 0x04 */ Vec3f worldPos;
- /* 0x10 */ Vec3f projectedPos;
-} SoundSource; // size = 0x1C
-
typedef void(*fault_update_input_func)(Input* input);
typedef struct {
@@ -199,7 +141,7 @@ typedef struct {
/* 0x204 */ u16 pageIndex;
/* 0x206 */ u16 switchPageTimer;
/* 0x208 */ u16 savePromptState;
- /* 0x20C */ f32 unk_20C;
+ /* 0x20C */ f32 unk_20C; // set to 936.0f, unused remnant from OoT
/* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen
/* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen
/* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen
@@ -215,7 +157,7 @@ typedef struct {
/* 0x24C */ s16 cursorYIndex[5];
/* 0x256 */ s16 unk_256; // Uses DungeonItem enum
/* 0x258 */ s16 cursorSpecialPos;
- /* 0x25A */ s16 pageSwitchTimer;
+ /* 0x25A */ s16 pageSwitchInputTimer; // Used to introduce a delay before switching page when arriving on the "scroll left/right" positions while holding stick left/right.
/* 0x25C */ u16 namedItem;
/* 0x25E */ u16 cursorItem[5];
/* 0x268 */ u16 cursorSlot[5];
@@ -226,15 +168,15 @@ typedef struct {
/* 0x27A */ s16 equipAnimY;
/* 0x27C */ s16 equipAnimAlpha;
/* 0x27E */ s16 infoPanelOffsetY;
- /* 0x280 */ u16 unk_280;
+ /* 0x280 */ u16 nameDisplayTimer;
/* 0x282 */ u16 nameColorSet;
/* 0x284 */ s16 cursorColorSet;
- /* 0x286 */ s16 unk_286;
- /* 0x288 */ f32 unk_288;
- /* 0x28C */ f32 unk_28C;
- /* 0x290 */ f32 unk_290;
- /* 0x294 */ f32 unk_294;
- /* 0x298 */ f32 unk_298;
+ /* 0x286 */ s16 cursorSpinPhase;
+ /* 0x288 */ f32 cursorX;
+ /* 0x28C */ f32 cursorY;
+ /* 0x290 */ f32 cursorWidth;
+ /* 0x294 */ f32 cursorHeight;
+ /* 0x298 */ f32 cursorShrinkRate;
/* 0x29C */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no
/* 0x29E */ s16 promptAlpha;
/* 0x2A0 */ s16 ocarinaSongIndex;
@@ -270,45 +212,45 @@ typedef struct {
/* 0x00 */ u16 unk_0;
/* 0x02 */ u16 sceneTimeSpeed;
/* 0x04 */ Vec3f sunPos;
- /* 0x10 */ u8 unk_10;
- /* 0x11 */ u8 unk_11;
+ /* 0x10 */ u8 skybox1Index;
+ /* 0x11 */ u8 skybox2Index;
/* 0x12 */ u8 unk_12;
- /* 0x13 */ u8 unk_13;
+ /* 0x13 */ u8 skyboxBlend;
/* 0x14 */ u8 unk_14;
/* 0x15 */ u8 skyboxDisabled;
/* 0x16 */ u8 sunMoonDisabled;
- /* 0x17 */ u8 unk_17;
- /* 0x18 */ u8 unk_18;
- /* 0x19 */ u8 unk_19;
- /* 0x1A */ u16 unk_1A;
+ /* 0x17 */ u8 skyboxConfig;
+ /* 0x18 */ u8 changeSkyboxNextConfig;
+ /* 0x19 */ u8 changeSkyboxState;
+ /* 0x1A */ u16 changeSkyboxTimer;
/* 0x1C */ u16 unk_1C;
- /* 0x1E */ u8 unk_1E;
- /* 0x1F */ u8 unk_1F;
- /* 0x20 */ u8 unk_20;
- /* 0x21 */ u8 unk_21;
- /* 0x22 */ u16 unk_22;
- /* 0x24 */ u16 unk_24;
+ /* 0x1E */ u8 lightMode;
+ /* 0x1F */ u8 lightConfig;
+ /* 0x20 */ u8 changeLightNextConfig;
+ /* 0x21 */ u8 changeLightEnabled;
+ /* 0x22 */ u16 changeLightTimer;
+ /* 0x24 */ u16 changeDuration;
/* 0x26 */ u8 unk_26;
/* 0x28 */ LightInfo dirLight1; // sun 1
/* 0x36 */ LightInfo unk_36; // sun 2
- /* 0x44 */ s8 unk_44;
- /* 0x48 */ DmaRequest unk_48;
- /* 0x68 */ OSMesgQueue unk_68;
- /* 0x80 */ OSMesg unk_80;
- /* 0x84 */ f32 unk_84;
- /* 0x88 */ f32 unk_88;
+ /* 0x44 */ s8 skyboxDmaState;
+ /* 0x48 */ DmaRequest dmaRequest;
+ /* 0x68 */ OSMesgQueue loadQueue;
+ /* 0x80 */ OSMesg loadMsg;
+ /* 0x84 */ f32 glareAlpha;
+ /* 0x88 */ f32 lensFlareAlphaScale;
/* 0x8C */ EnvLightSettings lightSettings;
/* 0xA8 */ f32 unk_A8;
/* 0xAC */ Vec3s windDir;
/* 0xB4 */ f32 windSpeed;
/* 0xB8 */ u8 numLightSettings;
/* 0xBC */ LightSettings* lightSettingsList;
- /* 0xC0 */ u8 unk_C0;
- /* 0xC1 */ u8 unk_C1;
- /* 0xC2 */ u8 unk_C2;
+ /* 0xC0 */ u8 lightBlendEnabled;
+ /* 0xC1 */ u8 lightSetting;
+ /* 0xC2 */ u8 prevLightSetting;
/* 0xC3 */ u8 lightSettingOverride;
/* 0xC4 */ LightSettings unk_C4;
- /* 0xDA */ u16 unk_DA;
+ /* 0xDA */ u16 lightBlendRateOverride;
/* 0xDC */ f32 lightBlend;
/* 0xE0 */ u8 unk_E0;
/* 0xE1 */ u8 unk_E1;
@@ -404,62 +346,8 @@ typedef struct {
/* 0x844 */ void* fb;
} FaultThreadStruct; // size = 0x848
-struct GameState;
-
-typedef void (*GameStateFunc)(struct GameState* gameState);
-
-typedef struct {
- /* 0x00 */ void* loadedRamAddr;
- /* 0x04 */ uintptr_t vromStart; // if applicable
- /* 0x08 */ uintptr_t vromEnd; // if applicable
- /* 0x0C */ void* vramStart; // if applicable
- /* 0x10 */ void* vramEnd; // if applicable
- /* 0x14 */ UNK_PTR unk_14;
- /* 0x18 */ GameStateFunc init; // initializes and executes the given context
- /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load
- /* 0x20 */ UNK_PTR unk_20;
- /* 0x24 */ UNK_PTR unk_24;
- /* 0x28 */ UNK_TYPE unk_28;
- /* 0x2C */ size_t instanceSize;
-} GameStateOverlay; // size = 0x30
-
-typedef struct GameAllocEntry {
- /* 0x0 */ struct GameAllocEntry* next;
- /* 0x4 */ struct GameAllocEntry* prev;
- /* 0x8 */ size_t size;
- /* 0xC */ u32 unk_0C;
-} GameAllocEntry; // size = 0x10
-
-typedef struct GameAlloc {
- /* 0x00 */ GameAllocEntry base;
- /* 0x10 */ GameAllocEntry* head;
-} GameAlloc; // size = 0x14
-
-typedef struct GameState {
- /* 0x00 */ GraphicsContext* gfxCtx;
- /* 0x04 */ GameStateFunc main;
- /* 0x08 */ GameStateFunc destroy;
- /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load.
- /* 0x10 */ size_t size;
- /* 0x14 */ Input input[MAXCONTROLLERS];
- /* 0x74 */ TwoHeadArena heap;
- /* 0x84 */ GameAlloc alloc;
- /* 0x98 */ UNK_TYPE1 pad98[0x3];
- /* 0x9B */ u8 running; // If 0, switch to next game state
- /* 0x9C */ u32 frames;
- /* 0xA0 */ u8 padA0[0x2];
- /* 0xA2 */ u8 framerateDivisor; // game speed?
- /* 0xA3 */ u8 unk_A3;
-} GameState; // size = 0xA4
-
struct PlayState;
-typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*);
-typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*);
-typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*);
-typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*);
-typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*);
-
typedef struct {
/* 0x000 */ IrqMgr* irqMgr;
/* 0x004 */ SchedContext* sched;
@@ -499,7 +387,7 @@ typedef struct PlayState {
/* 0x00830 */ CollisionContext colCtx;
/* 0x01CA0 */ ActorContext actorCtx;
/* 0x01F24 */ CutsceneContext csCtx;
- /* 0x01F78 */ SoundSource soundSources[16];
+ /* 0x01F78 */ SoundSource soundSources[SOUND_SOURCE_COUNT];
/* 0x02138 */ EffFootmark footprintInfo[100];
/* 0x046B8 */ SramContext sramCtx;
/* 0x046E0 */ SkyboxContext skyboxCtx;
@@ -517,7 +405,7 @@ typedef struct PlayState {
/* 0x18770 */ void (*unk_18770)(struct PlayState* play, Player* player);
/* 0x18774 */ s32 (*startPlayerFishing)(struct PlayState* play);
/* 0x18778 */ s32 (*grabPlayer)(struct PlayState* play, Player* player);
- /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, s32 mode);
+ /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, PlayerCsMode csMode);
/* 0x18780 */ void (*func_18780)(Player* player, struct PlayState* play);
/* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage);
/* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor);
@@ -573,26 +461,6 @@ typedef struct PlayState {
/* 0x18E6C */ char unk_18E6C[0x3EC];
} PlayState; // size = 0x19258
-typedef struct {
- /* 0x00 */ u8 unk_00;
- /* 0x01 */ char unk_01[0x3F];
- /* 0x40 */ void* unk_40;
- /* 0x44 */ u32 unk_44;
- /* 0x48 */ u32 unk_48;
- /* 0x4C */ DmaRequest unk_4C;
- /* 0x6C */ OSMesgQueue unk_6C;
- /* 0x84 */ OSMesg unk_84[1];
- /* 0x88 */ void* unk_88;
- /* 0x8C */ uintptr_t unk_8C;
- /* 0x90 */ size_t unk_90;
- /* 0x94 */ s32 unk_94;
- /* 0x98 */ s32 unk_98;
- /* 0x9C */ s32 unk_9C;
- /* 0xA0 */ char unk_A0[0x4];
- /* 0xA4 */ s32 unk_A4;
- /* 0xA8 */ s32 unk_A8;
-} BombersNotebook; // size = 0xAC
-
typedef enum {
/* 0 */ PICTO_PHOTO_STATE_OFF,
/* 1 */ PICTO_PHOTO_STATE_SETUP,
@@ -611,7 +479,7 @@ typedef struct {
typedef struct {
/* 0x0 */ u32 type;
/* 0x4 */ u32 setScissor;
- /* 0x8 */ Color_RGBA8 color;
+ /* 0x8 */ Color_RGBA8_u32 color;
/* 0xC */ Color_RGBA8 envColor;
} struct_801F8010; // size = 0x10
@@ -631,17 +499,25 @@ typedef struct {
/* 0x14 */ Gfx* dList;
} VisMono; // size = 0x18
-typedef struct {
- /* 0x0 */ u8* value;
- /* 0x4 */ const char* name;
-} FlagSetEntry; // size = 0x8
-
// TODO: Dedicated Header?
#define FRAM_BASE_ADDRESS 0x08000000 // FRAM Base Address in Cart Memory
#define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory
#define FRAM_COMMAND_REGISTER 0x10000 // Located at 0x08010000 on the Cart
-enum fram_command {
+#define FLASH_VERSION_MX_PROTO_A 0x00C20000
+#define FLASH_VERSION_MX_A 0x00C20001
+#define FLASH_VERSION_MX_C 0x00C2001E
+#define FLASH_VERSION_MX_B_AND_D 0x00C2001D
+#define FLASH_VERSION_MEI 0x003200F1
+
+#define FLASH_TYPE_MAGIC 0x11118001
+
+#define FLASH_PAGE_SIZE 128
+
+#define FLASHROM_REQUEST_WRITE 1
+#define FLASHROM_REQUEST_READ 2
+
+typedef enum FramCommand {
/* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS
Initializes fram to 0xFF in FRAM_MODE_ERASE
Writes Contents in FLASHRAM_MODE_WRITE
@@ -665,14 +541,39 @@ enum fram_command {
FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000,
/* unk */
FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000
-};
+} FramCommand;
-enum fram_mode {
- FRAM_MODE_NOP = 0,
- FRAM_MODE_ERASE,
- FRAM_MODE_WRITE,
- FRAM_MODE_READ,
- FRAM_MODE_STATUS
-};
+typedef enum FramMode {
+ /* 0 */ FRAM_MODE_NOP,
+ /* 1 */ FRAM_MODE_ERASE,
+ /* 2 */ FRAM_MODE_WRITE,
+ /* 3 */ FRAM_MODE_READ,
+ /* 4 */ FRAM_MODE_STATUS
+} FramMode;
+
+typedef enum {
+ /* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
+ /* 1 */ VI_MODE_EDIT_STATE_ACTIVE,
+ /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
+ /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
+} ViModeEditState;
+
+typedef struct {
+ /* 0x00 */ OSViMode customViMode;
+ /* 0x50 */ s32 viHeight;
+ /* 0x54 */ s32 viWidth;
+ /* 0x58 */ s32 rightAdjust;
+ /* 0x5C */ s32 leftAdjust;
+ /* 0x60 */ s32 lowerAdjust;
+ /* 0x64 */ s32 upperAdjust;
+ /* 0x68 */ s32 editState;
+ /* 0x6C */ s32 tvType;
+ /* 0x70 */ u32 loRes;
+ /* 0x74 */ u32 antialiasOff;
+ /* 0x78 */ u32 modeN;
+ /* 0x7C */ u32 fb16Bit;
+ /* 0x80 */ u32 viFeatures;
+ /* 0x84 */ u32 unk_84;
+} ViMode; // size = 0x88
#endif
diff --git a/include/z64actor.h b/include/z64actor.h
index 3a646fe8f..e08a477e6 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -25,71 +25,17 @@ typedef void(*ActorFunc)(struct Actor* this, struct PlayState* play);
typedef u16 (*NpcGetTextIdFunc)(struct PlayState*, struct Actor*);
typedef s16 (*NpcUpdateTalkStateFunc)(struct PlayState*, struct Actor*);
-typedef struct {
+typedef struct PosRot {
/* 0x00 */ Vec3f pos;
/* 0x0C */ Vec3s rot;
} PosRot; // size = 0x14
-typedef struct {
- /* 0x00 */ u8 attack[32];
-} DamageTable; // size = 0x20
-
-typedef struct {
- /* 0x0 */ u8 health;
- /* 0x2 */ s16 cylRadius;
- /* 0x4 */ s16 cylHeight;
- /* 0x6 */ u8 mass;
-} CollisionCheckInfoInit; // size = 0x8
-
-typedef struct {
- /* 0x0 */ u8 health;
- /* 0x2 */ s16 cylRadius;
- /* 0x4 */ s16 cylHeight;
- /* 0x6 */ s16 cylYShift;
- /* 0x8 */ u8 mass;
-} CollisionCheckInfoInit2; // size = 0xC
-
-typedef struct {
- /* 0x00 */ DamageTable* damageTable;
- /* 0x04 */ Vec3f displacement;
- /* 0x10 */ s16 cylRadius;
- /* 0x12 */ s16 cylHeight;
- /* 0x14 */ s16 cylYShift;
- /* 0x16 */ u8 mass;
- /* 0x17 */ u8 health;
- /* 0x18 */ u8 damage;
- /* 0x19 */ u8 damageEffect;
- /* 0x1A */ u8 atHitEffect;
- /* 0x1B */ u8 acHitEffect;
-} CollisionCheckInfo; // size = 0x1C
-
-typedef struct {
- /* 0x00 */ s32 unk0;
- /* 0x04 */ s32 unk4;
- /* 0x08 */ f32 unk8;
- /* 0x0C */ f32 unkC;
- /* 0x10 */ f32 unk10;
- /* 0x14 */ f32 unk14;
- /* 0x18 */ f32 unk18;
- /* 0x1C */ f32 unk1C;
- /* 0x20 */ f32 unk20;
- /* 0x24 */ f32 unk24;
- /* 0x28 */ f32 unk28;
- /* 0x2C */ f32 unk2C;
- /* 0x30 */ s16 unk30;
- /* 0x32 */ s16 unk32;
- /* 0x34 */ s16 unk34;
- /* 0x36 */ s16 unk36;
- /* 0x38 */ s16 unk38;
- /* 0x3A */ s16 unk3A;
-} ActorEnTest20C; // size = 0x3C
-
typedef struct {
/* 0x0 */ s16 unk_0; // frame?
/* 0x2 */ Vec3s unk_2; // scale
} struct_80124618; // size = 0x8
-typedef struct {
+typedef struct ActorInit {
/* 0x00 */ s16 id;
/* 0x02 */ u8 type;
/* 0x04 */ u32 flags;
@@ -317,7 +263,7 @@ typedef struct EnAObj {
typedef enum {
/* 0 */ AOBJ_SIGNPOST_OBLONG,
- /* 1 */ AOBJ_SIGNPOST_ARROW,
+ /* 1 */ AOBJ_SIGNPOST_ARROW
} AObjType;
#define AOBJ_GET_TEXTID(thisx) ((((thisx)->params >> 8) & 0xFF) | 0x300)
@@ -739,6 +685,11 @@ typedef struct NpcInteractInfo {
/* 0x24 */ UNK_TYPE1 unk_24[0x4];
} NpcInteractInfo; // size = 0x28
+typedef struct BlinkInfo {
+ /* 0x0 */ s16 eyeTexIndex;
+ /* 0x2 */ s16 blinkTimer;
+} BlinkInfo; // size = 0x4
+
extern TargetRangeParams gTargetRanges[];
extern s16 D_801AED48[8];
extern Gfx D_801AEF88[];
diff --git a/include/z64animation.h b/include/z64animation.h
index 44c35312d..67c9d7641 100644
--- a/include/z64animation.h
+++ b/include/z64animation.h
@@ -14,9 +14,13 @@ struct PlayerAnimationFrame;
#define LIMB_DONE 0xFF
#define ANIM_FLAG_1 (1 << 0)
-#define ANIM_FLAG_UPDATEY (1 << 1)
+#define ANIM_FLAG_UPDATE_Y (1 << 1)
#define ANIM_FLAG_4 (1 << 2)
+#define ANIM_FLAG_8 (1 << 3)
#define ANIM_FLAG_NOMOVE (1 << 4)
+#define ANIM_FLAG_80 (1 << 7)
+#define ANIM_FLAG_100 (1 << 8)
+#define ANIM_FLAG_200 (1 << 9)
typedef enum AnimationMode {
/* 0 */ ANIMMODE_LOOP,
@@ -300,7 +304,7 @@ typedef struct SkeletonInfo {
typedef s32 (*OverrideKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList,
u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos);
-typedef void (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList,
+typedef s32 (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList,
u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos);
void SkelAnime_DrawLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor, s32 lod);
@@ -326,6 +330,7 @@ void AnimationContext_Update(struct PlayState* play, AnimationContext* animation
void SkelAnime_InitPlayer(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount);
void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime);
s32 PlayerAnimation_Update(struct PlayState* play, SkelAnime* skelAnime);
+void PlayerAnimation_AnimateFrame(struct PlayState* play, SkelAnime* skelAnime);
void Animation_SetMorph(struct PlayState* play, SkelAnime* skelAnime, f32 morphFrames);
void PlayerAnimation_Change(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
void PlayerAnimation_PlayOnce(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation);
diff --git a/include/z64animation_legacy.h b/include/z64animation_legacy.h
index 238939f74..44751f385 100644
--- a/include/z64animation_legacy.h
+++ b/include/z64animation_legacy.h
@@ -1,5 +1,5 @@
-#ifndef Z64_ANIMATION_LEGACY_H
-#define Z64_ANIMATION_LEGACY_H
+#ifndef Z64ANIMATION_LEGACY_H
+#define Z64ANIMATION_LEGACY_H
#include "ultra64.h"
#include "z64math.h"
diff --git a/include/z64audio.h b/include/z64audio.h
index a37760566..c4943c09a 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -1,7 +1,10 @@
#ifndef Z64AUDIO_H
#define Z64AUDIO_H
+#include "PR/ultratypes.h"
+#include "ultra64/os_voice.h"
#include "audiothread_cmd.h"
+#include "libc/stddef.h"
#define NO_LAYER ((SequenceLayer*)(-1))
@@ -105,7 +108,7 @@ typedef enum {
/* 1 */ SOUNDMODE_HEADSET,
/* 2 */ SOUNDMODE_SURROUND_EXTERNAL,
/* 3 */ SOUNDMODE_MONO,
- /* 4 */ SOUNDMODE_SURROUND,
+ /* 4 */ SOUNDMODE_SURROUND
} SoundMode;
typedef enum {
@@ -1279,4 +1282,6 @@ typedef u32 (*AudioCustomSeqFunction)(s8 value, SequenceChannel* channel);
typedef s32 (*AudioCustomReverbFunction)(Sample*, s32, s8, s32);
typedef Acmd* (*AudioCustomSynthFunction)(Acmd*, s32, s32);
+extern OSVoiceHandle gVoiceHandle;
+
#endif
diff --git a/include/z64bombers_notebook.h b/include/z64bombers_notebook.h
new file mode 100644
index 000000000..403f4a88a
--- /dev/null
+++ b/include/z64bombers_notebook.h
@@ -0,0 +1,58 @@
+#ifndef Z64BOMBERS_NOTEBOOK_H
+#define Z64BOMBERS_NOTEBOOK_H
+
+#include "ultra64.h"
+#include "io/controller.h"
+#include "z64dma.h"
+
+#define DEFINE_PERSON(enum, _photo, _description, _metEnum, _metMessage, _metFlag) enum,
+typedef enum BombersNotebookPerson {
+ #include "tables/bombers_notebook/person_table.h"
+ /* 0x14 */ BOMBERS_NOTEBOOK_PERSON_MAX
+} BombersNotebookPerson;
+
+#undef DEFINE_PERSON
+
+typedef enum BombersNotebookLoadState {
+ /* 0 */ BOMBERS_NOTEBOOK_LOAD_STATE_NONE,
+ /* 1 */ BOMBERS_NOTEBOOK_LOAD_STATE_STARTED,
+ /* 2 */ BOMBERS_NOTEBOOK_LOAD_STATE_DONE
+} BombersNotebookLoadState;
+
+#define DEFINE_PERSON(_enum, _photo, _description, metEnum, _metMessage, _metFlag) metEnum,
+#define DEFINE_EVENT(enum, _icon, _colorFlag, _description, _completedMessage, _completedFlag) enum,
+typedef enum BombersNotebookEvent {
+ #include "tables/bombers_notebook/person_table.h"
+ #include "tables/bombers_notebook/event_table.h"
+ /* 0x37 */ BOMBERS_NOTEBOOK_EVENT_MAX
+} BombersNotebookEvent;
+
+#undef DEFINE_PERSON
+#undef DEFINE_EVENT
+
+typedef struct {
+ /* 0x00 */ u8 loadState;
+ /* 0x01 */ UNK_TYPE1 pad01[0x3F];
+ /* 0x40 */ void* scheduleDmaSegment;
+ /* 0x44 */ uintptr_t scheduleDmaSegmentStart;
+ /* 0x48 */ size_t scheduleDmaSegmentSize;
+ /* 0x4C */ DmaRequest dmaRequest;
+ /* 0x6C */ OSMesgQueue loadQueue;
+ /* 0x84 */ OSMesg loadMsg[1];
+ /* 0x88 */ void* scheduleSegment;
+ /* 0x8C */ uintptr_t scheduleSegmentStart;
+ /* 0x90 */ size_t scheduleSegmentSize;
+ /* 0x94 */ s32 cursorPageRow;
+ /* 0x98 */ s32 cursorEntry; // Entries are 3 apart, see BOMBERS_NOTEBOOK_ENTRY_SIZE
+ /* 0x9C */ s32 cursorPage;
+ /* 0xA0 */ UNK_TYPE1 padA0[0x4];
+ /* 0xA4 */ s32 scrollAmount;
+ /* 0xA8 */ s32 scrollOffset;
+} BombersNotebook; // size = 0xAC
+
+void BombersNotebook_Draw(BombersNotebook* this, struct GraphicsContext* gfxCtx);
+void BombersNotebook_Update(struct PlayState* play, BombersNotebook* this, Input* input);
+void BombersNotebook_Init(BombersNotebook* this);
+void BombersNotebook_Destroy(BombersNotebook* this);
+
+#endif
diff --git a/include/z64camera.h b/include/z64camera.h
index 54cf748ac..ccdee8811 100644
--- a/include/z64camera.h
+++ b/include/z64camera.h
@@ -361,7 +361,7 @@ typedef enum {
/* 0x12 */ CAM_DATA_18,
/* 0x13 */ CAM_DATA_19,
/* 0x14 */ CAM_DATA_20,
- /* 0x15 */ CAM_DATA_21,
+ /* 0x15 */ CAM_DATA_21
} CameraDataType;
/*================================
diff --git a/include/z64collision_check.h b/include/z64collision_check.h
index e5032584c..403ffa546 100644
--- a/include/z64collision_check.h
+++ b/include/z64collision_check.h
@@ -6,6 +6,7 @@
#include "unk.h"
struct Actor;
+struct PlayState;
typedef struct {
/* 0x00 */ struct Actor* actor; // Attached actor
@@ -427,5 +428,250 @@ typedef enum {
#define DMG_UNK_0x1E (1 << 0x1E)
#define DMG_POWDER_KEG (1 << 0x1F)
+typedef struct DamageTable {
+ /* 0x00 */ u8 attack[32];
+} DamageTable; // size = 0x20
+
+typedef struct CollisionCheckInfoInit {
+ /* 0x0 */ u8 health;
+ /* 0x2 */ s16 cylRadius;
+ /* 0x4 */ s16 cylHeight;
+ /* 0x6 */ u8 mass;
+} CollisionCheckInfoInit; // size = 0x8
+
+typedef struct CollisionCheckInfoInit2 {
+ /* 0x0 */ u8 health;
+ /* 0x2 */ s16 cylRadius;
+ /* 0x4 */ s16 cylHeight;
+ /* 0x6 */ s16 cylYShift;
+ /* 0x8 */ u8 mass;
+} CollisionCheckInfoInit2; // size = 0xC
+
+typedef struct CollisionCheckInfo {
+ /* 0x00 */ DamageTable* damageTable;
+ /* 0x04 */ Vec3f displacement;
+ /* 0x10 */ s16 cylRadius;
+ /* 0x12 */ s16 cylHeight;
+ /* 0x14 */ s16 cylYShift;
+ /* 0x16 */ u8 mass;
+ /* 0x17 */ u8 health;
+ /* 0x18 */ u8 damage;
+ /* 0x19 */ u8 damageEffect;
+ /* 0x1A */ u8 atHitEffect;
+ /* 0x1B */ u8 acHitEffect;
+} CollisionCheckInfo; // size = 0x1C
+
+
+DamageTable* DamageTable_Get(s32 index);
+void DamageTable_Clear(DamageTable* damageTable);
+f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect);
+f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac);
+s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo);
+s32 Collider_InitBase(struct PlayState* play, Collider* collider);
+s32 Collider_DestroyBase(struct PlayState* play, Collider* collider);
+s32 Collider_SetBaseToActor(struct PlayState* play, Collider* collider, ColliderInitToActor* src);
+s32 Collider_SetBaseType1(struct PlayState* play, Collider* collider, struct Actor* actor, ColliderInitType1* src);
+s32 Collider_SetBase(struct PlayState* play, Collider* collider, struct Actor* actor, ColliderInit* src);
+void Collider_ResetATBase(struct PlayState* play, Collider* collider);
+void Collider_ResetACBase(struct PlayState* play, Collider* collider);
+void Collider_ResetOCBase(struct PlayState* play, Collider* collider);
+s32 Collider_InitTouch(struct PlayState* play, ColliderTouch* touch);
+s32 Collider_DestroyTouch(struct PlayState* play, ColliderTouch* touch);
+s32 Collider_SetTouch(struct PlayState* play, ColliderTouch* touch, ColliderTouchInit* src);
+void Collider_ResetATInfoUnk(struct PlayState* play, ColliderInfo* info);
+s32 Collider_InitBump(struct PlayState* play, ColliderBump* bump);
+s32 Collider_DestroyBump(struct PlayState* play, ColliderBump* bump);
+s32 Collider_SetBump(struct PlayState* play, ColliderBump* bump, ColliderBumpInit* src);
+s32 Collider_InitInfo(struct PlayState* play, ColliderInfo* info);
+s32 Collider_DestroyInfo(struct PlayState* play, ColliderInfo* info);
+s32 Collider_SetInfo(struct PlayState* play, ColliderInfo* info, ColliderInfoInit* src);
+void Collider_ResetATInfo(struct PlayState* play, ColliderInfo* info);
+void Collider_ResetACInfo(struct PlayState* play, ColliderInfo* info);
+void Collider_ResetOCInfo(struct PlayState* play, ColliderInfo* info);
+s32 Collider_InitJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dim);
+s32 Collider_DestroyJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dim);
+s32 Collider_SetJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dest, ColliderJntSphElementDimInit* src);
+s32 Collider_InitJntSphElement(struct PlayState* play, ColliderJntSphElement* element);
+s32 Collider_DestroyJntSphElement(struct PlayState* play, ColliderJntSphElement* element);
+s32 Collider_SetJntSphElement(struct PlayState* play, ColliderJntSphElement* dest, ColliderJntSphElementInit* src);
+s32 Collider_ResetJntSphElementAT(struct PlayState* play, ColliderJntSphElement* collider);
+s32 Collider_ResetJntSphElementAC(struct PlayState* play, ColliderJntSphElement* collider);
+s32 Collider_ResetJntSphElementOC(struct PlayState* play, ColliderJntSphElement* collider);
+s32 Collider_InitJntSph(struct PlayState* play, ColliderJntSph* collider);
+s32 Collider_FreeJntSph(struct PlayState* play, ColliderJntSph* collider);
+s32 Collider_DestroyJntSph(struct PlayState* play, ColliderJntSph* collider);
+s32 Collider_SetJntSphToActor(struct PlayState* play, ColliderJntSph* collider, ColliderJntSphInitToActor* src);
+s32 Collider_SetJntSphAllocType1(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInitType1* src);
+s32 Collider_SetJntSph(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
+s32 Collider_InitAndSetJntSph(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
+s32 Collider_ResetJntSphAT(struct PlayState* play, Collider* collider);
+s32 Collider_ResetJntSphAC(struct PlayState* play, Collider* collider);
+s32 Collider_ResetJntSphOC(struct PlayState* play, Collider* collider);
+s32 Collider_InitCylinderDim(struct PlayState* play, Cylinder16* dim);
+s32 Collider_DestroyCylinderDim(struct PlayState* play, Cylinder16* dim);
+s32 Collider_SetCylinderDim(struct PlayState* play, Cylinder16* dim, Cylinder16* src);
+s32 Collider_InitCylinder(struct PlayState* play, ColliderCylinder* collider);
+s32 Collider_DestroyCylinder(struct PlayState* play, ColliderCylinder* collider);
+s32 Collider_SetCylinderToActor(struct PlayState* play, ColliderCylinder* collider, ColliderCylinderInitToActor* src);
+s32 Collider_SetCylinderType1(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInitType1* src);
+s32 Collider_SetCylinder(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInit* src);
+s32 Collider_InitAndSetCylinder(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInit* src);
+s32 Collider_ResetCylinderAT(struct PlayState* play, Collider* collider);
+s32 Collider_ResetCylinderAC(struct PlayState* play, Collider* collider);
+s32 Collider_ResetCylinderOC(struct PlayState* play, Collider* collider);
+s32 Collider_InitTrisElementDim(struct PlayState* play, TriNorm* dim);
+s32 Collider_DestroyTrisElementDim(struct PlayState* play, TriNorm* dim);
+s32 Collider_SetTrisElementDim(struct PlayState* play, TriNorm* dim, ColliderTrisElementDimInit* src);
+s32 Collider_InitTrisElement(struct PlayState* play, ColliderTrisElement* element);
+s32 Collider_DestroyTrisElement(struct PlayState* play, ColliderTrisElement* element);
+s32 Collider_SetTrisElement(struct PlayState* play, ColliderTrisElement* element, ColliderTrisElementInit* src);
+s32 Collider_ResetTrisElementAT(struct PlayState* play, ColliderTrisElement* element);
+s32 Collider_ResetTrisElementAC(struct PlayState* play, ColliderTrisElement* element);
+s32 Collider_ResetTrisElementOC(struct PlayState* play, ColliderTrisElement* element);
+s32 Collider_InitTris(struct PlayState* play, ColliderTris* tris);
+s32 Collider_FreeTris(struct PlayState* play, ColliderTris* tris);
+s32 Collider_DestroyTris(struct PlayState* play, ColliderTris* tris);
+s32 Collider_SetTrisAllocType1(struct PlayState* play, ColliderTris* tris, struct Actor* actor, ColliderTrisInitType1* src);
+s32 Collider_SetTris(struct PlayState* play, ColliderTris* triGroup, struct Actor* actor, ColliderTrisInit* src, ColliderTrisElement* tris);
+s32 Collider_InitAndSetTris(struct PlayState* play, ColliderTris* tris, struct Actor* actor, ColliderTrisInit* src, ColliderTrisElement* elements);
+s32 Collider_ResetTrisAT(struct PlayState* play, Collider* collider);
+s32 Collider_ResetTrisAC(struct PlayState* play, Collider* collider);
+s32 Collider_ResetTrisOC(struct PlayState* play, Collider* collider);
+s32 Collider_InitQuadDim(struct PlayState* play, ColliderQuadDim* dim);
+s32 Collider_DestroyQuadDim(struct PlayState* play, ColliderQuadDim* dim);
+s32 Collider_ResetQuadACDist(struct PlayState* play, ColliderQuadDim* dim);
+void Collider_SetQuadMidpoints(ColliderQuadDim* dim);
+s32 Collider_SetQuadDim(struct PlayState* play, ColliderQuadDim* dim, ColliderQuadDimInit* init);
+s32 Collider_InitQuad(struct PlayState* play, ColliderQuad* collider);
+s32 Collider_DestroyQuad(struct PlayState* play, ColliderQuad* collider);
+s32 Collider_SetQuadType1(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInitType1* src);
+s32 Collider_SetQuad(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInit* src);
+s32 Collider_InitAndSetQuad(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInit* src);
+s32 Collider_ResetQuadAT(struct PlayState* play, Collider* collider);
+s32 Collider_ResetQuadAC(struct PlayState* play, Collider* collider);
+s32 Collider_ResetQuadOC(struct PlayState* play, Collider* collider);
+s32 Collider_QuadSetNearestAC(struct PlayState* play, ColliderQuad* quad, Vec3f* hitPos);
+s32 Collider_InitSphere(struct PlayState* play, ColliderSphere* collider);
+s32 Collider_DestroySphere(struct PlayState* play, ColliderSphere* collider);
+s32 Collider_SetSphere(struct PlayState* play, ColliderSphere* collider, struct Actor* actor, ColliderSphereInit* src);
+s32 Collider_InitAndSetSphere(struct PlayState* play, ColliderSphere* collider, struct Actor* actor, ColliderSphereInit* src);
+s32 Collider_ResetSphereAT(struct PlayState* play, Collider* collider);
+s32 Collider_ResetSphereAC(struct PlayState* play, Collider* collider);
+s32 Collider_ResetSphereOC(struct PlayState* play, Collider* collider);
+s32 Collider_InitLine(struct PlayState* play, OcLine* line);
+s32 Collider_DestroyLine(struct PlayState* play, OcLine* line);
+s32 Collider_SetLinePoints(struct PlayState* play, OcLine* line, Vec3f* a, Vec3f* b);
+s32 Collider_SetLine(struct PlayState* play, OcLine* line, OcLine* src);
+s32 Collider_ResetLineOC(struct PlayState* play, OcLine* line);
+void CollisionCheck_InitContext(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_DestroyContext(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_ClearContext(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_EnableSAC(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_DisableSAC(struct PlayState* play, CollisionCheckContext* colCtxt);
+s32 CollisionCheck_SetAT(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+s32 CollisionCheck_SetAT_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
+s32 CollisionCheck_SetAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+s32 CollisionCheck_SetAC_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
+s32 CollisionCheck_SetOC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+s32 CollisionCheck_SetOC_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
+s32 CollisionCheck_SetOCLine(struct PlayState* play, CollisionCheckContext* colCtxt, OcLine* line);
+s32 CollisionCheck_SkipTouch(ColliderInfo* info);
+s32 CollisionCheck_SkipBump(ColliderInfo* info);
+s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper);
+void CollisionCheck_NoBlood(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_BlueBlood(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_GreenBlood(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_WaterBurst(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_RedBlood(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_RedBloodUnused(struct PlayState* play, Collider* collider, Vec3f* v);
+void CollisionCheck_HitSolid(struct PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos);
+s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo);
+void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, Vec3f* hitPos);
+void CollisionCheck_SetBounce(Collider* at, Collider* ac);
+s32 CollisionCheck_SetATvsAC(struct PlayState* play, Collider* at, ColliderInfo* atInfo, Vec3f* atPos, Collider* ac, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos);
+void CollisionCheck_TrisAvgPoint(ColliderTrisElement* tri, Vec3f* avg);
+void CollisionCheck_QuadAvgPoint(ColliderQuad* quad, Vec3f* avg);
+void CollisionCheck_AC_JntSphVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_JntSphVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_JntSphVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_JntSphVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_JntSphVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_CylVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_CylVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_CylVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_CylVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_CylVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_TrisVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_TrisVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_TrisVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_TrisVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_TrisVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_QuadVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_QuadVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_QuadVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_QuadVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_QuadVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_SphereVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_SphereVsCylinder(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_SphereVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_SphereVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_AC_SphereVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
+void CollisionCheck_SetJntSphHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_SetCylHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_SetTrisHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_SetQuadHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_SetSphereHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_SetHitEffects(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_AC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT);
+void CollisionCheck_AT(struct PlayState* play, CollisionCheckContext* colCtxt);
+s32 CollisionCheck_GetMassType(u8 mass);
+void CollisionCheck_SetOCvsOC(struct PlayState* play, Collider* left, ColliderInfo* leftInfo, Vec3f* leftPos, Collider* right, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlap);
+void CollisionCheck_OC_JntSphVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_JntSphVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_JntSphVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_CylVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_CylVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_CylVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_SphereVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_SphereVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+void CollisionCheck_OC_SphereVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
+s32 CollisionCheck_SkipOC(Collider* collider);
+s32 CollisionCheck_Incompatible(Collider* left, Collider* right);
+void CollisionCheck_OC(struct PlayState* play, CollisionCheckContext* colCtxt);
+void CollisionCheck_InitInfo(CollisionCheckInfo* info);
+void CollisionCheck_ResetDamage(CollisionCheckInfo* info);
+void CollisionCheck_SetInfoNoDamageTable(CollisionCheckInfo* info, CollisionCheckInfoInit* init);
+void CollisionCheck_SetInfo(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit* init);
+void CollisionCheck_SetInfo2(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit2* init);
+void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, CollisionCheckInfoInit2* init);
+void CollisionCheck_ApplyDamage(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, ColliderInfo* info);
+void CollisionCheck_ApplyDamageJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_ApplyDamageCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_ApplyDamageTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_ApplyDamageQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_ApplyDamageSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider);
+void CollisionCheck_Damage(struct PlayState* play, CollisionCheckContext* colCtxt);
+s32 CollisionCheck_LineOC_JntSph(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
+s32 CollisionCheck_LineOC_Cyl(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
+s32 CollisionCheck_LineOC_Sphere(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
+s32 CollisionCheck_LineOC(struct PlayState* play, CollisionCheckContext* colChkCtx, Vec3f* a, Vec3f* b, struct Actor** exclusions, s32 numExclusions);
+s32 CollisionCheck_LineOCCheckAll(struct PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b);
+s32 CollisionCheck_LineOCCheck(struct PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b, struct Actor** exclusions, s32 numExclusions);
+void Collider_UpdateCylinder(struct Actor* actor, ColliderCylinder* collider);
+void Collider_SetCylinderPosition(ColliderCylinder* collider, Vec3s* pos);
+void Collider_SetQuadVertices(ColliderQuad* collider, Vec3f* a, Vec3f* b, Vec3f* c, Vec3f* d);
+void Collider_SetTrisVertices(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f* c);
+void Collider_SetTrisDim(struct PlayState* play, ColliderTris* collider, s32 index, ColliderTrisElementDimInit* init);
+void Collider_UpdateSpheres(s32 limb, ColliderJntSph* collider);
+void Collider_UpdateSpheresElement(ColliderJntSph* collider, s32 index, struct Actor* actor);
+void Collider_UpdateSphere(s32 limb, ColliderSphere* collider);
+void CollisionCheck_SpawnRedBlood(struct PlayState* play, Vec3f* v);
+void CollisionCheck_SpawnWaterDroplets(struct PlayState* play, Vec3f* v);
+void CollisionCheck_SpawnShieldParticles(struct PlayState* play, Vec3f* v);
+void CollisionCheck_SpawnShieldParticlesMetal(struct PlayState* play, Vec3f* v);
+void CollisionCheck_SpawnShieldParticlesMetalSound(struct PlayState* play, Vec3f* v, Vec3f* pos);
+void CollisionCheck_SpawnShieldParticlesMetal2(struct PlayState* play, Vec3f* v);
+void CollisionCheck_SpawnShieldParticlesWood(struct PlayState* play, Vec3f* v, Vec3f* pos);
+s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* actorPos, Vec3f* itemPos, Vec3f* itemProjPos, Vec3f* out1, Vec3f* out2);
#endif
diff --git a/include/z64cutscene.h b/include/z64cutscene.h
index 1fc32be28..83e9994f1 100644
--- a/include/z64cutscene.h
+++ b/include/z64cutscene.h
@@ -430,7 +430,7 @@ typedef enum {
/* 0x1F6 */ CS_CMD_ACTOR_CUE_502,
/* 0x1F7 */ CS_CMD_ACTOR_CUE_503,
/* 0x1F8 */ CS_CMD_ACTOR_CUE_504,
- /* 0x1F9 */ CS_CMD_ACTOR_CUE_505,
+ /* 0x1F9 */ CS_CMD_ACTOR_CUE_SOTCS, // Song of Time Cutscenes (Double SoT, Three-Day Reset SoT)
/* 0x1FA */ CS_CMD_ACTOR_CUE_506,
/* 0x1FB */ CS_CMD_ACTOR_CUE_507,
/* 0x1FC */ CS_CMD_ACTOR_CUE_508,
@@ -580,17 +580,6 @@ typedef union CutsceneData {
s8 b[4];
} CutsceneData;
-#define BIT_FLAG_TO_SHIFT(flag) \
- ((flag & 0x80) ? 7 : \
- (flag & 0x40) ? 6 : \
- (flag & 0x20) ? 5 : \
- (flag & 0x10) ? 4 : \
- (flag & 0x8) ? 3 : \
- (flag & 0x4) ? 2 : \
- (flag & 0x2) ? 1 : \
- (flag & 0x1) ? 0 : \
- 0)
-
// Do not trigger the scripted cutscene upon any spawn
#define CS_SPAWN_FLAG_NONE 0xFF
// Always trigger the scripted cutscene upon the specified spawn
diff --git a/include/z64door.h b/include/z64door.h
new file mode 100644
index 000000000..26653c308
--- /dev/null
+++ b/include/z64door.h
@@ -0,0 +1,24 @@
+#ifndef Z64_DOOR_H
+#define Z64_DOOR_H
+
+#include "ultra64.h"
+#include "z64actor.h"
+
+typedef struct KnobDoorActor {
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ SkelAnime skelAnime;
+ /* 0x1A0 */ u8 animIndex;
+ /* 0x1A1 */ u8 playOpenAnim;
+ /* 0x1A2 */ s8 requiredObjBankIndex;
+ /* 0x1A3 */ s8 dlIndex;
+} KnobDoorActor; // size = 0x1A4
+
+typedef struct SlidingDoorActor {
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ s16 unk_15C;
+ /* 0x15E */ s16 unk_15E;
+} SlidingDoorActor; // size = 0x160
+
+#define DOOR_GET_TRANSITION_ID(thisx) ((u16)(thisx)->params >> 10)
+
+#endif
diff --git a/include/z64effect.h b/include/z64effect.h
index d6ab8b3b5..71ad80510 100644
--- a/include/z64effect.h
+++ b/include/z64effect.h
@@ -118,10 +118,10 @@ typedef struct {
/* 0x188 */ u16 flags;
/* 0x18A */ s16 addAngleChange;
/* 0x18C */ s16 addAngle;
- /* 0x18E */ Color_RGBA8 p1StartColor;
- /* 0x192 */ Color_RGBA8 p2StartColor;
- /* 0x196 */ Color_RGBA8 p1EndColor;
- /* 0x19A */ Color_RGBA8 p2EndColor;
+ /* 0x18E */ u8 p1StartColor[4];
+ /* 0x192 */ u8 p2StartColor[4];
+ /* 0x196 */ u8 p1EndColor[4];
+ /* 0x19A */ u8 p2EndColor[4];
/* 0x19E */ u8 numElements; // "now_edge_num"
/* 0x19F */ u8 elemDuration;
/* 0x1A0 */ u8 unkFlag;
diff --git a/include/z64game.h b/include/z64game.h
new file mode 100644
index 000000000..87dc80764
--- /dev/null
+++ b/include/z64game.h
@@ -0,0 +1,104 @@
+#ifndef Z64GAME_H
+#define Z64GAME_H
+
+#include "ultra64.h"
+#include "libc/stdbool.h"
+#include "libc/stdint.h"
+#include "io/controller.h"
+#include "tha.h"
+#include "padmgr.h"
+
+struct GraphicsContext;
+struct GameState;
+
+
+typedef void (*GameStateFunc)(struct GameState* gameState);
+
+typedef struct {
+ /* 0x00 */ void* loadedRamAddr;
+ /* 0x04 */ uintptr_t vromStart; // if applicable
+ /* 0x08 */ uintptr_t vromEnd; // if applicable
+ /* 0x0C */ void* vramStart; // if applicable
+ /* 0x10 */ void* vramEnd; // if applicable
+ /* 0x14 */ UNK_PTR unk_14;
+ /* 0x18 */ GameStateFunc init; // initializes and executes the given context
+ /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load
+ /* 0x20 */ UNK_PTR unk_20;
+ /* 0x24 */ UNK_PTR unk_24;
+ /* 0x28 */ UNK_TYPE unk_28;
+ /* 0x2C */ size_t instanceSize;
+} GameStateOverlay; // size = 0x30
+
+typedef struct GameAllocEntry {
+ /* 0x0 */ struct GameAllocEntry* next;
+ /* 0x4 */ struct GameAllocEntry* prev;
+ /* 0x8 */ size_t size;
+ /* 0xC */ u32 unk_0C;
+} GameAllocEntry; // size = 0x10
+
+typedef struct GameAlloc {
+ /* 0x00 */ GameAllocEntry base;
+ /* 0x10 */ GameAllocEntry* head;
+} GameAlloc; // size = 0x14
+
+typedef struct GameState {
+ /* 0x00 */ struct GraphicsContext* gfxCtx;
+ /* 0x04 */ GameStateFunc main;
+ /* 0x08 */ GameStateFunc destroy;
+ /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load.
+ /* 0x10 */ size_t size;
+ /* 0x14 */ Input input[MAXCONTROLLERS];
+ /* 0x74 */ TwoHeadArena heap;
+ /* 0x84 */ GameAlloc alloc;
+ /* 0x98 */ UNK_TYPE1 pad98[0x3];
+ /* 0x9B */ u8 running; // If 0, switch to next game state
+ /* 0x9C */ u32 frames;
+ /* 0xA0 */ u8 padA0[0x2];
+ /* 0xA2 */ u8 framerateDivisor;
+ /* 0xA3 */ u8 unk_A3;
+} GameState; // size = 0xA4
+
+
+void Game_UpdateFramerateVariables(s32 divisor);
+void Game_SetFramerateDivisor(GameState* gameState, s32 divisor);
+void GameState_SetFBFilter(Gfx** gfx, void* zbuffer);
+void Game_Nop80173534(GameState* gameState);
+void GameState_Draw(GameState* gameState, struct GraphicsContext* gfxCtx);
+void GameState_SetFrameBuffer(struct GraphicsContext* gfxCtx);
+void func_801736DC(struct GraphicsContext* gfxCtx);
+void Game_UpdateInput(GameState* gameState);
+void Game_Update(GameState* gameState);
+void Game_IncrementFrameCount(GameState* gameState);
+void GameState_InitArena(GameState* gameState, size_t size);
+void GameState_Realloc(GameState* gameState, size_t size);
+void GameState_Init(GameState* gameState, GameStateFunc init, struct GraphicsContext* gfxCtx);
+void GameState_Destroy(GameState* gameState);
+GameStateFunc GameState_GetInit(GameState* gameState);
+size_t GameState_GetSize(GameState* gameState);
+u32 GameState_IsRunning(GameState* gameState);
+s32 GameState_GetArenaSize(GameState* gameState);
+s32 func_80173B48(GameState* gameState);
+
+extern s32 gFramerateDivisor;
+extern f32 gFramerateDivisorF;
+extern f32 gFramerateDivisorHalf;
+extern f32 gFramerateDivisorThird;
+
+
+#define STOP_GAMESTATE(curState) \
+ do { \
+ GameState* state = curState; \
+ \
+ state->running = false; \
+ } while(0)
+
+#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \
+ do { \
+ GameState* state = curState; \
+ \
+ (state)->init = nextInit; \
+ (state)->size = nextSize; \
+ } while (0)
+
+
+#endif
diff --git a/include/z64horse.h b/include/z64horse.h
new file mode 100644
index 000000000..bae439868
--- /dev/null
+++ b/include/z64horse.h
@@ -0,0 +1,21 @@
+#ifndef Z64_HORSE_H
+#define Z64_HORSE_H
+
+#include "ultra64.h"
+#include "z64.h"
+
+
+s32 Horse_GetJumpingFencePathIndex(PlayState* play);
+s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4);
+s32 Horse_IsValidSpawn(s16 sceneId);
+void Horse_ResetHorseData(PlayState* play);
+void Horse_Spawn(PlayState* play, Player* player);
+void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw);
+s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx);
+
+
+extern s32 gHorseIsMounted;
+extern s32 D_801BDAA0;
+extern s32 gHorsePlayedEponasSong;
+
+#endif
diff --git a/include/z64interface.h b/include/z64interface.h
index e01baa425..c83630cbf 100644
--- a/include/z64interface.h
+++ b/include/z64interface.h
@@ -4,6 +4,15 @@
#include "ultra64.h"
#include "z64view.h"
+typedef enum {
+ /* -1 */ EQUIP_SLOT_NONE = -1,
+ /* 0 */ EQUIP_SLOT_B,
+ /* 1 */ EQUIP_SLOT_C_LEFT,
+ /* 2 */ EQUIP_SLOT_C_DOWN,
+ /* 3 */ EQUIP_SLOT_C_RIGHT,
+ /* 4 */ EQUIP_SLOT_A
+} EquipSlot;
+
typedef enum {
/* 0 */ A_BTN_STATE_0,
/* 1 */ A_BTN_STATE_1,
@@ -213,4 +222,49 @@ typedef struct {
/* 0x344 */ size_t storySize;
} InterfaceContext; // size = 0x348
+Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
+Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
+Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
+Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point);
+Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point);
+
+void Interface_StartTimer(s16 timerId, s16 seconds);
+void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState);
+void Interface_NewDay(struct PlayState* play, s32 day);
+void Interface_SetHudVisibility(u16 hudVisibility);
+void Interface_UpdateButtonsPart2(struct PlayState* play);
+void Interface_SetSceneRestrictions(struct PlayState* play);
+void Interface_InitMinigame(struct PlayState* play);
+void Interface_LoadItemIconImpl(struct PlayState* play, u8 btn);
+void Interface_LoadItemIcon(struct PlayState* play, u8 btn);
+void Interface_UpdateButtonsAlt(struct PlayState* play, u16 flag);
+u8 Item_Give(struct PlayState* play, u8 item);
+u8 Item_CheckObtainability(u8 item);
+void Inventory_DeleteItem(s16 item, s16 slot);
+void Inventory_UnequipItem(s16 item);
+s32 Inventory_ReplaceItem(struct PlayState* play, u8 oldItem, u8 newItem);
+void Inventory_UpdateDeitySwordEquip(struct PlayState* play);
+s32 Inventory_HasEmptyBottle(void);
+s32 Inventory_HasItemInBottle(u8 item);
+void Inventory_UpdateBottleItem(struct PlayState* play, u8 item, u8 btn);
+s32 Inventory_ConsumeFairy(struct PlayState* play);
+void Inventory_UpdateItem(struct PlayState* play, s16 slot, s16 item);
+void func_8011552C(struct PlayState* play, u16 arg1);
+void func_801155B4(struct PlayState* play, s16 arg1);
+void func_80115764(struct PlayState* play, UNK_TYPE arg1);
+void func_80115844(struct PlayState* play, s16 doAction);
+s32 Health_ChangeBy(struct PlayState* play, s16 healthChange);
+void Health_GiveHearts(s16 hearts);
+void Rupees_ChangeBy(s16 rupeeChange);
+void Inventory_ChangeAmmo(s16 item, s16 ammoChange);
+void Magic_Add(struct PlayState* play, s16 magicToAdd);
+void Magic_Reset(struct PlayState* play);
+s32 Magic_Consume(struct PlayState* play, s16 magicToConsume, s16 type);
+void Interface_SetPerfectLetters(struct PlayState* play, s16 perfectLettersType);
+void Interface_StartMoonCrash(struct PlayState* play);
+void Interface_Draw(struct PlayState* play);
+void Interface_Update(struct PlayState* play);
+void Interface_Destroy(struct PlayState* play);
+void Interface_Init(struct PlayState* play);
+
#endif
diff --git a/include/z64item.h b/include/z64item.h
index d1d36ebba..55cbb337f 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -19,7 +19,7 @@ typedef enum {
/* 2 */ EQUIP_VALUE_SWORD_RAZOR,
/* 3 */ EQUIP_VALUE_SWORD_GILDED,
/* 4 */ EQUIP_VALUE_SWORD_DIETY,
- /* 5 */ EQUIP_VALUE_SWORD_MAX,
+ /* 5 */ EQUIP_VALUE_SWORD_MAX
} EquipValueSword;
typedef enum {
@@ -332,12 +332,16 @@ typedef enum GetItemId {
/* 0x08 */ GI_WALLET_ADULT,
/* 0x09 */ GI_WALLET_GIANT,
/* 0x0A */ GI_RECOVERY_HEART,
- /* 0x0C */ GI_HEART_PIECE = 0x0C,
+ /* 0x0B */ GI_0B,
+ /* 0x0C */ GI_HEART_PIECE,
/* 0x0D */ GI_HEART_CONTAINER,
/* 0x0E */ GI_MAGIC_SMALL,
/* 0x0F */ GI_MAGIC_LARGE,
- /* 0x11 */ GI_STRAY_FAIRY = 0x11,
- /* 0x14 */ GI_BOMBS_1 = 0x14,
+ /* 0x10 */ GI_10,
+ /* 0x11 */ GI_STRAY_FAIRY,
+ /* 0x12 */ GI_12,
+ /* 0x13 */ GI_13,
+ /* 0x14 */ GI_BOMBS_1,
/* 0x15 */ GI_BOMBS_5,
/* 0x16 */ GI_BOMBS_10,
/* 0x17 */ GI_BOMBS_20,
@@ -360,8 +364,14 @@ typedef enum GetItemId {
/* 0x28 */ GI_NUTS_1,
/* 0x29 */ GI_NUTS_5,
/* 0x2A */ GI_NUTS_10,
- /* 0x2E */ GI_BOMBCHUS_20 = 0x2E,
- /* 0x32 */ GI_SHIELD_HERO = 0x32,
+ /* 0x2B */ GI_2B,
+ /* 0x2C */ GI_2C,
+ /* 0x2D */ GI_2D,
+ /* 0x2E */ GI_BOMBCHUS_20,
+ /* 0x2F */ GI_2F,
+ /* 0x30 */ GI_30,
+ /* 0x31 */ GI_31,
+ /* 0x32 */ GI_SHIELD_HERO,
/* 0x33 */ GI_SHIELD_MIRROR,
/* 0x34 */ GI_POWDER_KEG,
/* 0x35 */ GI_MAGIC_BEANS,
@@ -379,10 +389,24 @@ typedef enum GetItemId {
/* 0x41 */ GI_HOOKSHOT,
/* 0x42 */ GI_LENS,
/* 0x43 */ GI_PICTO_BOX,
- /* 0x4C */ GI_OCARINA = 0x4C,
- /* 0x50 */ GI_BOMBERS_NOTEBOOK = 0x50,
- /* 0x52 */ GI_SKULL_TOKEN = 0x52,
- /* 0x55 */ GI_REMAINS_ODOLWA = 0x55,
+ /* 0x44 */ GI_44,
+ /* 0x45 */ GI_45,
+ /* 0x46 */ GI_46,
+ /* 0x47 */ GI_47,
+ /* 0x48 */ GI_48,
+ /* 0x49 */ GI_49,
+ /* 0x4A */ GI_4A,
+ /* 0x4B */ GI_4B,
+ /* 0x4C */ GI_OCARINA,
+ /* 0x4D */ GI_4D,
+ /* 0x4E */ GI_4E,
+ /* 0x4F */ GI_4F,
+ /* 0x50 */ GI_BOMBERS_NOTEBOOK,
+ /* 0x51 */ GI_51,
+ /* 0x52 */ GI_SKULL_TOKEN,
+ /* 0x53 */ GI_53,
+ /* 0x54 */ GI_54,
+ /* 0x55 */ GI_REMAINS_ODOLWA,
/* 0x56 */ GI_REMAINS_GOHT,
/* 0x57 */ GI_REMAINS_GYORG,
/* 0x58 */ GI_REMAINS_TWINMOLD,
@@ -410,9 +434,14 @@ typedef enum GetItemId {
/* 0x6E */ GI_SEAHORSE,
/* 0x6F */ GI_CHATEAU_BOTTLE,
/* 0x70 */ GI_HYLIAN_LOACH,
- /* 0x75 */ GI_75 = 0x75,
+ /* 0x71 */ GI_71,
+ /* 0x72 */ GI_72,
+ /* 0x73 */ GI_73,
+ /* 0x74 */ GI_74,
+ /* 0x75 */ GI_75,
/* 0x76 */ GI_ICE_TRAP,
- /* 0x78 */ GI_MASK_DEKU = 0x78,
+ /* 0x77 */ GI_77,
+ /* 0x78 */ GI_MASK_DEKU,
/* 0x79 */ GI_MASK_GORON,
/* 0x7A */ GI_MASK_ZORA,
/* 0x7B */ GI_MASK_FIERCE_DEITY,
@@ -436,7 +465,8 @@ typedef enum GetItemId {
/* 0x8D */ GI_MASK_BLAST,
/* 0x8E */ GI_MASK_SCENTS,
/* 0x8F */ GI_MASK_KAFEIS_MASK,
- /* 0x91 */ GI_CHATEAU = 0x91,
+ /* 0x90 */ GI_90,
+ /* 0x91 */ GI_CHATEAU,
/* 0x92 */ GI_MILK,
/* 0x93 */ GI_GOLD_DUST_2,
/* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel
@@ -463,7 +493,15 @@ typedef enum GetItemId {
/* 0xA9 */ GI_BOTTLE_STOLEN, // buy back stolen bottle
/* 0xAA */ GI_LETTER_TO_KAFEI,
/* 0xAB */ GI_PENDANT_OF_MEMORIES,
- /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4,
+ /* 0xAC */ GI_AC,
+ /* 0xAD */ GI_AD,
+ /* 0xAE */ GI_AE,
+ /* 0xAF */ GI_AF,
+ /* 0xB0 */ GI_B0,
+ /* 0xB1 */ GI_B1,
+ /* 0xB2 */ GI_B2,
+ /* 0xB3 */ GI_B3,
+ /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN,
/* 0xB5 */ GI_TINGLE_MAP_WOODFALL,
/* 0xB6 */ GI_TINGLE_MAP_SNOWHEAD,
/* 0xB7 */ GI_TINGLE_MAP_ROMANI_RANCH,
diff --git a/include/z64math.h b/include/z64math.h
index 8df81454a..a86cf9a20 100644
--- a/include/z64math.h
+++ b/include/z64math.h
@@ -105,13 +105,13 @@ typedef VecSphGeo VecGeo;
typedef enum {
/* 0 */ OLIB_ADD_COPY, // Copy `b` to dest
/* 1 */ OLIB_ADD_OFFSET, // Add `a` and `b` to dest, and also add the yaw of `a` to the dest
- /* 2 */ OLIB_ADD, // Add `a` and `b` to dest
+ /* 2 */ OLIB_ADD // Add `a` and `b` to dest
} OlibVec3fAdd;
typedef enum {
/* 0 */ OLIB_DIFF_COPY, // Copy `b` to dest
/* 1 */ OLIB_DIFF_OFFSET, // Sub `a` and `b` to dest, and also subs the yaw of `a` to the dest
- /* 2 */ OLIB_DIFF, // Sub `a` and `b` to dest
+ /* 2 */ OLIB_DIFF // Sub `a` and `b` to dest
} OlibVec3fDiff;
#define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t)))
@@ -168,4 +168,75 @@ typedef enum {
#define SQXYZ(vec) ((vec.x) * (vec.x) + (vec.y) * (vec.y) + (vec.z) * (vec.z))
#define DOTXYZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.y) * (vec2.y) + (vec1.z) * (vec2.z))
+f32 Math_CosS(s16 angle);
+f32 Math_SinS(s16 angle);
+s32 Math_StepToIImpl(s32 start, s32 target, s32 step);
+void Math_StepToIGet(s32* pValue, s32 target, s32 step);
+s32 Math_StepToI(s32* pValue, s32 target, s32 step);
+s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step);
+s32 Math_StepToS(s16* pValue, s16 target, s16 step);
+s32 Math_StepToC(s8* pValue, s8 target, s8 step);
+s32 Math_StepToF(f32* pValue, f32 target, f32 step);
+s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step);
+s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step);
+s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep);
+s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step);
+s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep);
+s16 Rand_S16Offset(s16 base, s16 range);
+s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range);
+void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src);
+void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src);
+void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src);
+void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src);
+void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest);
+void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest);
+void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r);
+void Math_Vec3f_Scale(Vec3f* vec, f32 scale);
+void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest);
+void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest);
+void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest);
+void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest);
+void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest);
+f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
+f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
+f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b);
+f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz);
+f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed);
+f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b);
+s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b);
+s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b);
+f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep);
+void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep);
+void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep);
+s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
+void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep);
+f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed);
+
+f32 Math_FactorialF(f32 n);
+f32 Math_Factorial(s32 n);
+f32 Math_PowF(f32 base, s32 exp);
+f32 Math_SinF(f32 rad);
+f32 Math_CosF(f32 rad);
+f32 Rand_ZeroFloat(f32 scale);
+f32 Rand_CenteredFloat(f32 scale);
+
+f32 Math_FTanF(f32 x);
+f32 Math_FFloorF(f32 x);
+f32 Math_FCeilF(f32 x);
+f32 Math_FRoundF(f32 x);
+f32 Math_FTruncF(f32 x);
+f32 Math_FNearbyIntF(f32 x);
+f32 Math_FAtanTaylorQF(f32 x);
+f32 Math_FAtanTaylorF(f32 x);
+f32 Math_FAtanContFracF(f32 x);
+f32 Math_FAtanF(f32 x);
+f32 Math_FAtan2F(f32 y, f32 x);
+f32 Math_FAsinF(f32 x);
+f32 Math_FAcosF(f32 x);
+
+s16 Math_Atan2S(f32 y, f32 x);
+f32 Math_Atan2F(f32 y, f32 x);
+s16 Math_Atan2S_XY(f32 x, f32 y);
+f32 Math_Atan2F_XY(f32 x, f32 y);
+
#endif
diff --git a/include/z64message.h b/include/z64message.h
index 2b0387045..09c9c4e04 100644
--- a/include/z64message.h
+++ b/include/z64message.h
@@ -9,6 +9,9 @@ struct Actor;
struct MessageTableEntry;
struct OcarinaStaff;
+extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX];
+extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX];
+
typedef enum TextState {
/* 0 */ TEXT_STATE_NONE,
/* 1 */ TEXT_STATE_1,
@@ -159,8 +162,8 @@ typedef struct MessageContext {
/* 0x120A0 */ s32 unk120A0;
/* 0x120A4 */ s16 unk120A4[6];
/* 0x120B0 */ u8 unk120B0;
- /* 0x120B1 */ u8 unk120B1;
- /* 0x120B2 */ u8 unk120B2[0xA];
+ /* 0x120B1 */ u8 bombersNotebookEventQueueCount;
+ /* 0x120B2 */ u8 bombersNotebookEventQueue[10];
/* 0x120BC */ u16 unk_120BC;
/* 0x120BE */ s16 unk120BE;
/* 0x120C0 */ s16 unk120C0;
diff --git a/include/z64ocarina.h b/include/z64ocarina.h
index 3bb99cd62..7cfafde4f 100644
--- a/include/z64ocarina.h
+++ b/include/z64ocarina.h
@@ -32,6 +32,12 @@ typedef enum {
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song
} OcarinaSongId;
+typedef enum OcarinaMode {
+ /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST = 24,
+ /* 0x19 */ OCARINA_MODE_APPLY_INV_SOT_SLOW,
+ /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT
+} OcarinaMode;
+
typedef enum {
/* 0 */ OCARINA_BTN_A,
/* 1 */ OCARINA_BTN_C_DOWN,
diff --git a/include/z64player.h b/include/z64player.h
index 3bcc53fde..5982233b8 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -43,35 +43,6 @@ typedef enum PlayerTransformation {
/* 5 */ PLAYER_FORM_MAX
} PlayerTransformation;
-typedef enum PlayerMask {
- /* 0x00 */ PLAYER_MASK_NONE,
- /* 0x01 */ PLAYER_MASK_TRUTH,
- /* 0x02 */ PLAYER_MASK_KAFEIS_MASK,
- /* 0x03 */ PLAYER_MASK_ALL_NIGHT,
- /* 0x04 */ PLAYER_MASK_BUNNY,
- /* 0x05 */ PLAYER_MASK_KEATON,
- /* 0x06 */ PLAYER_MASK_GARO,
- /* 0x07 */ PLAYER_MASK_ROMANI,
- /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER,
- /* 0x09 */ PLAYER_MASK_POSTMAN,
- /* 0x0A */ PLAYER_MASK_COUPLE,
- /* 0x0B */ PLAYER_MASK_GREAT_FAIRY,
- /* 0x0C */ PLAYER_MASK_GIBDO,
- /* 0x0D */ PLAYER_MASK_DON_GERO,
- /* 0x0E */ PLAYER_MASK_KAMARO,
- /* 0x0F */ PLAYER_MASK_CAPTAIN,
- /* 0x10 */ PLAYER_MASK_STONE,
- /* 0x11 */ PLAYER_MASK_BREMEN,
- /* 0x12 */ PLAYER_MASK_BLAST,
- /* 0x13 */ PLAYER_MASK_SCENTS,
- /* 0x14 */ PLAYER_MASK_GIANT,
- /* 0x15 */ PLAYER_MASK_FIERCE_DEITY,
- /* 0x16 */ PLAYER_MASK_GORON,
- /* 0x17 */ PLAYER_MASK_ZORA,
- /* 0x18 */ PLAYER_MASK_DEKU,
- /* 0x19 */ PLAYER_MASK_MAX
-} PlayerMask;
-
typedef enum {
/* 0 */ PLAYER_ENV_HAZARD_NONE,
/* 1 */ PLAYER_ENV_HAZARD_HOTROOM,
@@ -89,7 +60,7 @@ typedef enum PlayerItemAction {
/* 0x03 */ PLAYER_IA_SWORD_KOKIRI = PLAYER_IA_SWORD_MIN,
/* 0x04 */ PLAYER_IA_SWORD_RAZOR,
/* 0x05 */ PLAYER_IA_SWORD_GILDED,
- /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY,
+ /* 0x06 */ PLAYER_IA_SWORD_TWO_HANDED,
/* 0x07 */ PLAYER_IA_STICK,
/* 0x08 */ PLAYER_IA_ZORA_FINS,
/* 0x09 */ PLAYER_IA_BOW,
@@ -143,7 +114,8 @@ typedef enum PlayerItemAction {
/* 0x37 */ PLAYER_IA_37,
/* 0x38 */ PLAYER_IA_38,
/* 0x39 */ PLAYER_IA_39,
- /* 0x3A */ PLAYER_IA_MASK_TRUTH,
+ /* 0x3A */ PLAYER_IA_MASK_MIN,
+ /* 0x3A */ PLAYER_IA_MASK_TRUTH = PLAYER_IA_MASK_MIN,
/* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK,
/* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT,
/* 0x3D */ PLAYER_IA_MASK_BUNNY,
@@ -163,10 +135,12 @@ typedef enum PlayerItemAction {
/* 0x4B */ PLAYER_IA_MASK_BLAST,
/* 0x4C */ PLAYER_IA_MASK_SCENTS,
/* 0x4D */ PLAYER_IA_MASK_GIANT,
- /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY,
+ /* 0x4E */ PLAYER_IA_MASK_TRANSFORMATION_MIN,
+ /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY = PLAYER_IA_MASK_TRANSFORMATION_MIN,
/* 0x4F */ PLAYER_IA_MASK_GORON,
/* 0x50 */ PLAYER_IA_MASK_ZORA,
/* 0x51 */ PLAYER_IA_MASK_DEKU,
+ /* 0x51 */ PLAYER_IA_MASK_MAX = PLAYER_IA_MASK_DEKU,
/* 0x52 */ PLAYER_IA_LENS,
/* 0x53 */ PLAYER_IA_MAX
} PlayerItemAction;
@@ -190,12 +164,45 @@ typedef enum PlayerMeleeWeapon {
/* 1 */ PLAYER_MELEEWEAPON_SWORD_KOKIRI = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_KOKIRI),
/* 2 */ PLAYER_MELEEWEAPON_SWORD_RAZOR = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_RAZOR),
/* 3 */ PLAYER_MELEEWEAPON_SWORD_GILDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GILDED),
- /* 4 */ PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY),
+ /* 4 */ PLAYER_MELEEWEAPON_SWORD_TWO_HANDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED),
/* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK),
/* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS),
/* 7 */ PLAYER_MELEEWEAPON_MAX
} PlayerMeleeWeapon;
+// Relies on mask item actions to be contiguous
+#define GET_MASK_FROM_IA(itemAction) ((itemAction) - (PLAYER_IA_MASK_MIN - 1))
+#define GET_IA_FROM_MASK(mask) ((mask) + (PLAYER_IA_MASK_MIN - 1))
+
+typedef enum PlayerMask {
+ /* 0x00 */ PLAYER_MASK_NONE,
+ /* 0x01 */ PLAYER_MASK_TRUTH = GET_MASK_FROM_IA(PLAYER_IA_MASK_TRUTH),
+ /* 0x02 */ PLAYER_MASK_KAFEIS_MASK = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAFEIS_MASK),
+ /* 0x03 */ PLAYER_MASK_ALL_NIGHT = GET_MASK_FROM_IA(PLAYER_IA_MASK_ALL_NIGHT),
+ /* 0x04 */ PLAYER_MASK_BUNNY = GET_MASK_FROM_IA(PLAYER_IA_MASK_BUNNY),
+ /* 0x05 */ PLAYER_MASK_KEATON = GET_MASK_FROM_IA(PLAYER_IA_MASK_KEATON),
+ /* 0x06 */ PLAYER_MASK_GARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GARO),
+ /* 0x07 */ PLAYER_MASK_ROMANI = GET_MASK_FROM_IA(PLAYER_IA_MASK_ROMANI),
+ /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER = GET_MASK_FROM_IA(PLAYER_IA_MASK_CIRCUS_LEADER),
+ /* 0x09 */ PLAYER_MASK_POSTMAN = GET_MASK_FROM_IA(PLAYER_IA_MASK_POSTMAN),
+ /* 0x0A */ PLAYER_MASK_COUPLE = GET_MASK_FROM_IA(PLAYER_IA_MASK_COUPLE),
+ /* 0x0B */ PLAYER_MASK_GREAT_FAIRY = GET_MASK_FROM_IA(PLAYER_IA_MASK_GREAT_FAIRY),
+ /* 0x0C */ PLAYER_MASK_GIBDO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIBDO),
+ /* 0x0D */ PLAYER_MASK_DON_GERO = GET_MASK_FROM_IA(PLAYER_IA_MASK_DON_GERO),
+ /* 0x0E */ PLAYER_MASK_KAMARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAMARO),
+ /* 0x0F */ PLAYER_MASK_CAPTAIN = GET_MASK_FROM_IA(PLAYER_IA_MASK_CAPTAIN),
+ /* 0x10 */ PLAYER_MASK_STONE = GET_MASK_FROM_IA(PLAYER_IA_MASK_STONE),
+ /* 0x11 */ PLAYER_MASK_BREMEN = GET_MASK_FROM_IA(PLAYER_IA_MASK_BREMEN),
+ /* 0x12 */ PLAYER_MASK_BLAST = GET_MASK_FROM_IA(PLAYER_IA_MASK_BLAST),
+ /* 0x13 */ PLAYER_MASK_SCENTS = GET_MASK_FROM_IA(PLAYER_IA_MASK_SCENTS),
+ /* 0x14 */ PLAYER_MASK_GIANT = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIANT),
+ /* 0x15 */ PLAYER_MASK_FIERCE_DEITY = GET_MASK_FROM_IA(PLAYER_IA_MASK_FIERCE_DEITY),
+ /* 0x16 */ PLAYER_MASK_GORON = GET_MASK_FROM_IA(PLAYER_IA_MASK_GORON),
+ /* 0x17 */ PLAYER_MASK_ZORA = GET_MASK_FROM_IA(PLAYER_IA_MASK_ZORA),
+ /* 0x18 */ PLAYER_MASK_DEKU = GET_MASK_FROM_IA(PLAYER_IA_MASK_DEKU),
+ /* 0x19 */ PLAYER_MASK_MAX
+} PlayerMask;
+
// Relies on bottle-related item actions to be contiguous
#define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN)
@@ -244,7 +251,7 @@ typedef enum PlayerSword {
/* 0 */ PLAYER_SWORD_KOKIRI = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI),
/* 1 */ PLAYER_SWORD_RAZOR = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR),
/* 2 */ PLAYER_SWORD_GILDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED),
- /* 3 */ PLAYER_SWORD_GREAT_FAIRY = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY),
+ /* 3 */ PLAYER_SWORD_TWO_HANDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED),
/* 4 */ PLAYER_SWORD_MAX
} PlayerSword;
@@ -287,6 +294,12 @@ typedef enum PlayerMeleeWeaponAnimation {
/* 34 */ PLAYER_MWA_MAX
} PlayerMeleeWeaponAnimation;
+typedef enum PlayerMeleeWeaponState {
+ /* -1 */ PLAYER_MELEE_WEAPON_STATE_MINUS_1 = -1,
+ /* 0 */ PLAYER_MELEE_WEAPON_STATE_0,
+ /* 1 */ PLAYER_MELEE_WEAPON_STATE_1
+} PlayerMeleeWeaponState;
+
typedef enum PlayerDoorType {
/* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening
/* 0 */ PLAYER_DOORTYPE_NONE,
@@ -300,13 +313,61 @@ typedef enum PlayerDoorType {
typedef enum PlayerAnimType {
/* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT
/* 1 */ PLAYER_ANIMTYPE_1,
- /* 2 */ PLAYER_ANIMTYPE_2,
+ /* 2 */ PLAYER_ANIMTYPE_2, // Shield but no sword?
/* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon
/* 4 */ PLAYER_ANIMTYPE_4,
/* 5 */ PLAYER_ANIMTYPE_5,
/* 6 */ PLAYER_ANIMTYPE_MAX
} PlayerAnimType;
+typedef enum PlayerAnimGroup {
+ /* 0 */ PLAYER_ANIMGROUP_0, // STANDING_IDLE
+ /* 1 */ PLAYER_ANIMGROUP_1, // WALKING
+ /* 2 */ PLAYER_ANIMGROUP_2, // RUNNING
+ /* 3 */ PLAYER_ANIMGROUP_3,
+ /* 4 */ PLAYER_ANIMGROUP_4,
+ /* 5 */ PLAYER_ANIMGROUP_5, // Z-Targeting ?
+ /* 6 */ PLAYER_ANIMGROUP_6, // Start or finishing some animation
+ /* 7 */ PLAYER_ANIMGROUP_7, // DRAW_MELEE_WEAPON
+ /* 8 */ PLAYER_ANIMGROUP_8, // OPEN_DOOR_LEFT_FIERCE_DEITY
+ /* 9 */ PLAYER_ANIMGROUP_9, // OPEN_DOOR_LEFT_HUMAN
+ /* 10 */ PLAYER_ANIMGROUP_10, // OPEN_DOOR_RIGHT_FIERCE_DEITY
+ /* 11 */ PLAYER_ANIMGROUP_11, // OPEN_DOOR_RIGHT_HUMAN
+ /* 12 */ PLAYER_ANIMGROUP_12, // GRABBING
+ /* 13 */ PLAYER_ANIMGROUP_13, // FALLING/LANDING?
+ /* 14 */ PLAYER_ANIMGROUP_14, // landing from short distances?
+ /* 15 */ PLAYER_ANIMGROUP_15, // ROLLING
+ /* 16 */ PLAYER_ANIMGROUP_16, // BONK/BONKING
+ /* 17 */ PLAYER_ANIMGROUP_17,
+ /* 18 */ PLAYER_ANIMGROUP_18,
+ /* 19 */ PLAYER_ANIMGROUP_19, // START_SHIELDING
+ /* 20 */ PLAYER_ANIMGROUP_20, // SHIELDING
+ /* 21 */ PLAYER_ANIMGROUP_21, // STOP_SHIELDING/END_SHIELDING
+ /* 22 */ PLAYER_ANIMGROUP_22, // SLOW_SIDE_WALK?
+ /* 23 */ PLAYER_ANIMGROUP_23, // SIDE_WALK
+ /* 24 */ PLAYER_ANIMGROUP_24, // SIDE_WALK_RIGHT
+ /* 25 */ PLAYER_ANIMGROUP_25,
+ /* 26 */ PLAYER_ANIMGROUP_26,
+ /* 27 */ PLAYER_ANIMGROUP_27,
+ /* 28 */ PLAYER_ANIMGROUP_28, // THROWING
+ /* 29 */ PLAYER_ANIMGROUP_29, // PUT_DOWN_OBJECT?
+ /* 30 */ PLAYER_ANIMGROUP_30, // back walking slow?
+ /* 31 */ PLAYER_ANIMGROUP_31,
+ /* 32 */ PLAYER_ANIMGROUP_32,
+ /* 33 */ PLAYER_ANIMGROUP_33,
+ /* 34 */ PLAYER_ANIMGROUP_34, // PULLING_START
+ /* 35 */ PLAYER_ANIMGROUP_35, // PULLING
+ /* 36 */ PLAYER_ANIMGROUP_36, // PULLING_END
+ /* 37 */ PLAYER_ANIMGROUP_37, // climbing from a ledge?
+ /* 38 */ PLAYER_ANIMGROUP_38, // ledge
+ /* 39 */ PLAYER_ANIMGROUP_39, // ledge
+ /* 40 */ PLAYER_ANIMGROUP_40, // climbing from a ledge
+ /* 41 */ PLAYER_ANIMGROUP_41,
+ /* 42 */ PLAYER_ANIMGROUP_42,
+ /* 43 */ PLAYER_ANIMGROUP_43,
+ /* 44 */ PLAYER_ANIMGROUP_MAX
+} PlayerAnimGroup;
+
typedef enum PlayerModelType {
// left hand
/* 0 */ PLAYER_MODELTYPE_LH_OPEN,
@@ -464,7 +525,7 @@ typedef struct PlayerAnimationFrame {
#define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00)
typedef struct PlayerAgeProperties {
- /* 0x00 */ f32 unk_00; // ceilingCheckHeight?
+ /* 0x00 */ f32 unk_00; // ceilingCheckHeight
/* 0x04 */ f32 shadowScale;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
@@ -478,7 +539,7 @@ typedef struct PlayerAgeProperties {
/* 0x2C */ f32 unk_2C; // water stuff // depthInWater
/* 0x30 */ f32 unk_30; // water stuff // depthInWater
/* 0x34 */ f32 unk_34;
- /* 0x38 */ f32 unk_38; // wallCheckHeight?
+ /* 0x38 */ f32 unk_38; // wallCheckHeight
/* 0x3C */ f32 unk_3C;
/* 0x40 */ f32 unk_40;
/* 0x44 */ Vec3s unk_44;
@@ -489,9 +550,9 @@ typedef struct PlayerAgeProperties {
/* 0x94 */ u16 surfaceSfxIdOffset;
/* 0x98 */ f32 unk_98;
/* 0x9C */ f32 unk_9C;
- /* 0xA0 */ PlayerAnimationHeader* unk_A0;
- /* 0xA4 */ PlayerAnimationHeader* unk_A4;
- /* 0xA8 */ PlayerAnimationHeader* unk_A8;
+ /* 0xA0 */ PlayerAnimationHeader* openChestAnim;
+ /* 0xA4 */ PlayerAnimationHeader* unk_A4; // OoT leftovers to interact with the Master Sword
+ /* 0xA8 */ PlayerAnimationHeader* unk_A8; // OoT leftovers to interact with the Master Sword
/* 0xAC */ PlayerAnimationHeader* unk_AC;
/* 0xB0 */ PlayerAnimationHeader* unk_B0;
/* 0xB4 */ PlayerAnimationHeader* unk_B4[4];
@@ -547,7 +608,7 @@ typedef enum PlayerCsMode {
/* 0x0F */ PLAYER_CSMODE_15,
/* 0x10 */ PLAYER_CSMODE_16,
/* 0x11 */ PLAYER_CSMODE_17,
- /* 0x12 */ PLAYER_CSMODE_18,
+ /* 0x12 */ PLAYER_CSMODE_18, // Strangled by Wallmaster
/* 0x13 */ PLAYER_CSMODE_19,
/* 0x14 */ PLAYER_CSMODE_20,
/* 0x15 */ PLAYER_CSMODE_21,
@@ -555,7 +616,7 @@ typedef enum PlayerCsMode {
/* 0x17 */ PLAYER_CSMODE_23,
/* 0x18 */ PLAYER_CSMODE_24,
/* 0x19 */ PLAYER_CSMODE_25,
- /* 0x1A */ PLAYER_CSMODE_26,
+ /* 0x1A */ PLAYER_CSMODE_26, // Halt!
/* 0x1B */ PLAYER_CSMODE_27,
/* 0x1C */ PLAYER_CSMODE_28,
/* 0x1D */ PLAYER_CSMODE_29,
@@ -595,7 +656,7 @@ typedef enum PlayerCsMode {
/* 0x3F */ PLAYER_CSMODE_63,
/* 0x40 */ PLAYER_CSMODE_64,
/* 0x41 */ PLAYER_CSMODE_65,
- /* 0x42 */ PLAYER_CSMODE_66,
+ /* 0x42 */ PLAYER_CSMODE_66, // Look side-to-side with chin down
/* 0x43 */ PLAYER_CSMODE_67,
/* 0x44 */ PLAYER_CSMODE_68,
/* 0x45 */ PLAYER_CSMODE_69,
@@ -603,17 +664,17 @@ typedef enum PlayerCsMode {
/* 0x47 */ PLAYER_CSMODE_71,
/* 0x48 */ PLAYER_CSMODE_72,
/* 0x49 */ PLAYER_CSMODE_73,
- /* 0x4A */ PLAYER_CSMODE_74,
+ /* 0x4A */ PLAYER_CSMODE_74, // Give a big nod of approval
/* 0x4B */ PLAYER_CSMODE_75,
/* 0x4C */ PLAYER_CSMODE_76,
/* 0x4D */ PLAYER_CSMODE_77,
/* 0x4E */ PLAYER_CSMODE_78,
/* 0x4F */ PLAYER_CSMODE_79,
/* 0x50 */ PLAYER_CSMODE_80,
- /* 0x51 */ PLAYER_CSMODE_81,
- /* 0x52 */ PLAYER_CSMODE_82,
+ /* 0x51 */ PLAYER_CSMODE_81, // Look side-to-side with chin up
+ /* 0x52 */ PLAYER_CSMODE_82, // Close eyes and sway body in circles
/* 0x53 */ PLAYER_CSMODE_83,
- /* 0x54 */ PLAYER_CSMODE_84,
+ /* 0x54 */ PLAYER_CSMODE_84, // Sucked by the moon
/* 0x55 */ PLAYER_CSMODE_85,
/* 0x56 */ PLAYER_CSMODE_86,
/* 0x57 */ PLAYER_CSMODE_87,
@@ -867,10 +928,11 @@ typedef enum PlayerCsMode {
#define PLAYER_STATE3_20000000 (1 << 29)
//
#define PLAYER_STATE3_40000000 (1 << 30)
-//
+// TARGETING_HOSTILE?
#define PLAYER_STATE3_80000000 (1 << 31)
+#define PLAYER_GET_BG_CAM_INDEX(thisx) ((thisx)->params & 0xFF)
#define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8)
typedef enum PlayerInitMode {
@@ -894,6 +956,15 @@ typedef enum PlayerInitMode {
#define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8))
+typedef enum PlayerUnkAA5 {
+ /* 0 */ PLAYER_UNKAA5_0,
+ /* 1 */ PLAYER_UNKAA5_1,
+ /* 2 */ PLAYER_UNKAA5_2,
+ /* 3 */ PLAYER_UNKAA5_3,
+ /* 4 */ PLAYER_UNKAA5_4,
+ /* 5 */ PLAYER_UNKAA5_5
+} PlayerUnkAA5;
+
typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play);
typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play);
typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this);
@@ -917,31 +988,13 @@ typedef struct Player {
/* 0x151 */ u8 rightHandType;
/* 0x152 */ u8 sheathType;
/* 0x153 */ u8 currentMask; // PlayerMask enum
- /* 0x154 */ s8 unk_154;
+ /* 0x154 */ s8 unk_154; // EquipSlot enum // Last pressed equip slot?
/* 0x155 */ u8 prevMask;
/* 0x158 */ Gfx** rightHandDLists;
/* 0x15C */ Gfx** leftHandDLists;
/* 0x160 */ Gfx** sheathDLists;
/* 0x164 */ Gfx** waistDLists;
- /* 0x168 */ f32 unk_168;
- /* 0x16C */ f32 unk_16C;
- /* 0x170 */ f32 unk_170;
- /* 0x174 */ f32 unk_174;
- /* 0x178 */ f32 unk_178;
- /* 0x17C */ f32 unk_17C;
- /* 0x180 */ f32 unk_180;
- /* 0x184 */ f32 unk_184;
- /* 0x188 */ f32 unk_188;
- /* 0x18C */ f32 unk_18C;
- /* 0x190 */ f32 unk_190;
- /* 0x194 */ f32 unk_194;
- /* 0x198 */ f32 unk_198;
- /* 0x19C */ f32 unk_19C;
- /* 0x1A0 */ f32 unk_1A0;
- /* 0x1A4 */ f32 unk_1A4;
- /* 0x1A8 */ f32 unk_1A8;
- /* 0x1AC */ f32 unk_1AC;
- /* 0x1B0 */ f32 unk_1B0;
+ /* 0x168 */ UNK_TYPE1 unk_168[0x4C];
/* 0x1B4 */ s16 unk_1B4;
/* 0x1B6 */ char unk_1B6[2];
/* 0x1B8 */ u8 giObjectLoading;
@@ -960,8 +1013,7 @@ typedef struct Player {
/* 0x2C8 */ SkelAnime unk_2C8;
/* 0x30C */ Vec3s jointTable[5];
/* 0x32A */ Vec3s morphTable[5];
- /* 0x348 */ s16 eyeTexId;
- /* 0x34A */ s16 eyeAnimTimer;
+ /* 0x348 */ BlinkInfo blinkInfo;
/* 0x34C */ Actor* heldActor;
/* 0x350 */ PosRot leftHandWorld;
/* 0x364 */ Actor* rightHandActor;
@@ -980,12 +1032,12 @@ typedef struct Player {
/* 0x395 */ u8 prevCsMode; // PlayerCsMode enum
/* 0x396 */ u8 unk_396; // currentActorActionId?
/* 0x397 */ u8 unk_397; // PlayerDoorType enum
- /* 0x398 */ Actor* unk_398;
+ /* 0x398 */ Actor* unk_398; // csActor?
/* 0x39C */ UNK_TYPE1 unk_39C[0x4];
/* 0x3A0 */ Vec3f unk_3A0;
/* 0x3AC */ Vec3f unk_3AC;
/* 0x3B8 */ u16 unk_3B8;
- /* 0x3BA */ s16 unk_3BA;
+ /* 0x3BA */ s16 doorBgCamIndex;
/* 0x3BC */ s16 subCamId;
/* 0x3BE */ char unk_3BE[2];
/* 0x3C0 */ Vec3f unk_3C0;
@@ -1028,7 +1080,7 @@ typedef struct Player {
/* 0xA9C */ f32 secretRumbleCharge; // builds per frame until discharges with a rumble request
/* 0xAA0 */ f32 closestSecretDistSq; // Used to augment `secretRumbleCharge`. Cleared every frame
/* 0xAA4 */ s8 unk_AA4;
- /* 0xAA5 */ u8 unk_AA5;
+ /* 0xAA5 */ u8 unk_AA5; // PlayerUnkAA5 enum
/* 0xAA6 */ u16 unk_AA6; // flags of some kind
/* 0xAA8 */ s16 unk_AA8;
/* 0xAAA */ s16 unk_AAA;
@@ -1049,20 +1101,21 @@ typedef struct Player {
/* 0xADA */ s8 meleeWeaponAnimation;
/* 0xADB */ s8 meleeWeaponState;
/* 0xADC */ s8 unk_ADC;
- /* 0xADD */ s8 unk_ADD;
+ /* 0xADD */ s8 unk_ADD; // Some sort of combo counter
/* 0xADE */ u8 unk_ADE;
/* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin
/* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ?
- /* 0xAE7 */ s8 unk_AE7; // a timer
+ /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc
/* 0xAE8 */ s16 unk_AE8; // multipurpose timer
/* 0xAEC */ f32 unk_AEC;
- /* 0xAF0 */ union { // TODO: this may be an union of two structs
+ /* 0xAF0 */ union {
Vec3f unk_AF0[2];
f32 arr_AF0[6];
};
- /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array
+ /* 0xB08 */ f32 unk_B08;
+ /* 0xB0C */ f32 unk_B0C;
/* 0xB10 */ f32 unk_B10[6];
- /* 0xB28 */ s16 unk_B28; //Burning stick timer?
+ /* 0xB28 */ s16 unk_B28; // Burning stick timer?
/* 0xB2A */ s8 getItemDrawIdPlusOne;
/* 0xB2B */ s8 unk_B2B;
/* 0xB2C */ f32 windSpeed;
@@ -1088,7 +1141,7 @@ typedef struct Player {
/* 0xB64 */ u8 unk_B64;
/* 0xB65 */ u8 shockTimer;
/* 0xB66 */ u8 unk_B66;
- /* 0xB67 */ u8 unk_B67; // deku remaining hops counter
+ /* 0xB67 */ u8 remainingHopsCounter; // Deku hopping on water
/* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling
/* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down)
/* 0xB6C */ s16 unk_B6C;
@@ -1100,8 +1153,8 @@ typedef struct Player {
/* 0xB76 */ s16 unk_B76;
/* 0xB78 */ f32 unk_B78;
/* 0xB7C */ f32 unk_B7C;
- /* 0xB80 */ f32 unk_B80;
- /* 0xB84 */ s16 unk_B84;
+ /* 0xB80 */ f32 pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces
+ /* 0xB84 */ s16 pushedYaw; // Yaw of direction in which player is being pushed
/* 0xB86 */ s16 unk_B86[2]; // unknown length
/* 0xB8A */ s16 unk_B8A;
/* 0xB8C */ s16 unk_B8C;
@@ -1112,7 +1165,7 @@ typedef struct Player {
/* 0xB96 */ s16 unk_B96;
/* 0xB98 */ WeaponInfo meleeWeaponInfo[3];
/* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX];
- /* 0xCC4 */ MtxF mf_CC4;
+ /* 0xCC4 */ MtxF leftHandMf;
/* 0xD04 */ MtxF shieldMf;
/* 0xD44 */ u8 isBurning;
/* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part
@@ -1120,8 +1173,7 @@ typedef struct Player {
/* 0xD58 */ PlayerFuncD58 unk_D58;
/* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame)
/* 0xD5D */ u8 unk_D5D;
- /* 0xD5E */ u8 unk_D5E;
- /* 0xD5F */ u8 unk_D5F;
+ /* 0xD5E */ u8 floorProperty; // FloorProperty enum
/* 0xD60 */ f32 unk_D60;
/* 0xD64 */ s16 unk_D64;
/* 0xD66 */ u16 unk_D66; // sfx
diff --git a/include/z64save.h b/include/z64save.h
index 88b63c57f..0db938f06 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -10,6 +10,13 @@ struct GameState;
struct PlayState;
struct FileSelectState;
+typedef enum {
+ /* 0 */ SAVE_AUDIO_STEREO,
+ /* 1 */ SAVE_AUDIO_MONO,
+ /* 2 */ SAVE_AUDIO_HEADSET,
+ /* 3 */ SAVE_AUDIO_SURROUND
+} AudioOption;
+
// TODO: properly name DOWN, RETURN and TOP
typedef enum RespawnMode {
/* 0 */ RESPAWN_MODE_DOWN, // "RESTART_MODE_DOWN"
@@ -80,7 +87,7 @@ typedef enum {
/* 5 */ TIMER_ID_ENV_HAZARD, // environmental hazard timer (underwater or hot room)
/* 6 */ TIMER_ID_GORON_RACE_UNUSED,
/* 7 */ TIMER_ID_MAX,
- /* 99 */ TIMER_ID_NONE = 99,
+ /* 99 */ TIMER_ID_NONE = 99
} TimerId;
typedef enum {
@@ -157,13 +164,13 @@ typedef enum {
#define PICTO_PHOTO_COMPRESSED_SIZE (PICTO_PHOTO_SIZE * 5 / 8)
typedef struct SramContext {
- /* 0x00 */ u8* readBuff;
- /* 0x04 */ u8 *saveBuf;
+ /* 0x00 */ u8* noFlashSaveBuf; // Never allocated memory
+ /* 0x04 */ u8* saveBuf;
/* 0x08 */ char unk_08[4];
/* 0x0C */ s16 status;
/* 0x10 */ u32 curPage;
/* 0x14 */ u32 numPages;
- /* 0x18 */ OSTime unk_18;
+ /* 0x18 */ OSTime startWriteOsTime;
/* 0x20 */ s16 unk_20;
/* 0x22 */ s16 unk_22;
/* 0x24 */ s16 unk_24;
@@ -226,14 +233,14 @@ typedef struct CycleSceneFlags {
typedef struct SaveOptions {
/* 0x0 */ u16 optionId; // "option_id"
/* 0x2 */ u8 language; // "j_n"
- /* 0x3 */ s8 audioSetting; // "s_sound"
+ /* 0x3 */ u8 audioSetting; // "s_sound"
/* 0x4 */ u8 languageSetting; // "language"
/* 0x5 */ u8 zTargetSetting; // "z_attention", 0: Switch; 1: Hold
} SaveOptions; // size = 0x6
typedef struct SavePlayerData {
/* 0x00 */ char newf[6]; // "newf" Will always be "ZELDA3 for a valid save
- /* 0x06 */ u16 deaths; // "savect"
+ /* 0x06 */ u16 threeDayResetCount; // "savect"
/* 0x08 */ char playerName[8]; // "player_name"
/* 0x10 */ s16 healthCapacity; // "max_life"
/* 0x12 */ s16 health; // "now_life"
@@ -337,11 +344,11 @@ typedef struct SaveContext {
/* 0x3DB4 */ f32 entranceSpeed; // "player_wipe_speedF"
/* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE"
/* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item"
- /* 0x3DBB */ u8 unk_3DBB; // "next_walk"
- /* 0x3DBC */ s16 dogParams; // "dog_flag"
+ /* 0x3DBB */ u8 retainWeatherMode; // "next_walk"
+ /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag"
/* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status"
/* 0x3DBF */ u8 showTitleCard; // "name_display"
- /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer"
+ /* 0x3DC0 */ s16 nayrusLoveTimer; // remnant of OoT, "shield_magic_timer"
/* 0x3DC2 */ u8 unk_3DC2; // "pad1"
/* 0x3DC8 */ OSTime postmanTimerStopOsTime; // The osTime when the timer stops for the postman minigame. "get_time"
/* 0x3DD0 */ u8 timerStates[TIMER_ID_MAX]; // See the `TimerState` enum. "event_fg"
@@ -374,13 +381,13 @@ typedef struct SaveContext {
/* 0x3F3A */ u16 minigameScore; // "yabusame_total"
/* 0x3F3C */ u16 minigameHiddenScore; // "yabusame_out_ct"
/* 0x3F3E */ u8 unk_3F3E; // "no_save"
- /* 0x3F3F */ u8 unk_3F3F; // "flash_flag"
+ /* 0x3F3F */ u8 flashSaveAvailable; // "flash_flag"
/* 0x3F40 */ SaveOptions options;
- /* 0x3F46 */ u16 unk_3F46; // "NottoriBgm"
+ /* 0x3F46 */ u16 forcedSeqId; // "NottoriBgm"
/* 0x3F48 */ u8 cutsceneTransitionControl; // "fade_go"
/* 0x3F4A */ u16 nextCutsceneIndex; // "next_daytime"
/* 0x3F4C */ u8 cutsceneTrigger; // "doukidemo"
- /* 0x3F4D */ u8 unk_3F4D; // "Kenjya_no"
+ /* 0x3F4D */ u8 chamberCutsceneNum; // remnant of OoT "Kenjya_no"
/* 0x3F4E */ u16 nextDayTime; // "next_zelda_time"
/* 0x3F50 */ u8 transFadeDuration; // "fade_speed"
/* 0x3F51 */ u8 transWipeSpeed; // "wipe_speed" transition related
@@ -696,7 +703,9 @@ typedef enum {
#define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10)
#define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20)
#define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40)
-#define WEEKEVENTREG_18_80 PACK_WEEKEVENTREG_FLAG(18, 0x80)
+
+// Player has Powder Keg purchasing privileges.
+#define WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES PACK_WEEKEVENTREG_FLAG(18, 0x80)
#define WEEKEVENTREG_19_01 PACK_WEEKEVENTREG_FLAG(19, 0x01)
#define WEEKEVENTREG_19_02 PACK_WEEKEVENTREG_FLAG(19, 0x02)
#define WEEKEVENTREG_19_04 PACK_WEEKEVENTREG_FLAG(19, 0x04)
@@ -718,19 +727,26 @@ typedef enum {
#define WEEKEVENTREG_20_80 PACK_WEEKEVENTREG_FLAG(20, 0x80)
#define WEEKEVENTREG_21_01 PACK_WEEKEVENTREG_FLAG(21, 0x01)
#define WEEKEVENTREG_21_02 PACK_WEEKEVENTREG_FLAG(21, 0x02)
-#define WEEKEVENTREG_21_04 PACK_WEEKEVENTREG_FLAG(21, 0x04)
-#define WEEKEVENTREG_21_08 PACK_WEEKEVENTREG_FLAG(21, 0x08)
+
+// Player has spoken to Goron Graveyard's gravemaker while in Goron form.
+#define WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON PACK_WEEKEVENTREG_FLAG(21, 0x04)
+// Player has spoken to formerly frozen Goron outside Goron Graveyard.
+#define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08)
+
#define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10)
-#define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20)
+#define WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(21, 0x20)
#define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40)
#define WEEKEVENTREG_21_80 PACK_WEEKEVENTREG_FLAG(21, 0x80)
// Aliens defeated
// "Winning" the alien invasion
-#define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01)
+#define WEEKEVENTREG_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(22, 0x01)
#define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02)
-#define WEEKEVENTREG_22_04 PACK_WEEKEVENTREG_FLAG(22, 0x04)
+
+// Goron Elder's son has been calmed from Goron's Lullaby.
+#define WEEKEVENTREG_CALMED_GORON_ELDERS_SON PACK_WEEKEVENTREG_FLAG(22, 0x04)
+
#define WEEKEVENTREG_22_08 PACK_WEEKEVENTREG_FLAG(22, 0x08)
#define WEEKEVENTREG_22_10 PACK_WEEKEVENTREG_FLAG(22, 0x10)
#define WEEKEVENTREG_22_20 PACK_WEEKEVENTREG_FLAG(22, 0x20)
@@ -780,11 +796,11 @@ typedef enum {
#define WEEKEVENTREG_26_40 PACK_WEEKEVENTREG_FLAG(26, 0x40)
#define WEEKEVENTREG_26_80 PACK_WEEKEVENTREG_FLAG(26, 0x80)
#define WEEKEVENTREG_27_01 PACK_WEEKEVENTREG_FLAG(27, 0x01)
-#define WEEKEVENTREG_27_02 PACK_WEEKEVENTREG_FLAG(27, 0x02)
-#define WEEKEVENTREG_27_04 PACK_WEEKEVENTREG_FLAG(27, 0x04)
-#define WEEKEVENTREG_27_08 PACK_WEEKEVENTREG_FLAG(27, 0x08)
-#define WEEKEVENTREG_27_10 PACK_WEEKEVENTREG_FLAG(27, 0x10)
-#define WEEKEVENTREG_27_20 PACK_WEEKEVENTREG_FLAG(27, 0x20)
+#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x02)
+#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x04)
+#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x08)
+#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x10)
+#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x20)
#define WEEKEVENTREG_27_40 PACK_WEEKEVENTREG_FLAG(27, 0x40)
#define WEEKEVENTREG_27_80 PACK_WEEKEVENTREG_FLAG(27, 0x80)
#define WEEKEVENTREG_28_01 PACK_WEEKEVENTREG_FLAG(28, 0x01)
@@ -941,22 +957,22 @@ typedef enum {
#define WEEKEVENTREG_50_01 PACK_WEEKEVENTREG_FLAG(50, 0x01)
#define WEEKEVENTREG_50_02 PACK_WEEKEVENTREG_FLAG(50, 0x02)
#define WEEKEVENTREG_50_04 PACK_WEEKEVENTREG_FLAG(50, 0x04)
-#define WEEKEVENTREG_50_08 PACK_WEEKEVENTREG_FLAG(50, 0x08)
+#define WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x08)
#define WEEKEVENTREG_50_10 PACK_WEEKEVENTREG_FLAG(50, 0x10)
-#define WEEKEVENTREG_50_20 PACK_WEEKEVENTREG_FLAG(50, 0x20)
+#define WEEKEVENTREG_HAD_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x20)
#define WEEKEVENTREG_50_40 PACK_WEEKEVENTREG_FLAG(50, 0x40)
-#define WEEKEVENTREG_50_80 PACK_WEEKEVENTREG_FLAG(50, 0x80)
-#define WEEKEVENTREG_51_01 PACK_WEEKEVENTREG_FLAG(51, 0x01)
+#define WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(50, 0x80)
+#define WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(51, 0x01)
#define WEEKEVENTREG_51_02 PACK_WEEKEVENTREG_FLAG(51, 0x02)
#define WEEKEVENTREG_51_04 PACK_WEEKEVENTREG_FLAG(51, 0x04)
#define WEEKEVENTREG_51_08 PACK_WEEKEVENTREG_FLAG(51, 0x08)
#define WEEKEVENTREG_51_10 PACK_WEEKEVENTREG_FLAG(51, 0x10)
-#define WEEKEVENTREG_51_20 PACK_WEEKEVENTREG_FLAG(51, 0x20)
+#define WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(51, 0x20)
#define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40)
#define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80)
-// ProtectedCremia
-#define WEEKEVENTREG_52_01 PACK_WEEKEVENTREG_FLAG(52, 0x01)
+// Protected Cremia
+#define WEEKEVENTREG_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(52, 0x01)
// Lose Milk Run minigame
#define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02)
@@ -1086,61 +1102,65 @@ typedef enum {
#define WEEKEVENTREG_65_20 PACK_WEEKEVENTREG_FLAG(65, 0x20)
#define WEEKEVENTREG_65_40 PACK_WEEKEVENTREG_FLAG(65, 0x40)
#define WEEKEVENTREG_65_80 PACK_WEEKEVENTREG_FLAG(65, 0x80)
-#define WEEKEVENTREG_66_01 PACK_WEEKEVENTREG_FLAG(66, 0x01)
-#define WEEKEVENTREG_66_02 PACK_WEEKEVENTREG_FLAG(66, 0x02)
-#define WEEKEVENTREG_66_04 PACK_WEEKEVENTREG_FLAG(66, 0x04)
-#define WEEKEVENTREG_66_08 PACK_WEEKEVENTREG_FLAG(66, 0x08)
-#define WEEKEVENTREG_66_10 PACK_WEEKEVENTREG_FLAG(66, 0x10)
-#define WEEKEVENTREG_66_20 PACK_WEEKEVENTREG_FLAG(66, 0x20)
-#define WEEKEVENTREG_66_40 PACK_WEEKEVENTREG_FLAG(66, 0x40)
-#define WEEKEVENTREG_66_80 PACK_WEEKEVENTREG_FLAG(66, 0x80)
-#define WEEKEVENTREG_67_01 PACK_WEEKEVENTREG_FLAG(67, 0x01)
-#define WEEKEVENTREG_67_02 PACK_WEEKEVENTREG_FLAG(67, 0x02)
-#define WEEKEVENTREG_67_04 PACK_WEEKEVENTREG_FLAG(67, 0x04)
-#define WEEKEVENTREG_67_08 PACK_WEEKEVENTREG_FLAG(67, 0x08)
-#define WEEKEVENTREG_67_10 PACK_WEEKEVENTREG_FLAG(67, 0x10)
-#define WEEKEVENTREG_67_20 PACK_WEEKEVENTREG_FLAG(67, 0x20)
-#define WEEKEVENTREG_67_40 PACK_WEEKEVENTREG_FLAG(67, 0x40)
-#define WEEKEVENTREG_67_80 PACK_WEEKEVENTREG_FLAG(67, 0x80)
-#define WEEKEVENTREG_68_01 PACK_WEEKEVENTREG_FLAG(68, 0x01)
-#define WEEKEVENTREG_68_02 PACK_WEEKEVENTREG_FLAG(68, 0x02)
-#define WEEKEVENTREG_68_04 PACK_WEEKEVENTREG_FLAG(68, 0x04)
-#define WEEKEVENTREG_68_08 PACK_WEEKEVENTREG_FLAG(68, 0x08)
-#define WEEKEVENTREG_68_10 PACK_WEEKEVENTREG_FLAG(68, 0x10)
-#define WEEKEVENTREG_68_20 PACK_WEEKEVENTREG_FLAG(68, 0x20)
-#define WEEKEVENTREG_68_40 PACK_WEEKEVENTREG_FLAG(68, 0x40)
-#define WEEKEVENTREG_68_80 PACK_WEEKEVENTREG_FLAG(68, 0x80)
-#define WEEKEVENTREG_69_01 PACK_WEEKEVENTREG_FLAG(69, 0x01)
-#define WEEKEVENTREG_69_02 PACK_WEEKEVENTREG_FLAG(69, 0x02)
-#define WEEKEVENTREG_69_04 PACK_WEEKEVENTREG_FLAG(69, 0x04)
-#define WEEKEVENTREG_69_08 PACK_WEEKEVENTREG_FLAG(69, 0x08)
-#define WEEKEVENTREG_69_10 PACK_WEEKEVENTREG_FLAG(69, 0x10)
-#define WEEKEVENTREG_69_20 PACK_WEEKEVENTREG_FLAG(69, 0x20)
-#define WEEKEVENTREG_69_40 PACK_WEEKEVENTREG_FLAG(69, 0x40)
-#define WEEKEVENTREG_69_80 PACK_WEEKEVENTREG_FLAG(69, 0x80)
-#define WEEKEVENTREG_70_01 PACK_WEEKEVENTREG_FLAG(70, 0x01)
-#define WEEKEVENTREG_70_02 PACK_WEEKEVENTREG_FLAG(70, 0x02)
-#define WEEKEVENTREG_70_04 PACK_WEEKEVENTREG_FLAG(70, 0x04)
-#define WEEKEVENTREG_70_08 PACK_WEEKEVENTREG_FLAG(70, 0x08)
-#define WEEKEVENTREG_70_10 PACK_WEEKEVENTREG_FLAG(70, 0x10)
-#define WEEKEVENTREG_70_20 PACK_WEEKEVENTREG_FLAG(70, 0x20)
-#define WEEKEVENTREG_70_40 PACK_WEEKEVENTREG_FLAG(70, 0x40)
-#define WEEKEVENTREG_70_80 PACK_WEEKEVENTREG_FLAG(70, 0x80)
-#define WEEKEVENTREG_71_01 PACK_WEEKEVENTREG_FLAG(71, 0x01)
-#define WEEKEVENTREG_71_02 PACK_WEEKEVENTREG_FLAG(71, 0x02)
-#define WEEKEVENTREG_71_04 PACK_WEEKEVENTREG_FLAG(71, 0x04)
-#define WEEKEVENTREG_71_08 PACK_WEEKEVENTREG_FLAG(71, 0x08)
-#define WEEKEVENTREG_71_10 PACK_WEEKEVENTREG_FLAG(71, 0x10)
-#define WEEKEVENTREG_71_20 PACK_WEEKEVENTREG_FLAG(71, 0x20)
-#define WEEKEVENTREG_71_40 PACK_WEEKEVENTREG_FLAG(71, 0x40)
-#define WEEKEVENTREG_71_80 PACK_WEEKEVENTREG_FLAG(71, 0x80)
-#define WEEKEVENTREG_72_01 PACK_WEEKEVENTREG_FLAG(72, 0x01)
-#define WEEKEVENTREG_72_02 PACK_WEEKEVENTREG_FLAG(72, 0x02)
-#define WEEKEVENTREG_72_04 PACK_WEEKEVENTREG_FLAG(72, 0x04)
-#define WEEKEVENTREG_72_08 PACK_WEEKEVENTREG_FLAG(72, 0x08)
-#define WEEKEVENTREG_72_10 PACK_WEEKEVENTREG_FLAG(72, 0x10)
-#define WEEKEVENTREG_72_20 PACK_WEEKEVENTREG_FLAG(72, 0x20)
-#define WEEKEVENTREG_72_40 PACK_WEEKEVENTREG_FLAG(72, 0x40)
+
+/* Bombers' Notebook Events */
+
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU PACK_WEEKEVENTREG_FLAG(66, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI PACK_WEEKEVENTREG_FLAG(66, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN PACK_WEEKEVENTREG_FLAG(66, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY PACK_WEEKEVENTREG_FLAG(66, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI PACK_WEEKEVENTREG_FLAG(66, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA PACK_WEEKEVENTREG_FLAG(66, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR PACK_WEEKEVENTREG_FLAG(66, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA PACK_WEEKEVENTREG_FLAG(66, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO PACK_WEEKEVENTREG_FLAG(67, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN PACK_WEEKEVENTREG_FLAG(67, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN PACK_WEEKEVENTREG_FLAG(67, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS PACK_WEEKEVENTREG_FLAG(67, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND PACK_WEEKEVENTREG_FLAG(67, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER PACK_WEEKEVENTREG_FLAG(67, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO PACK_WEEKEVENTREG_FLAG(67, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG PACK_WEEKEVENTREG_FLAG(67, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS PACK_WEEKEVENTREG_FLAG(68, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO PACK_WEEKEVENTREG_FLAG(68, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU PACK_WEEKEVENTREG_FLAG(68, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS PACK_WEEKEVENTREG_FLAG(68, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(68, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(68, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(69, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(69, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(69, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(69, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE PACK_WEEKEVENTREG_FLAG(69, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(69, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK PACK_WEEKEVENTREG_FLAG(70, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK PACK_WEEKEVENTREG_FLAG(70, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE PACK_WEEKEVENTREG_FLAG(70, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK PACK_WEEKEVENTREG_FLAG(70, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP PACK_WEEKEVENTREG_FLAG(70, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP PACK_WEEKEVENTREG_FLAG(70, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP PACK_WEEKEVENTREG_FLAG(71, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP PACK_WEEKEVENTREG_FLAG(71, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK PACK_WEEKEVENTREG_FLAG(71, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD PACK_WEEKEVENTREG_FLAG(71, 0x40)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x80)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x01)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT PACK_WEEKEVENTREG_FLAG(72, 0x02)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK PACK_WEEKEVENTREG_FLAG(72, 0x04)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK PACK_WEEKEVENTREG_FLAG(72, 0x08)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x10)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK PACK_WEEKEVENTREG_FLAG(72, 0x20)
+#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK PACK_WEEKEVENTREG_FLAG(72, 0x40)
+
#define WEEKEVENTREG_72_80 PACK_WEEKEVENTREG_FLAG(72, 0x80)
#define WEEKEVENTREG_73_01 PACK_WEEKEVENTREG_FLAG(73, 0x01)
#define WEEKEVENTREG_73_02 PACK_WEEKEVENTREG_FLAG(73, 0x02)
@@ -1165,7 +1185,7 @@ typedef enum {
#define WEEKEVENTREG_75_02 PACK_WEEKEVENTREG_FLAG(75, 0x02)
#define WEEKEVENTREG_75_04 PACK_WEEKEVENTREG_FLAG(75, 0x04)
#define WEEKEVENTREG_75_08 PACK_WEEKEVENTREG_FLAG(75, 0x08)
-#define WEEKEVENTREG_75_10 PACK_WEEKEVENTREG_FLAG(75, 0x10)
+#define WEEKEVENTREG_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(75, 0x10)
#define WEEKEVENTREG_75_20 PACK_WEEKEVENTREG_FLAG(75, 0x20)
#define WEEKEVENTREG_75_40 PACK_WEEKEVENTREG_FLAG(75, 0x40)
#define WEEKEVENTREG_75_80 PACK_WEEKEVENTREG_FLAG(75, 0x80)
@@ -1211,7 +1231,7 @@ typedef enum {
// Aveil has spotted Player
#define WEEKEVENTREG_80_08 PACK_WEEKEVENTREG_FLAG(80, 0x08)
-#define WEEKEVENTREG_80_10 PACK_WEEKEVENTREG_FLAG(80, 0x10)
+#define WEEKEVENTREG_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(80, 0x10)
#define WEEKEVENTREG_80_20 PACK_WEEKEVENTREG_FLAG(80, 0x20)
#define WEEKEVENTREG_80_40 PACK_WEEKEVENTREG_FLAG(80, 0x40)
#define WEEKEVENTREG_80_80 PACK_WEEKEVENTREG_FLAG(80, 0x80)
@@ -1294,11 +1314,17 @@ typedef enum {
#define WEEKEVENTREG_88_08 PACK_WEEKEVENTREG_FLAG(88, 0x08)
#define WEEKEVENTREG_88_10 PACK_WEEKEVENTREG_FLAG(88, 0x10)
#define WEEKEVENTREG_88_20 PACK_WEEKEVENTREG_FLAG(88, 0x20)
-#define WEEKEVENTREG_88_40 PACK_WEEKEVENTREG_FLAG(88, 0x40)
-#define WEEKEVENTREG_88_80 PACK_WEEKEVENTREG_FLAG(88, 0x80)
-#define WEEKEVENTREG_89_01 PACK_WEEKEVENTREG_FLAG(89, 0x01)
-#define WEEKEVENTREG_89_02 PACK_WEEKEVENTREG_FLAG(89, 0x02)
-#define WEEKEVENTREG_89_04 PACK_WEEKEVENTREG_FLAG(89, 0x04)
+
+// Goron shrine Gatekeeper has opened shrine.
+#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(88, 0x40)
+// Goron shrine Gatekeeper has opened shrine for player in Human form.
+#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN PACK_WEEKEVENTREG_FLAG(88, 0x80)
+// Goron shrine Gatekeeper has opened shrine for player in Deku form.
+#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU PACK_WEEKEVENTREG_FLAG(89, 0x01)
+// Goron shrine Gatekeeper has opened shrine for player in Zora form.
+#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA PACK_WEEKEVENTREG_FLAG(89, 0x02)
+// Goron shrine Gatekeeper has opened shrine for player in Goron form.
+#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON PACK_WEEKEVENTREG_FLAG(89, 0x04)
// Unconfirmed: "Postman has delivered priority mail"
#define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08)
@@ -1441,15 +1467,8 @@ typedef enum {
* gSaveContext.eventInf
*/
-// gSaveContext.eventInf[0] is used to dog race information
-// #define EVENTINF_00 0x00
-// #define EVENTINF_01 0x01
-// #define EVENTINF_02 0x02
-// #define EVENTINF_03 0x03
-// #define EVENTINF_04 0x04
-// #define EVENTINF_05 0x05
-// #define EVENTINF_06 0x06
-// #define EVENTINF_07 0x07
+// gSaveContext.eventInf[0] is used for dog race information (8 entries)
+// EVENTINF_00 to EVENTINF_07
#define EVENTINF_10 0x10
#define EVENTINF_11 0x11
@@ -1466,7 +1485,8 @@ typedef enum {
#define EVENTINF_24 0x24
#define EVENTINF_25 0x25
#define EVENTINF_26 0x26
-#define EVENTINF_27 0x27
+// "Dawn of ... day". Must be triggered with respawnFlag -4 or -99
+#define EVENTINF_TRIGGER_DAYTELOP 0x27
#define EVENTINF_30 0x30
// EVENTINF_31 is used to track if Player is within range of EnGakufu (2D Song Buttons Appearing on Wall)
@@ -1510,11 +1530,14 @@ typedef enum {
#define EVENTINF_65 0x65
#define EVENTINF_66 0x66
#define EVENTINF_67 0x67
-#define EVENTINF_70 0x70
-#define EVENTINF_71 0x71
-#define EVENTINF_72 0x72
-#define EVENTINF_73 0x73
-#define EVENTINF_74 0x74
+
+// Tracks which ammo is lost during the three day reset
+#define EVENTINF_THREEDAYRESET_LOST_RUPEES 0x70
+#define EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO 0x71
+#define EVENTINF_THREEDAYRESET_LOST_NUT_AMMO 0x72
+#define EVENTINF_THREEDAYRESET_LOST_STICK_AMMO 0x73
+#define EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO 0x74
+
#define EVENTINF_75 0x75
#define EVENTINF_76 0x76
#define EVENTINF_77 0x77
@@ -1548,7 +1571,7 @@ typedef enum {
/* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE,
/* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE,
/* 2 */ DUNGEON_INDEX_GREAT_BAY_TEMPLE,
- /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE, // Also applies to Inverted Stone Tower Temple
+ /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple
} DungeonIndex;
void Sram_ActivateOwl(u8 owlId);
@@ -1561,28 +1584,28 @@ void Sram_InitDebugSave(void);
void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx);
void Sram_OpenSave(struct FileSelectState* fileSelect, SramContext* sramCtx);
void func_8014546C(SramContext* sramCtx);
-void func_801457CC(struct FileSelectState* fileSelect, SramContext* sramCtx);
-void func_80146580(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum);
-void func_80146628(struct FileSelectState* fileSelect2, SramContext* sramCtx);
+void func_801457CC(struct GameState* gameState, SramContext* sramCtx);
+void Sram_EraseSave(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum);
+void Sram_CopySave(struct FileSelectState* fileSelect2, SramContext* sramCtx);
void Sram_InitSave(struct FileSelectState* fileSelect2, SramContext* sramCtx);
-void func_80146DF8(SramContext* sramCtx);
+void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx);
void Sram_InitSram(struct GameState* gameState, SramContext* sramCtx);
void Sram_Alloc(struct GameState* gameState, SramContext* sramCtx);
void Sram_SaveSpecialEnterClockTown(struct PlayState* play);
void Sram_SaveSpecialNewDay(struct PlayState* play);
-void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages);
-void func_80147020(SramContext* sramCtx);
-void func_80147068(SramContext* sramCtx);
-void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages);
-void func_80147150(SramContext* sramCtx);
-void func_80147198(SramContext* sramCtx);
+void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages);
+void Sram_StartWriteToFlashDefault(SramContext* sramCtx);
+void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx);
+void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages);
+void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx);
+void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx);
-extern s32 D_801C6798[];
+extern u32 gSramSlotOffsets[];
extern u8 gAmmoItems[];
-extern s32 D_801C67C8[];
-extern s32 D_801C67F0[];
-extern s32 D_801C6818[];
-extern s32 D_801C6840[];
-extern s32 D_801C6850[];
+extern s32 gFlashSaveStartPages[];
+extern s32 gFlashSaveNumPages[];
+extern s32 gFlashSpecialSaveNumPages[];
+extern s32 gFlashOwlSaveStartPages[];
+extern s32 gFlashOwlSaveNumPages[];
#endif
diff --git a/include/z64scene.h b/include/z64scene.h
index f8313d2aa..440c04a94 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -6,6 +6,9 @@
#include "z64cutscene.h"
#include "unk.h"
+struct GameState;
+struct PlayState;
+
#define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags))
typedef struct {
@@ -130,8 +133,8 @@ typedef struct {
/* 0x1 */ u8 data1;
/* 0x2 */ UNK_TYPE1 pad2[2];
/* 0x4 */ u8 skyboxId;
- /* 0x5 */ u8 unk5;
- /* 0x6 */ u8 unk6;
+ /* 0x5 */ u8 skyboxConfig;
+ /* 0x6 */ u8 envLightMode;
} SCmdSkyboxSettings; // size = 0x7
typedef struct {
@@ -459,6 +462,16 @@ typedef struct {
/* 0x8 */ u8* textureIndexList;
} AnimatedMatTexCycleParams; // size = 0xC
+typedef struct {
+ /* 0x0 */ s8 segment;
+ /* 0x2 */ s16 type;
+ /* 0x4 */ void* params;
+} AnimatedMaterial; // size = 0x8
+
+// TODO: ZAPD
+typedef RoomShapeCullableEntry PolygonDlist2;
+typedef RoomShapeCullable PolygonType2;
+
typedef struct {
/* 0x000 */ void* spaceStart;
/* 0x004 */ void* spaceEnd;
@@ -469,10 +482,13 @@ typedef struct {
/* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX];
} ObjectContext; // size = 0x958
+#define PATH_INDEX_NONE -1
+#define ADDITIONAL_PATH_INDEX_NONE (u8)-1
+
typedef struct {
- /* 0x0 */ u8 count; // number of points in the path
- /* 0x1 */ u8 unk1;
- /* 0x2 */ s16 unk2;
+ /* 0x0 */ u8 count; // Number of points in the path
+ /* 0x1 */ u8 additionalPathIndex;
+ /* 0x2 */ s16 customValue; // Path specific to help distinguish different paths
/* 0x4 */ Vec3s* points; // Segment Address to the array of points
} Path; // size = 0x8
@@ -584,123 +600,17 @@ typedef enum {
/* 6 */ TINGLE_MAP_MAX
} TingleMapId;
-typedef enum {
- /* 0x00 */ SCENE_20SICHITAI2, // Southern Swamp (Clear)
- /* 0x01 */ SCENE_UNSET_1,
- /* 0x02 */ SCENE_UNSET_2,
- /* 0x03 */ SCENE_UNSET_3,
- /* 0x04 */ SCENE_UNSET_4,
- /* 0x05 */ SCENE_UNSET_5,
- /* 0x06 */ SCENE_UNSET_6,
- /* 0x07 */ SCENE_KAKUSIANA, // Lone Peak Shrine & Grottos
- /* 0x08 */ SCENE_SPOT00, // Cutscene Scene
- /* 0x09 */ SCENE_UNSET_9,
- /* 0x0A */ SCENE_WITCH_SHOP, // Magic Hags' Potion Shop
- /* 0x0B */ SCENE_LAST_BS, // Majora's Lair
- /* 0x0C */ SCENE_HAKASHITA, // Beneath the Graveyard
- /* 0x0D */ SCENE_AYASHIISHOP, // Curiosity Shop
- /* 0x0E */ SCENE_UNSET_E,
- /* 0x0F */ SCENE_UNSET_F,
- /* 0x10 */ SCENE_OMOYA, // Mama's House (Ranch House in PAL) & Barn
- /* 0x11 */ SCENE_BOWLING, // Honey & Darling's Shop
- /* 0x12 */ SCENE_SONCHONOIE, // The Mayor's Residence
- /* 0x13 */ SCENE_IKANA, // Ikana Canyon
- /* 0x14 */ SCENE_KAIZOKU, // Pirates' Fortress
- /* 0x15 */ SCENE_MILK_BAR, // Milk Bar
- /* 0x16 */ SCENE_INISIE_N, // Stone Tower Temple
- /* 0x17 */ SCENE_TAKARAYA, // Treasure Chest Shop
- /* 0x18 */ SCENE_INISIE_R, // Inverted Stone Tower Temple
- /* 0x19 */ SCENE_OKUJOU, // Clock Tower Rooftop
- /* 0x1A */ SCENE_OPENINGDAN, // Before Clock Town
- /* 0x1B */ SCENE_MITURIN, // Woodfall Temple
- /* 0x1C */ SCENE_13HUBUKINOMITI, // Path to Mountain Village
- /* 0x1D */ SCENE_CASTLE, // Ancient Castle of Ikana
- /* 0x1E */ SCENE_DEKUTES, // Deku Scrub Playground
- /* 0x1F */ SCENE_MITURIN_BS, // Odolwa's Lair
- /* 0x20 */ SCENE_SYATEKI_MIZU, // Town Shooting Gallery
- /* 0x21 */ SCENE_HAKUGIN, // Snowhead Temple
- /* 0x22 */ SCENE_ROMANYMAE, // Milk Road
- /* 0x23 */ SCENE_PIRATE, // Pirates' Fortress Interior
- /* 0x24 */ SCENE_SYATEKI_MORI, // Swamp Shooting Gallery
- /* 0x25 */ SCENE_SINKAI, // Pinnacle Rock
- /* 0x26 */ SCENE_YOUSEI_IZUMI, // Fairy's Fountain
- /* 0x27 */ SCENE_KINSTA1, // Swamp Spider House
- /* 0x28 */ SCENE_KINDAN2, // Oceanside Spider House
- /* 0x29 */ SCENE_TENMON_DAI, // Astral Observatory
- /* 0x2A */ SCENE_LAST_DEKU, // Moon Deku Trial
- /* 0x2B */ SCENE_22DEKUCITY, // Deku Palace
- /* 0x2C */ SCENE_KAJIYA, // Mountain Smithy
- /* 0x2D */ SCENE_00KEIKOKU, // Termina Field
- /* 0x2E */ SCENE_POSTHOUSE, // Post Office
- /* 0x2F */ SCENE_LABO, // Marine Research Lab
- /* 0x30 */ SCENE_DANPEI2TEST, // Beneath the Graveyard (Day 3) and Dampe's House
- /* 0x31 */ SCENE_UNSET_31,
- /* 0x32 */ SCENE_16GORON_HOUSE, // Goron Shrine
- /* 0x33 */ SCENE_33ZORACITY, // Zora Hall
- /* 0x34 */ SCENE_8ITEMSHOP, // Trading Post
- /* 0x35 */ SCENE_F01, // Romani Ranch
- /* 0x36 */ SCENE_INISIE_BS, // Twinmold's Lair
- /* 0x37 */ SCENE_30GYOSON, // Great Bay Coast
- /* 0x38 */ SCENE_31MISAKI, // Zora Cape
- /* 0x39 */ SCENE_TAKARAKUJI, // Lottery Shop
- /* 0x3A */ SCENE_UNSET_3A,
- /* 0x3B */ SCENE_TORIDE, // Pirates' Fortress Moat
- /* 0x3C */ SCENE_FISHERMAN, // Fisherman's Hut
- /* 0x3D */ SCENE_GORONSHOP, // Goron Shop
- /* 0x3E */ SCENE_DEKU_KING, // Deku King's Chamber
- /* 0x3F */ SCENE_LAST_GORON, // Moon Goron Trial
- /* 0x40 */ SCENE_24KEMONOMITI, // Road to Southern Swamp
- /* 0x41 */ SCENE_F01_B, // Doggy Racetrack
- /* 0x42 */ SCENE_F01C, // Cucco Shack
- /* 0x43 */ SCENE_BOTI, // Ikana Graveyard
- /* 0x44 */ SCENE_HAKUGIN_BS, // Goht's Lair
- /* 0x45 */ SCENE_20SICHITAI, // Southern Swamp (poison)
- /* 0x46 */ SCENE_21MITURINMAE, // Woodfall
- /* 0x47 */ SCENE_LAST_ZORA, // Moon Zora Trial
- /* 0x48 */ SCENE_11GORONNOSATO2, // Goron Village (spring)
- /* 0x49 */ SCENE_SEA, // Great Bay Temple
- /* 0x4A */ SCENE_35TAKI, // Waterfall Rapids
- /* 0x4B */ SCENE_REDEAD, // Beneath the Well
- /* 0x4C */ SCENE_BANDROOM, // Zora Hall Rooms
- /* 0x4D */ SCENE_11GORONNOSATO, // Goron Village (winter)
- /* 0x4E */ SCENE_GORON_HAKA, // Goron Graveyard
- /* 0x4F */ SCENE_SECOM, // Sakon's Hideout
- /* 0x50 */ SCENE_10YUKIYAMANOMURA, // Mountain Village (winter)
- /* 0x51 */ SCENE_TOUGITES, // Ghost Hut
- /* 0x52 */ SCENE_DANPEI, // Deku Shrine
- /* 0x53 */ SCENE_IKANAMAE, // Road to Ikana
- /* 0x54 */ SCENE_DOUJOU, // Swordsman's School
- /* 0x55 */ SCENE_MUSICHOUSE, // Music Box House
- /* 0x56 */ SCENE_IKNINSIDE, // Igos du Ikana's Lair
- /* 0x57 */ SCENE_MAP_SHOP, // Tourist Information
- /* 0x58 */ SCENE_F40, // Stone Tower
- /* 0x59 */ SCENE_F41, // Inverted Stone Tower
- /* 0x5A */ SCENE_10YUKIYAMANOMURA2, // Mountain Village (spring)
- /* 0x5B */ SCENE_14YUKIDAMANOMITI, // Path to Snowhead
- /* 0x5C */ SCENE_12HAKUGINMAE, // Snowhead
- /* 0x5D */ SCENE_17SETUGEN, // Path to Goron Village (winter)
- /* 0x5E */ SCENE_17SETUGEN2, // Path to Goron Village (spring)
- /* 0x5F */ SCENE_SEA_BS, // Gyorg's Lair
- /* 0x60 */ SCENE_RANDOM, // Secret Shrine
- /* 0x61 */ SCENE_YADOYA, // Stock Pot Inn
- /* 0x62 */ SCENE_KONPEKI_ENT, // Great Bay Cutscene
- /* 0x63 */ SCENE_INSIDETOWER, // Clock Tower Interior
- /* 0x64 */ SCENE_26SARUNOMORI, // Woods of Mystery
- /* 0x65 */ SCENE_LOST_WOODS, // Lost Woods (Intro)
- /* 0x66 */ SCENE_LAST_LINK, // Moon Link Trial
- /* 0x67 */ SCENE_SOUGEN, // The Moon
- /* 0x68 */ SCENE_BOMYA, // Bomb Shop
- /* 0x69 */ SCENE_KYOJINNOMA, // Giants' Chamber
- /* 0x6A */ SCENE_KOEPONARACE, // Gorman Track
- /* 0x6B */ SCENE_GORONRACE, // Goron Racetrack
- /* 0x6C */ SCENE_TOWN, // East Clock Town
- /* 0x6D */ SCENE_ICHIBA, // West Clock Town
- /* 0x6E */ SCENE_BACKTOWN, // North Clock Town
- /* 0x6F */ SCENE_CLOCKTOWER, // South Clock Town
- /* 0x70 */ SCENE_ALLEY, // Laundry Pool
+#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, _restrictionFlags, _persistentCycleFlags) enumValue,
+#define DEFINE_SCENE_UNSET(enumValue) enumValue,
+
+typedef enum SceneId {
+ #include "tables/scene_table.h"
/* 0x71 */ SCENE_MAX
} SceneId;
+#undef DEFINE_SCENE
+#undef DEFINE_SCENE_UNSET
+
typedef enum {
/* 0x00 */ ENTR_SCENE_MAYORS_RESIDENCE,
/* 0x01 */ ENTR_SCENE_MAJORAS_LAIR,
@@ -822,6 +732,8 @@ typedef enum {
*/
#define ENTRANCE(scene, spawn) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4))
+#define ENTR_LOAD_OPENING -1
+
/*
* Entrances used in cutscene destination. Includes scene layer that's immediately applied to `nextCutsceneIndex` and removed.
* See `CutsceneScriptEntry.nextEntrance`
@@ -986,4 +898,89 @@ typedef enum {
#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED
#define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST
+s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
+void Object_InitBank(struct GameState* gameState, ObjectContext* objectCtx);
+void Object_UpdateBank(ObjectContext* objectCtx);
+s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId);
+s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index);
+void Object_LoadAll(ObjectContext* objectCtx);
+void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id);
+void Scene_CommandSpawnList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandActorList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandActorCutsceneCamList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandCollisionHeader(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandRoomList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandEntranceList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandSpecialFiles(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandRoomBehavior(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandMesh(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandObjectList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandLightList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandPathList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandTransiActorList(struct PlayState* play, SceneCmd* cmd);
+void Scene_ResetTransiActorList(GameState* gameState, TransitionActorList* transitionActors);
+void Scene_CommandEnvLightSettings(struct PlayState* play, SceneCmd* cmd);
+void Scene_LoadAreaTextures(struct PlayState* play, s32 fileIndex);
+void Scene_CommandSkyboxSettings(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandSkyboxDisables(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandTimeSettings(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandWindSettings(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandExitList(struct PlayState* play, SceneCmd* cmd);
+void Scene_Command09(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandSoundSettings(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandEchoSetting(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandAltHeaderList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandCutsceneScriptList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandCutsceneList(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandMiniMap(struct PlayState* play, SceneCmd* cmd);
+void Scene_Command1D(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandMiniMapCompassInfo(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandSetRegionVisitedFlag(struct PlayState* play, SceneCmd* cmd);
+void Scene_CommandAnimatedMaterials(struct PlayState* play, SceneCmd* cmd);
+void Scene_SetExitFade(struct PlayState* play);
+s32 Scene_ExecuteCommands(struct PlayState* play, SceneCmd* sceneCmd);
+u16 Entrance_Create(s32 scene, s32 spawn, s32 layer);
+u16 Entrance_CreateFromSpawn(s32 spawn);
+void Scene_Draw(struct PlayState* play);
+void Scene_DrawConfigDefault(struct PlayState* play);
+Gfx* AnimatedMat_TexScroll(struct PlayState* play, AnimatedMatTexScrollParams* params);
+void AnimatedMat_DrawTexScroll(struct PlayState* play, s32 segment, void* params);
+Gfx* AnimatedMat_TwoLayerTexScroll(struct PlayState* play, AnimatedMatTexScrollParams* params);
+void AnimatedMat_DrawTwoTexScroll(struct PlayState* play, s32 segment, void* params);
+void AnimatedMat_SetColor(struct PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor);
+void AnimatedMat_DrawColor(struct PlayState* play, s32 segment, void* params);
+s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm);
+void AnimatedMat_DrawColorLerp(struct PlayState* play, s32 segment, void* params);
+f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp);
+u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp);
+void AnimatedMat_DrawColorNonLinearInterp(struct PlayState* play, s32 segment, void* params);
+void AnimatedMat_DrawTexCycle(struct PlayState* play, s32 segment, void* params);
+void AnimatedMat_DrawMain(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags);
+void AnimatedMat_Draw(struct PlayState* play, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawOpa(struct PlayState* play, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawXlu(struct PlayState* play, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawAlpha(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawAlphaOpa(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawAlphaXlu(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawStep(struct PlayState* play, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawStepOpa(struct PlayState* play, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawStepXlu(struct PlayState* play, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawAlphaStep(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void AnimatedMat_DrawAlphaStepOpa(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void AnimatedMat_DrawAlphaStepXlu(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void Scene_DrawConfigMatAnim(struct PlayState* play);
+void Scene_DrawConfig3(struct PlayState* play);
+void Scene_DrawConfig4(struct PlayState* play);
+void Scene_DrawConfigDoNothing(struct PlayState* play);
+void Scene_SetRenderModeXlu(struct PlayState* play, s32 index, u32 flags);
+void Scene_SetCullFlag(struct PlayState* play, s32 index, u32 flags);
+void Scene_DrawConfig5(struct PlayState* play);
+void Scene_DrawConfigMatAnimManualStep(struct PlayState* play);
+void Scene_DrawConfigGreatBayTemple(struct PlayState* play);
+EntranceTableEntry* Entrance_GetTableEntry(u16 entrance);
+s32 Entrance_GetSceneId(u16 entrance);
+s32 Entrance_GetSceneIdAbsolute(u16 entrance);
+s32 Entrance_GetSpawnNum(u16 entrance);
+s32 Entrance_GetTransitionFlags(u16 entrance);
+
#endif
diff --git a/include/z64schedule.h b/include/z64schedule.h
index f3a703f3c..07a942e90 100644
--- a/include/z64schedule.h
+++ b/include/z64schedule.h
@@ -50,13 +50,13 @@ typedef enum {
/* 0x0F */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S, // Branches if the current time is less than the command time, short range branch
/* 0x10 */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L, // Branches if the current time is less than the command time, long range branch
/* 0x11 */ SCHEDULE_CMD_ID_BRANCH_S, // Always branch, short range branch
- /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L, // Always branch, long range branch
+ /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L // Always branch, long range branch
} ScheduleCommandId;
typedef enum {
/* 0 */ SCHEDULE_CHECK_MISC_ROOM_KEY,
/* 1 */ SCHEDULE_CHECK_MISC_LETTER_TO_KAFEI,
- /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI,
+ /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI
} ScheduleCheckMisc;
typedef struct {
diff --git a/include/z64sound_source.h b/include/z64sound_source.h
new file mode 100644
index 000000000..b841f8326
--- /dev/null
+++ b/include/z64sound_source.h
@@ -0,0 +1,24 @@
+#ifndef Z64SOUND_SOURCE_H
+#define Z64SOUND_SOURCE_H
+
+#include "ultra64.h"
+#include "z64math.h"
+
+struct PlayState;
+
+typedef struct {
+ /* 0x00 */ u8 countdown;
+ /* 0x01 */ u8 playSfxEachFrame;
+ /* 0x02 */ u16 sfxId;
+ /* 0x04 */ Vec3f worldPos;
+ /* 0x10 */ Vec3f projectedPos;
+} SoundSource; // size = 0x1C
+
+#define SOUND_SOURCE_COUNT 16
+
+void SoundSource_InitAll(struct PlayState* play);
+void SoundSource_UpdateAll(struct PlayState* play);
+void SoundSource_PlaySfxAtFixedWorldPos(struct PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId);
+void SoundSource_PlaySfxEachFrameAtFixedWorldPos(struct PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId);
+
+#endif
diff --git a/include/z64subs.h b/include/z64subs.h
index ad2b7044f..768f81079 100644
--- a/include/z64subs.h
+++ b/include/z64subs.h
@@ -108,7 +108,7 @@ s32 SubS_ChangeAnimationByInfoS(SkelAnime* skelAnime, AnimationInfoS* animationI
s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex);
-Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex);
+Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex);
s32 SubS_WeightPathing_ComputePoint(Path* path, s32 waypoint, Vec3f* point, f32 progress, s32 direction);
s32 SubS_WeightPathing_Move(Actor* actor, Path* path, s32* waypoint, f32* progress, s32 direction, s32 returnStart);
@@ -126,7 +126,7 @@ s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trac
s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB);
-Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 max);
+Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 pathIndexNone);
s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst);
s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq);
s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep);
diff --git a/include/z64thread.h b/include/z64thread.h
new file mode 100644
index 000000000..c0baba84f
--- /dev/null
+++ b/include/z64thread.h
@@ -0,0 +1,24 @@
+#ifndef Z64THREAD_H
+#define Z64THREAD_H
+
+#define Z_THREAD_ID_IDLE 1
+#define Z_THREAD_ID_SLOWLY 2
+#define Z_THREAD_ID_MAIN 3
+#define Z_THREAD_ID_GRAPH 4
+#define Z_THREAD_ID_SCHED 5
+#define Z_THREAD_ID_FLASHROM 13
+#define Z_THREAD_ID_DMAMGR 18
+#define Z_THREAD_ID_IRQMGR 19
+
+#define Z_PRIORITY_SLOWLY 5
+#define Z_PRIORITY_GRAPH 9
+#define Z_PRIORITY_AUDIOMGR 11
+#define Z_PRIORITY_IDLE 12
+#define Z_PRIORITY_MAIN 12
+#define Z_PRIORITY_FLASHROM 13
+#define Z_PRIORITY_PADMGR 15
+#define Z_PRIORITY_SCHED 16
+#define Z_PRIORITY_DMAMGR 17
+#define Z_PRIORITY_IRQMGR 18
+
+#endif
diff --git a/include/z64transition.h b/include/z64transition.h
index e223d9b58..fe6027a9f 100644
--- a/include/z64transition.h
+++ b/include/z64transition.h
@@ -68,7 +68,7 @@ typedef struct {
typedef enum {
/* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1,
- /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN,
+ /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN
} TransitionInstanceType;
#define TRANS_INSTANCE_TYPE_FADE_FLASH 3
diff --git a/include/z_fireobj.h b/include/z_fireobj.h
index 7bd58d80a..6fe0639bc 100644
--- a/include/z_fireobj.h
+++ b/include/z_fireobj.h
@@ -61,7 +61,7 @@ typedef enum FireState {
/* 0 */ FIRE_STATE_GROWING,
/* 1 */ FIRE_STATE_SHRINKING,
/* 2 */ FIRE_STATE_FULLY_LIT,
- /* 3 */ FIRE_STATE_NOT_LIT,
+ /* 3 */ FIRE_STATE_NOT_LIT
} FireState;
#define FIRE_FLAG_WATER_EXTINGUISHABLE (1 << 0)
diff --git a/include/z_prenmi.h b/include/z_prenmi.h
index 04c3f5f16..7be3eb16f 100644
--- a/include/z_prenmi.h
+++ b/include/z_prenmi.h
@@ -1,15 +1,15 @@
#ifndef Z64PRENMI_H
#define Z64PRENMI_H
-#include "global.h"
-
-void PreNMI_Destroy(GameState* thisx);
-void PreNMI_Init(GameState* thisx);
+#include "z64game.h"
typedef struct {
/* 0x00 */ GameState state;
/* 0xA4 */ u32 timer;
- /* 0xA8 */ UNK_TYPE4 unkA8;
+ /* 0xA8 */ s32 unk_A8;
} PreNMIState; // size = 0xAC
+void PreNMI_Destroy(GameState* thisx);
+void PreNMI_Init(GameState* thisx);
+
#endif
diff --git a/include/z_title_setup.h b/include/z_title_setup.h
index 3b299af97..1bd7c7d7d 100644
--- a/include/z_title_setup.h
+++ b/include/z_title_setup.h
@@ -1,13 +1,13 @@
#ifndef Z64TITLE_SETUP_H
#define Z64TITLE_SETUP_H
-#include "global.h"
-
-void Setup_Destroy(GameState* gameState);
-void Setup_Init(GameState* thisx);
+#include "z64game.h"
typedef struct {
/* 0x00 */ GameState state;
} SetupState; // size = 0xA4
+void Setup_Destroy(GameState* gameState);
+void Setup_Init(GameState* thisx);
+
#endif
diff --git a/spec b/spec
index 4b8481a73..8d23d42dd 100644
--- a/spec
+++ b/spec
@@ -36,7 +36,7 @@ beginseg
include "build/data/boot/gfxprint.data.o"
include "build/src/boot_O2/mtxuty-cvt.o"
include "build/src/boot_O2/assert.o"
- include "build/src/boot_O2/boot_800862E0.o"
+ include "build/src/boot_O2/system_heap.o"
include "build/src/boot_O2/padsetup.o"
include "build/src/boot_O2/boot_80086760.o"
include "build/asm/boot/fp.text.o"
@@ -77,7 +77,6 @@ beginseg
include "build/src/libultra/os/createthread.o"
include "build/src/libultra/io/contreaddata.o"
include "build/src/libultra/voice/voicegetreaddata.o"
- include "build/data/boot/voicegetreaddata.bss.o"
include "build/src/libultra/os/virtualtophysical.o"
include "build/asm/boot/getsr.text.o"
include "build/asm/boot/setsr.text.o"
@@ -155,7 +154,6 @@ beginseg
include "build/src/libultra/gu/rotate.o"
include "build/src/libultra/os/setglobalintmask.o"
include "build/src/libultra/voice/voiceinit.o"
- include "build/data/boot/voiceinit.data.o"
include "build/src/libultra/io/contchannelreset.o"
include "build/src/libultra/voice/voicesetadconverter.o"
include "build/src/libultra/io/aisetfreq.o"
@@ -278,15 +276,17 @@ beginseg
endseg
beginseg
- name "icon_item_static_old"
+ name "icon_item_static_syms"
romalign 0x1000
- include "build/baserom/icon_item_static_old.o"
+ include "build/assets/archives/icon_item_static/icon_item_static_yar.symbols.o"
+ number 8
endseg
beginseg
- name "icon_item_24_static_old"
+ name "icon_item_24_static_syms"
romalign 0x1000
- include "build/baserom/icon_item_24_static_old.o"
+ include "build/assets/archives/icon_item_24_static/icon_item_24_static_yar.symbols.o"
+ number 9
endseg
beginseg
@@ -325,54 +325,60 @@ beginseg
name "icon_item_vtx_static"
compress
romalign 0x1000
- include "build/baserom/icon_item_vtx_static.o"
+ include "build/assets/interface/icon_item_vtx_static/icon_item_vtx_static.o"
+ number 11
endseg
beginseg
name "map_i_static"
- include "build/baserom/map_i_static.o"
+ include "build/assets/archives/map_i_static/map_i_static.yar.o"
endseg
beginseg
name "map_grand_static"
- include "build/baserom/map_grand_static.o"
+ include "build/assets/archives/map_grand_static/map_grand_static.yar.o"
endseg
beginseg
name "item_name_static"
- include "build/baserom/item_name_static.o"
+ include "build/assets/archives/item_name_static/item_name_static.yar.o"
endseg
beginseg
name "map_name_static"
- include "build/baserom/map_name_static.o"
+ include "build/assets/archives/map_name_static/map_name_static.yar.o"
endseg
beginseg
- name "icon_item_static_test"
- include "build/baserom/icon_item_static_test.o"
+ name "icon_item_static_yar"
+ include "build/assets/archives/icon_item_static/icon_item_static_yar.yar.o"
+ number 8
endseg
beginseg
- name "icon_item_24_static_test"
- include "build/baserom/icon_item_24_static_test.o"
+ name "icon_item_24_static_yar"
+ include "build/assets/archives/icon_item_24_static/icon_item_24_static_yar.yar.o"
+ number 9
endseg
beginseg
- name "schedule_dma_static_old"
- include "build/baserom/schedule_dma_static_old.o"
+ name "schedule_dma_static_syms"
+ include "build/assets/archives/schedule_dma_static/schedule_dma_static_yar.symbols.o"
+ number 7
endseg
beginseg
- name "schedule_dma_static_test"
+ name "schedule_dma_static_yar"
increment 0x1000
- include "build/baserom/schedule_dma_static_test.o"
+ include "build/assets/archives/schedule_dma_static/schedule_dma_static_yar.yar.o"
+ number 7
endseg
beginseg
name "schedule_static"
compress
- include "build/baserom/schedule_static.o"
+ include "build/assets/interface/schedule_static/schedule_static.o"
+ number 8
endseg
beginseg
@@ -473,7 +479,6 @@ beginseg
include "build/src/code/z_fireobj.o"
include "build/src/code/z_game_dlftbls.o"
include "build/src/code/z_horse.o"
- include "build/data/code/z_horse.data.o"
include "build/src/code/z_jpeg.o"
include "build/src/code/z_kaleido_setup.o"
include "build/src/code/z_kanfont.o"
@@ -522,8 +527,7 @@ beginseg
include "build/src/code/z_rumble.o"
include "build/src/code/z_view.o"
include "build/src/code/z_vimode.o"
- include "build/src/code/code_80140CE0.o"
- include "build/data/code/code_80140CE0.data.o"
+ include "build/src/code/z_viscvg.o"
include "build/src/code/code_80140E80.o"
include "build/src/code/z_vismono.o"
include "build/src/code/z_viszbuf.o"
@@ -549,7 +553,6 @@ beginseg
include "build/src/code/z_overlay.o"
include "build/src/code/z_play.o"
include "build/src/code/z_play_hireso.o"
- include "build/data/code/z_play_hireso.data.o"
include "build/src/code/PreRender.o"
include "build/data/code/PreRender.bss.o"
include "build/src/code/TwoHeadGfxArena.o"
@@ -573,7 +576,6 @@ beginseg
include "build/data/code/speed_meter.bss.o"
include "build/src/code/su_mtx.o"
include "build/src/code/sys_cfb.o"
- include "build/data/code/sys_cfb.bss.o"
include "build/src/code/sys_cmpdma.o"
include "build/src/code/sys_initial_check.o"
include "build/src/code/sys_math.o"
@@ -589,7 +591,6 @@ beginseg
include "build/src/code/c_keyframe.o"
include "build/src/code/sys_slowly.o"
include "build/src/code/sys_flashrom.o"
- include "build/data/code/sys_flashrom.bss.o"
include "build/asm/code/code_80185F90.text.o" // handwritten
include "build/src/libultra/flash/osFlash.o"
pad_text
@@ -667,12 +668,15 @@ endseg
beginseg
name "ovl_file_choose"
compress
+ include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.o"
+ include "build/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.o"
include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.o"
- include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.o"
include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.o"
- include "build/data/ovl_file_choose/ovl_file_choose.data.o"
- include "build/data/ovl_file_choose/ovl_file_choose.bss.o"
- include "build/data/ovl_file_choose/ovl_file_choose.reloc.o"
+ #ifdef NON_MATCHING
+ include "build/src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc.o"
+ #else
+ include "build/data/ovl_file_choose/ovl_file_choose.reloc.o"
+ #endif
endseg
beginseg
@@ -692,17 +696,14 @@ beginseg
include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.o"
include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.o"
include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.o"
- include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.bss.o"
- include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.reloc.o"
+ include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/ovl_kaleido_scope_reloc.o"
endseg
beginseg
name "ovl_player_actor"
compress
include "build/src/overlays/actors/ovl_player_actor/z_player.o"
- include "build/data/ovl_player_actor/ovl_player_actor.data.o"
- include "build/data/ovl_player_actor/ovl_player_actor.bss.o"
- include "build/data/ovl_player_actor/ovl_player_actor.reloc.o"
+ include "build/src/overlays/actors/ovl_player_actor/ovl_player_actor_reloc.o"
endseg
beginseg
@@ -997,8 +998,7 @@ beginseg
name "ovl_Item_B_Heart"
compress
include "build/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.o"
- include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.data.o"
- include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.reloc.o"
+ include "build/src/overlays/actors/ovl_Item_B_Heart/ovl_Item_B_Heart_reloc.o"
endseg
beginseg
@@ -1033,8 +1033,7 @@ beginseg
name "ovl_Bg_Keikoku_Spr"
compress
include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.o"
- include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.data.o"
- include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr_reloc.o"
endseg
beginseg
@@ -1114,22 +1113,14 @@ beginseg
name "ovl_En_Sw"
compress
include "build/src/overlays/actors/ovl_En_Sw/z_en_sw.o"
- #ifdef NON_MATCHING
- include "build/src/overlays/actors/ovl_En_Sw/ovl_En_Sw_reloc.o"
- #else
- include "build/data/ovl_En_Sw/ovl_En_Sw.reloc.o"
- #endif
+ include "build/src/overlays/actors/ovl_En_Sw/ovl_En_Sw_reloc.o"
endseg
beginseg
name "ovl_Object_Kankyo"
compress
include "build/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Object_Kankyo/ovl_Object_Kankyo_reloc.o"
-#else
- include "build/data/ovl_Object_Kankyo/ovl_Object_Kankyo.reloc.o"
-#endif
endseg
beginseg
@@ -1529,11 +1520,7 @@ beginseg
name "ovl_En_Kanban"
compress
include "build/src/overlays/actors/ovl_En_Kanban/z_en_kanban.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_En_Kanban/ovl_En_Kanban_reloc.o"
-#else
- include "build/data/ovl_En_Kanban/ovl_En_Kanban.reloc.o"
-#endif
endseg
beginseg
@@ -1653,9 +1640,7 @@ beginseg
name "ovl_Bg_F40_Swlift"
compress
include "build/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.o"
- include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.data.o"
- include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.bss.o"
- include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift_reloc.o"
endseg
beginseg
@@ -2418,11 +2403,7 @@ beginseg
name "ovl_En_Go"
compress
include "build/src/overlays/actors/ovl_En_Go/z_en_go.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_En_Go/ovl_En_Go_reloc.o"
-#else
- include "build/data/ovl_En_Go/ovl_En_Go.reloc.o"
-#endif
endseg
beginseg
@@ -3201,8 +3182,7 @@ beginseg
name "ovl_fbdemo_wipe3"
compress
include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.o"
- include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.data.o"
- include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.reloc.o"
+ include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3_reloc.o"
endseg
beginseg
@@ -3503,8 +3483,7 @@ beginseg
name "ovl_En_Snowwd"
compress
include "build/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.o"
- include "build/data/ovl_En_Snowwd/ovl_En_Snowwd.data.o"
- include "build/data/ovl_En_Snowwd/ovl_En_Snowwd.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Snowwd/ovl_En_Snowwd_reloc.o"
endseg
beginseg
@@ -3589,8 +3568,7 @@ beginseg
name "ovl_Bg_Tobira01"
compress
include "build/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.o"
- include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.data.o"
- include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Tobira01/ovl_Bg_Tobira01_reloc.o"
endseg
beginseg
@@ -4626,8 +4604,7 @@ beginseg
name "ovl_Eff_Stk"
compress
include "build/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.o"
- include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.data.o"
- include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.reloc.o"
+ include "build/src/overlays/actors/ovl_Eff_Stk/ovl_Eff_Stk_reloc.o"
endseg
beginseg
@@ -4860,8 +4837,7 @@ beginseg
name "ovl_Demo_Moonend"
compress
include "build/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.o"
- include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.data.o"
- include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.reloc.o"
+ include "build/src/overlays/actors/ovl_Demo_Moonend/ovl_Demo_Moonend_reloc.o"
endseg
beginseg
@@ -8850,7 +8826,8 @@ beginseg
name "title_static"
compress
romalign 0x1000
- include "build/baserom/title_static.o"
+ include "build/assets/misc/title_static/title_static.o"
+ number 1
endseg
beginseg
diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c
index 287149c91..40c457cb3 100644
--- a/src/audio/code_8019AF00.c
+++ b/src/audio/code_8019AF00.c
@@ -9,7 +9,7 @@ typedef struct {
/* 0x0 */ Vec3f* pos;
/* 0x4 */ f32 freqScale;
/* 0x8 */ s8 reverbAdd;
-} SfxSettings; // size = 0x9
+} SfxSettings; // size = 0xC
typedef struct {
/* 0x0 */ f32 volume;
@@ -20,7 +20,7 @@ typedef struct {
/* 0xB */ u8 filter;
/* 0xC */ u8 combFilterGain;
/* 0xD */ u8 zVolume;
-} SfxChannelState; // size = 0xE
+} SfxChannelState; // size = 0x10
typedef enum {
/* 0x0 */ SFX_CHANNEL_PLAYER0, // SfxPlayerBank
@@ -50,7 +50,7 @@ typedef enum {
/* 0x4 */ SEQ_PLAYER_IO_PORT_4,
/* 0x5 */ SEQ_PLAYER_IO_PORT_5,
/* 0x6 */ SEQ_PLAYER_IO_PORT_6,
- /* 0x7 */ SEQ_PLAYER_IO_PORT_7,
+ /* 0x7 */ SEQ_PLAYER_IO_PORT_7
} SeqPlayerIOPort;
typedef struct {
@@ -2543,8 +2543,8 @@ void AudioOcarina_CheckSongsWithoutMusicStaff(void) {
if ((u32)sOcarinaAvailableSongFlags & (1 << songIndex)) {
// Loops through all possible starting indices?
// Loops through the notes of the song?
- for (j = 0, k = 0; j < gOcarinaSongButtons[songIndex].numButtons && k == 0 &&
- sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons;) {
+ for (j = 0, k = 0; (j < gOcarinaSongButtons[songIndex].numButtons) && (k == 0) &&
+ (sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons);) {
pitch = sCurOcarinaSongWithoutMusicStaff[(sOcarinaWithoutMusicStaffPos -
gOcarinaSongButtons[songIndex].numButtons) +
@@ -2953,7 +2953,7 @@ void AudioOcarina_SetRecordingSong(u8 isRecordingComplete) {
i = sRecordSongPos;
pitch = OCARINA_PITCH_NONE;
- while (i != 0 && pitch == OCARINA_PITCH_NONE) {
+ while ((i != 0) && (pitch == OCARINA_PITCH_NONE)) {
i--;
pitch = recordedSong[i].pitch;
}
diff --git a/src/audio/lib/effects.c b/src/audio/lib/effects.c
index feddf73ca..580b7fd22 100644
--- a/src/audio/lib/effects.c
+++ b/src/audio/lib/effects.c
@@ -10,7 +10,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_SOFTEN)) {
channelVolume = channel->seqPlayer->muteVolumeScale * channelVolume;
}
- channel->appliedVolume = channelVolume * channelVolume;
+ channel->appliedVolume = SQ(channelVolume);
}
if (channel->changes.s.pan) {
@@ -26,7 +26,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca
for (i = 0; i < ARRAY_COUNT(channel->layers); i++) {
SequenceLayer* layer = channel->layers[i];
- if (layer != NULL && layer->enabled && layer->note != NULL) {
+ if ((layer != NULL) && layer->enabled && (layer->note != NULL)) {
if (layer->notePropertiesNeedInit) {
layer->noteFreqScale = layer->freqScale * chanFreqScale;
layer->noteVelocity = layer->velocitySquare2 * channel->appliedVolume;
diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c
index 0a64c0d1b..7a7cd5807 100644
--- a/src/audio/lib/heap.c
+++ b/src/audio/lib/heap.c
@@ -1303,13 +1303,13 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if (((sampleBankId1 != 0xFF) && (entry->sampleBankId == sampleBankId1)) ||
- ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || entry->sampleBankId == 0 ||
- entry->sampleBankId == 0xFE) {
- if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) != NULL) {
- if (1) {}
- if (AudioLoad_IsFontLoadComplete(fontId) != 0) {
- AudioHeap_UnapplySampleCacheForFont(entry, fontId);
- }
+ ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || (entry->sampleBankId == 0) ||
+ (entry->sampleBankId == 0xFE)) {
+ if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) == NULL) {
+ continue;
+ }
+ if (AudioLoad_IsFontLoadComplete(fontId) != 0) {
+ AudioHeap_UnapplySampleCacheForFont(entry, fontId);
}
}
}
@@ -1369,7 +1369,7 @@ void AudioHeap_DiscardSampleCaches(void) {
if ((sampleBankId1 == 0xFF) && (sampleBankId2 == 0xFF)) {
continue;
}
- if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL ||
+ if ((AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL) ||
!AudioLoad_IsFontLoadComplete(fontId)) {
continue;
}
@@ -1386,14 +1386,14 @@ void AudioHeap_DiscardSampleCaches(void) {
}
typedef struct {
- uintptr_t oldAddr;
- uintptr_t newAddr;
- size_t size;
- u8 newMedium;
-} StorageChange;
+ /* 0x0 */ uintptr_t oldAddr;
+ /* 0x4 */ uintptr_t newAddr;
+ /* 0x8 */ size_t size;
+ /* 0xC */ u8 newMedium;
+} StorageChange; // size = 0x10
void AudioHeap_ChangeStorage(StorageChange* change, Sample* sample) {
- if (sample != NULL && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) &&
+ if ((sample != NULL) && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) &&
((sample->medium == MEDIUM_RAM) || (D_801FD120 != 0))) {
uintptr_t startAddr = change->oldAddr;
uintptr_t endAddr = change->oldAddr + change->size;
diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c
index 3a4f1c1e0..af9de1cd1 100644
--- a/src/audio/lib/load.c
+++ b/src/audio/lib/load.c
@@ -80,10 +80,10 @@ typedef enum {
#define OS_MESG_PRI_HIGH 1
typedef struct {
- u16 numInstruments;
- u16 numDrums;
- u16 numSfx;
-} UnloadedFonts;
+ /* 0x0 */ u16 numInstruments;
+ /* 0x2 */ u16 numDrums;
+ /* 0x4 */ u16 numSfx;
+} UnloadedFonts; // size = 0x6
OSMesgQueue sScriptLoadQueue;
OSMesg sScriptLoadMesgBuf[0x10];
@@ -138,13 +138,13 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
s32 bufferPos;
u32 i;
- if (arg2 != 0 || *dmaIndexRef >= gAudioCtx.sampleDmaListSize1) {
+ if ((arg2 != 0) || (*dmaIndexRef >= gAudioCtx.sampleDmaListSize1)) {
for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) {
dma = &gAudioCtx.sampleDmas[i];
bufferPos = devAddr - dma->devAddr;
- if (0 <= bufferPos && ((u32)bufferPos <= dma->size - size)) {
+ if ((0 <= bufferPos) && ((u32)bufferPos <= (dma->size - size))) {
// We already have a DMA request for this memory range.
- if (dma->ttl == 0 && gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos) {
+ if ((dma->ttl == 0) && (gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos)) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue2RdPos) {
@@ -884,7 +884,6 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
// The first u32 in fontData is an offset to a list of offsets to the drums
soundListOffset = fontData[0];
- if (1) {}
// If the soundFont has drums
if ((soundListOffset != 0) && (numDrums != 0)) {
@@ -897,20 +896,23 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
soundOffset = ((Drum**)fontData[0])[i];
// Some drum data entries are empty, represented by an offset of 0 in the list of drum offsets
- if (soundOffset != 0) {
- soundOffset = RELOC_TO_RAM(soundOffset);
- ((Drum**)fontData[0])[i] = drum = soundOffset;
-
- // The drum may be in the list multiple times and already relocated
- if (!drum->isRelocated) {
- AudioLoad_RelocateSample(&drum->tunedSample, fontDataStartAddr, sampleBankReloc);
-
- soundOffset = drum->envelope;
- drum->envelope = RELOC_TO_RAM(soundOffset);
-
- drum->isRelocated = true;
- }
+ if (soundOffset == 0) {
+ continue;
}
+ soundOffset = RELOC_TO_RAM(soundOffset);
+ ((Drum**)fontData[0])[i] = drum = soundOffset;
+
+ // The drum may be in the list multiple times and already relocated
+ if (drum->isRelocated) {
+ continue;
+ }
+
+ AudioLoad_RelocateSample(&drum->tunedSample, fontDataStartAddr, sampleBankReloc);
+
+ soundOffset = drum->envelope;
+ drum->envelope = RELOC_TO_RAM(soundOffset);
+
+ drum->isRelocated = true;
}
}
@@ -918,7 +920,6 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
// The second u32 in fontData is an offset to the first sound effect entry
soundListOffset = fontData[1];
- if (1) {}
// If the soundFont has sound effects
if ((soundListOffset != 0) && (numSfx != 0)) {
@@ -932,9 +933,11 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
soundEffect = (SoundEffect*)soundOffset;
// Check for NULL (note: the pointer is guaranteed to be in fontData and can never be NULL)
- if ((soundEffect != NULL) && (soundEffect->tunedSample.sample != NULL)) {
- AudioLoad_RelocateSample(&soundEffect->tunedSample, fontDataStartAddr, sampleBankReloc);
+ if ((soundEffect == NULL) || (soundEffect->tunedSample.sample == NULL)) {
+ continue;
}
+
+ AudioLoad_RelocateSample(&soundEffect->tunedSample, fontDataStartAddr, sampleBankReloc);
}
}
@@ -1643,9 +1646,11 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
case SEQUENCE_TABLE:
AudioLoad_SetSeqLoadStatus(ASYNC_ID(retMsg), ASYNC_STATUS(retMsg));
break;
+
case SAMPLE_TABLE:
AudioLoad_SetSampleFontLoadStatusAndApplyCaches(ASYNC_ID(retMsg), ASYNC_STATUS(retMsg));
break;
+
case FONT_TABLE:
fontId = ASYNC_ID(retMsg);
sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
@@ -1659,6 +1664,9 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
AudioLoad_SetFontLoadStatus(fontId, ASYNC_STATUS(retMsg));
AudioLoad_RelocateFontAndPreloadSamples(fontId, asyncLoad->ramAddr, &sampleBankReloc, true);
break;
+
+ default:
+ break;
}
doneMsg = asyncLoad->retMsg;
@@ -1905,7 +1913,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
}
gAudioCtx.numUsedSamples = 0;
- if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) {
topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
@@ -2002,24 +2010,29 @@ s32 AudioLoad_GetSamplesForFont(s32 fontId, Sample** sampleSet) {
for (i = 0; i < numDrums; i++) {
Drum* drum = AudioPlayback_GetDrum(fontId, i);
- if (1) {}
- if (drum != NULL) {
- numSamples = AudioLoad_AddToSampleSet(drum->tunedSample.sample, numSamples, sampleSet);
+ if (drum == NULL) {
+ continue;
}
+
+ numSamples = AudioLoad_AddToSampleSet(drum->tunedSample.sample, numSamples, sampleSet);
}
for (i = 0; i < numInstruments; i++) {
Instrument* instrument = AudioPlayback_GetInstrumentInner(fontId, i);
- if (instrument != NULL) {
- if (instrument->normalRangeLo != 0) {
- numSamples = AudioLoad_AddToSampleSet(instrument->lowPitchTunedSample.sample, numSamples, sampleSet);
- }
- if (instrument->normalRangeHi != 0x7F) {
- numSamples = AudioLoad_AddToSampleSet(instrument->highPitchTunedSample.sample, numSamples, sampleSet);
- }
- numSamples = AudioLoad_AddToSampleSet(instrument->normalPitchTunedSample.sample, numSamples, sampleSet);
+ if (instrument == NULL) {
+ continue;
}
+
+ if (instrument->normalRangeLo != 0) {
+ numSamples = AudioLoad_AddToSampleSet(instrument->lowPitchTunedSample.sample, numSamples, sampleSet);
+ }
+
+ if (instrument->normalRangeHi != 0x7F) {
+ numSamples = AudioLoad_AddToSampleSet(instrument->highPitchTunedSample.sample, numSamples, sampleSet);
+ }
+
+ numSamples = AudioLoad_AddToSampleSet(instrument->normalPitchTunedSample.sample, numSamples, sampleSet);
}
// Should really also process sfx, but this method is never called
@@ -2160,7 +2173,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
}
gAudioCtx.numUsedSamples = 0;
- if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) {
topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
diff --git a/src/audio/lib/playback.c b/src/audio/lib/playback.c
index deb6e82b9..a626645c5 100644
--- a/src/audio/lib/playback.c
+++ b/src/audio/lib/playback.c
@@ -83,6 +83,9 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
sampleState->bitField0.strongRight = stereoData.strongRight ^ strongRight;
sampleState->bitField0.strongLeft = stereoData.strongLeft ^ strongLeft;
break;
+
+ default:
+ break;
}
} else if (gAudioCtx.soundMode == SOUNDMODE_MONO) {
@@ -597,7 +600,7 @@ s32 AudioPlayback_BuildSyntheticWave(Note* note, SequenceLayer* layer, s32 waveI
}
freqScale = layer->freqScale;
- if (layer->portamento.mode != 0 && 0.0f < layer->portamento.extent) {
+ if ((layer->portamento.mode != 0) && (0.0f < layer->portamento.extent)) {
freqScale *= (layer->portamento.extent + 1.0f);
}
@@ -906,7 +909,7 @@ Note* AudioPlayback_AllocNoteFromActive(NotePool* pool, SequenceLayer* layer) {
aPriority = aNote->playbackState.priority;
}
- if (rNote == NULL && aNote == NULL) {
+ if ((rNote == NULL) && (aNote == NULL)) {
return NULL;
}
@@ -928,8 +931,8 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
if (policy & 1) {
note = layer->note;
- if (note != NULL && note->playbackState.prevParentLayer == layer &&
- note->playbackState.wantedParentLayer == NO_LAYER) {
+ if ((note != NULL) && (note->playbackState.prevParentLayer == layer) &&
+ (note->playbackState.wantedParentLayer == NO_LAYER)) {
AudioPlayback_NoteReleaseAndTakeOwnership(note, layer);
AudioPlayback_AudioListRemove(¬e->listItem);
AudioScript_AudioListPushBack(¬e->listItem.pool->releasing, ¬e->listItem);
diff --git a/src/boot_O2/__osMalloc.c b/src/boot_O2/__osMalloc.c
index 24fa6d39e..71a5a5ba3 100644
--- a/src/boot_O2/__osMalloc.c
+++ b/src/boot_O2/__osMalloc.c
@@ -275,7 +275,7 @@ void __osFree(Arena* arena, void* ptr) {
node = (ArenaNode*)((uintptr_t)ptr - sizeof(ArenaNode));
- if (ptr != NULL && node->magic == NODE_MAGIC && !node->isFree) {
+ if ((ptr != NULL) && (node->magic == NODE_MAGIC) && !node->isFree) {
next = node->next;
prev = node->prev;
node->isFree = true;
@@ -297,7 +297,7 @@ void __osFree(Arena* arena, void* ptr) {
// Checks if the previous node is contiguous to the current node and if it isn't currently allocated. Then merge
// the two nodes into one.
- if (prev != NULL && prev->isFree && (uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size) {
+ if ((prev != NULL) && prev->isFree && ((uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size)) {
if (next != NULL) {
next->prev = prev;
}
diff --git a/src/boot_O2/boot_80086760.c b/src/boot_O2/boot_80086760.c
index 398a1e41a..cb77bed50 100644
--- a/src/boot_O2/boot_80086760.c
+++ b/src/boot_O2/boot_80086760.c
@@ -5,57 +5,44 @@
#include "global.h"
#include "fixed_point.h"
-extern f32 func_80086C70(f32 x);
-extern f32 func_80086CA8(f32 x);
-extern f32 func_80086D50(f32 x);
-extern f32 func_80086CE0(f32 x);
-extern f32 func_80086D18(f32 x);
-
s32 gUseAtanContFrac;
/**
* Tangent function computed using libultra sinf and cosf
*/
-// Math_FTanF
-f32 func_80086760(f32 x) {
+f32 Math_FTanF(f32 x) {
return sinf(x) / cosf(x);
}
// Unused
-// Math_FFloorF
-f32 func_80086794(f32 x) {
- return func_80086C70(x);
+f32 Math_FFloorF(f32 x) {
+ return floorf(x);
}
// Unused
-// Math_FCeilF
-f32 func_800867B4(f32 x) {
- return func_80086CA8(x);
+f32 Math_FCeilF(f32 x) {
+ return ceilf(x);
}
// Unused
-// Math_FRoundF
-f32 func_800867D4(f32 x) {
- return func_80086D50(x);
+f32 Math_FRoundF(f32 x) {
+ return roundf(x);
}
// Unused
-// Math_FTruncF
-f32 func_800867F4(f32 x) {
- return func_80086CE0(x);
+f32 Math_FTruncF(f32 x) {
+ return truncf(x);
}
-// Math_FNearbyIntF
-f32 func_80086814(f32 x) {
- return func_80086D18(x);
+f32 Math_FNearbyIntF(f32 x) {
+ return nearbyintf(x);
}
/**
* Arctangent approximation using a Maclaurin series [https://mathworld.wolfram.com/MaclaurinSeries.html]
* (one quadrant, i.e. |x| < 1)
*/
-// Math_FAtanTaylorQF
-f32 func_80086834(f32 x) {
+f32 Math_FAtanTaylorQF(f32 x) {
// Coefficients of Maclaurin series of arctangent
static const f32 coeffs[] = {
-1.0f / 3, +1.0f / 5, -1.0f / 7, +1.0f / 9, -1.0f / 11, +1.0f / 13, -1.0f / 15, +1.0f / 17, 0.0f,
@@ -84,10 +71,9 @@ f32 func_80086834(f32 x) {
* Extends previous arctangent function to the rest of the real numbers.
* Uses the formulae arctan(x) = pi/2 - arctan(1/x)
* and arctan(x) = pi/4 - arctan( (1-x)/(1+x) )
- * to extend the range in which the series computed by func_80086834 is a good approximation
+ * to extend the range in which the series computed by Math_FAtanTaylorQF is a good approximation
*/
-// Math_FAtanTaylorF
-f32 func_80086880(f32 x) {
+f32 Math_FAtanTaylorF(f32 x) {
f32 t;
f32 q;
@@ -102,13 +88,13 @@ f32 func_80086880(f32 x) {
}
if (t <= M_SQRT2 - 1.0f) {
- return func_80086834(x);
+ return Math_FAtanTaylorQF(x);
}
if (t >= M_SQRT2 + 1.0f) {
- q = M_PI / 2 - func_80086834(1.0f / t);
+ q = M_PI / 2 - Math_FAtanTaylorQF(1.0f / t);
} else { // in the interval (\sqrt{2} - 1, \sqrt{2} + 1)
- q = M_PI / 4 - func_80086834((1.0f - t) / (1.0f + t));
+ q = M_PI / 4 - Math_FAtanTaylorQF((1.0f - t) / (1.0f + t));
}
if (x > 0.0f) {
@@ -123,8 +109,7 @@ f32 func_80086880(f32 x) {
* Cf. https://en.wikipedia.org/wiki/Gauss%27s_continued_fraction#The_series_2F1_2 ,
* https://dlmf.nist.gov/4.25#E4
*/
-// Math_FAtanContFracF
-f32 func_800869A4(f32 x) {
+f32 Math_FAtanContFracF(f32 x) {
s32 sector;
f32 z;
f32 conv;
@@ -162,24 +147,22 @@ f32 func_800869A4(f32 x) {
}
}
-// Math_FAtanF
/**
* Single-argument arctangent, only used by the two-argument function.
* Nothing else sets the bss variable gUseAtanContFrac, so the Maclaurin series is always used
*/
-f32 func_80086AF0(f32 x) {
+f32 Math_FAtanF(f32 x) {
if (!gUseAtanContFrac) {
- return func_80086880(x);
+ return Math_FAtanTaylorF(x);
} else {
- return func_800869A4(x);
+ return Math_FAtanContFracF(x);
}
}
-// Math_FAtan2F
/**
* Main two-argument arctangent function
*/
-f32 func_80086B30(f32 y, f32 x) {
+f32 Math_FAtan2F(f32 y, f32 x) {
if (x == 0.0f) {
if (y == 0.0f) {
return 0.0f;
@@ -191,20 +174,18 @@ f32 func_80086B30(f32 y, f32 x) {
return qNaN0x10000;
}
} else if (x >= 0.0f) {
- return func_80086AF0(y / x);
+ return Math_FAtanF(y / x);
} else if (y < 0.0f) {
- return func_80086AF0(y / x) - M_PI;
+ return Math_FAtanF(y / x) - M_PI;
} else {
- return M_PI - func_80086AF0(-(y / x));
+ return M_PI - Math_FAtanF(-(y / x));
}
}
-// Math_FAsinF
-f32 func_80086C18(f32 x) {
- return func_80086B30(x, sqrtf(1.0f - SQ(x)));
+f32 Math_FAsinF(f32 x) {
+ return Math_FAtan2F(x, sqrtf(1.0f - SQ(x)));
}
-// Math_FAcosF
-f32 func_80086C48(f32 x) {
- return M_PI / 2 - func_80086C18(x);
+f32 Math_FAcosF(f32 x) {
+ return M_PI / 2 - Math_FAsinF(x);
}
diff --git a/src/boot_O2/padutils.c b/src/boot_O2/padutils.c
index 95f1dfa3b..accd09e11 100644
--- a/src/boot_O2/padutils.c
+++ b/src/boot_O2/padutils.c
@@ -66,11 +66,10 @@ s8 PadUtils_GetRelY(Input* input) {
}
void PadUtils_UpdateRelXY(Input* input) {
- s32 curX, curY;
- s32 relX, relY;
-
- curX = PadUtils_GetCurX(input);
- curY = PadUtils_GetCurY(input);
+ s32 curX = PadUtils_GetCurX(input);
+ s32 curY = PadUtils_GetCurY(input);
+ s32 relX;
+ s32 relY;
if (curX > 7) {
relX = (curX < 0x43) ? curX - 7 : 0x43 - 7;
diff --git a/src/boot_O2/sleep.c b/src/boot_O2/sleep.c
index 01a85c5cc..a35abc5b2 100644
--- a/src/boot_O2/sleep.c
+++ b/src/boot_O2/sleep.c
@@ -2,10 +2,10 @@
void Sleep_Cycles(u64 time) {
OSMesgQueue mq;
- OSMesg msg;
+ OSMesg msg[1];
OSTimer timer;
- osCreateMesgQueue(&mq, &msg, OS_MESG_BLOCK);
+ osCreateMesgQueue(&mq, msg, ARRAY_COUNT(msg));
osSetTimer(&timer, time, 0, &mq, NULL);
osRecvMesg(&mq, NULL, OS_MESG_BLOCK);
}
diff --git a/src/boot_O2/boot_800862E0.c b/src/boot_O2/system_heap.c
similarity index 65%
rename from src/boot_O2/boot_800862E0.c
rename to src/boot_O2/system_heap.c
index 5774af9da..365d94596 100644
--- a/src/boot_O2/boot_800862E0.c
+++ b/src/boot_O2/system_heap.c
@@ -1,3 +1,10 @@
+/**
+ * @file system_heap.c
+ *
+ * @note:
+ * Only SystemHeap_Init() is used, and is essentially just a wrapper for SystemArena_Init().
+ *
+ */
#include "global.h"
#include "system_malloc.h"
@@ -6,20 +13,20 @@ typedef void (*BlockFunc1)(void*, u32);
typedef void (*BlockFunc8)(void*, u32, u32, u32, u32, u32, u32, u32, u32);
typedef struct InitFunc {
- uintptr_t nextOffset;
- void (*func)(void);
-} InitFunc;
+ /* 0x0 */ uintptr_t nextOffset;
+ /* 0x4 */ void (*func)(void);
+} InitFunc; // size = 0x8
void* sInitFuncs = NULL;
-char sNew[] = { 0x00, 0x00, 0x00, 0x00 };
+char sNew[] = "";
-char D_80097508[] = {
+UNK_TYPE1 D_80097508[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00,
0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
};
-void* SystemArena_MallocMin1(size_t size) {
+void* SystemHeap_Malloc(size_t size) {
if (size == 0) {
size = 1;
}
@@ -27,13 +34,13 @@ void* SystemArena_MallocMin1(size_t size) {
return __osMalloc(&gSystemArena, size);
}
-void SystemArena_FreeNullCheck(void* ptr) {
+void SystemHeap_Free(void* ptr) {
if (ptr != NULL) {
__osFree(&gSystemArena, ptr);
}
}
-void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) {
+void SystemHeap_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) {
uintptr_t pos = blk;
for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) {
@@ -41,7 +48,7 @@ void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc
}
}
-void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) {
+void SystemHeap_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) {
uintptr_t pos = blk;
for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) {
@@ -49,12 +56,12 @@ void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc
}
}
-void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) {
+void* SystemHeap_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) {
if (blk == NULL) {
- blk = SystemArena_MallocMin1(nBlk * blkSize);
+ blk = SystemHeap_Malloc(nBlk * blkSize);
}
- if (blk != NULL && blockFunc != NULL) {
+ if ((blk != NULL) && (blockFunc != NULL)) {
uintptr_t pos = blk;
for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) {
@@ -65,7 +72,7 @@ void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFun
return blk;
}
-void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) {
+void SystemHeap_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) {
uintptr_t pos;
uintptr_t start;
size_t maskedBlkSize;
@@ -86,11 +93,11 @@ void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, Bl
}
if (shouldFree) {
- SystemArena_FreeNullCheck(blk);
+ SystemHeap_Free(blk);
}
}
-void SystemArena_RunInits(void) {
+void SystemHeap_RunInits(void) {
InitFunc* initFunc = (InitFunc*)&sInitFuncs;
u32 nextOffset = initFunc->nextOffset;
InitFunc* prev = NULL;
@@ -110,7 +117,7 @@ void SystemArena_RunInits(void) {
sInitFuncs = prev;
}
-void SystemArena_Init(void* start, size_t size) {
- SystemArena_InitArena(start, size);
- SystemArena_RunInits();
+void SystemHeap_Init(void* start, size_t size) {
+ SystemArena_Init(start, size);
+ SystemHeap_RunInits();
}
diff --git a/src/boot_O2/system_malloc.c b/src/boot_O2/system_malloc.c
index 56608166c..cea017b38 100644
--- a/src/boot_O2/system_malloc.c
+++ b/src/boot_O2/system_malloc.c
@@ -38,7 +38,7 @@ u32 SystemArena_CheckArena(void) {
return __osCheckArena(&gSystemArena);
}
-void SystemArena_InitArena(void* start, size_t size) {
+void SystemArena_Init(void* start, size_t size) {
__osMallocInit(&gSystemArena, start, size);
}
diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c
index 4745ad5c8..78eed1a77 100644
--- a/src/boot_O2_g3/CIC6105.c
+++ b/src/boot_O2_g3/CIC6105.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
UNK_TYPE4 D_8009BE30;
diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c
index 7b8d7126b..ed16c34e0 100644
--- a/src/boot_O2_g3/boot_main.c
+++ b/src/boot_O2_g3/boot_main.c
@@ -1,6 +1,8 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "stack.h"
#include "stackcheck.h"
+#include "z64thread.h"
StackEntry sBootStackInfo;
OSThread sIdleThread;
diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c
index 6e1656170..eb190859e 100644
--- a/src/boot_O2_g3/fault.c
+++ b/src/boot_O2_g3/fault.c
@@ -447,7 +447,7 @@ void osSyncPrintfThreadContext(OSThread* t) {
OSThread* Fault_FindFaultedThread() {
OSThread* iter = __osGetActiveQueue();
while (iter->priority != -1) {
- if (iter->priority > 0 && iter->priority < 0x7F && (iter->flags & 3)) {
+ if ((iter->priority > 0) && (iter->priority < 0x7F) && (iter->flags & 3)) {
return iter;
}
iter = iter->tlnext;
diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot_O2_g3/fault_drawer.c
index 8efc930ec..f694be8aa 100644
--- a/src/boot_O2_g3/fault_drawer.c
+++ b/src/boot_O2_g3/fault_drawer.c
@@ -57,7 +57,7 @@ void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 col
s32 xSize = xEnd - xStart + 1;
s32 ySize = yEnd - yStart + 1;
- if (xDiff > 0 && yDiff > 0) {
+ if ((xDiff > 0) && (yDiff > 0)) {
if (xDiff < xSize) {
xSize = xDiff;
}
@@ -127,11 +127,11 @@ void FaultDrawer_UpdatePrintColor() {
if (sFaultDrawContext->osSyncPrintfEnabled) {
osSyncPrintf(VT_RST);
idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->foreColor);
- if (idx >= 0 && idx < 8) {
+ if ((idx >= 0) && (idx < 8)) {
osSyncPrintf(VT_SGR("3%d"), idx);
}
idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->backColor);
- if (idx >= 0 && idx < 8) {
+ if ((idx >= 0) && (idx < 8)) {
osSyncPrintf(VT_SGR("4%d"), idx);
}
}
@@ -180,7 +180,7 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) {
for (; count != 0; count--, str++) {
if (sFaultDrawContext->escCode) {
sFaultDrawContext->escCode = false;
- if (*str >= '1' && *str <= '9') {
+ if ((*str >= '1') && (*str <= '9')) {
FaultDrawer_SetForeColor(sFaultDrawContext->printColors[*str - '0']);
}
} else {
@@ -192,9 +192,11 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) {
sFaultDrawContext->cursorX = sFaultDrawContext->w;
break;
+
case '\x1A':
sFaultDrawContext->escCode = true;
break;
+
default:
if (sFaultDrawContext->osSyncPrintfEnabled) {
osSyncPrintf("%c", *str);
diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c
index 6c63e2a70..f7c847449 100644
--- a/src/boot_O2_g3/idle.c
+++ b/src/boot_O2_g3/idle.c
@@ -3,6 +3,7 @@
#include "stack.h"
#include "buffers.h"
#include "stackcheck.h"
+#include "z64thread.h"
u8 D_80096B20 = 1;
vu8 gViConfigUseDefault = 1;
@@ -94,10 +95,12 @@ void Idle_InitVideo(void) {
D_8009B290 = 2;
gViConfigMode = osViModeNtscLan1;
break;
+
case OS_TV_MPAL:
D_8009B290 = 30;
gViConfigMode = osViModeMpalLan1;
break;
+
case OS_TV_PAL:
D_8009B290 = 44;
gViConfigMode = osViModeFpalLan1;
diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c
index 1f1e94ab4..9a773f279 100644
--- a/src/boot_O2_g3/irqmgr.c
+++ b/src/boot_O2_g3/irqmgr.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "stackcheck.h"
+#include "z64thread.h"
vs32 gIrqMgrResetStatus = 0;
volatile OSTime sIrqMgrResetTime = 0;
diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c
index 3517b97ae..76f990659 100644
--- a/src/boot_O2_g3/yaz0.c
+++ b/src/boot_O2_g3/yaz0.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
u8 sYaz0DataBuffer[0x400];
@@ -57,11 +58,11 @@ void* Yaz0_NextDMA(void* curSrcPos) {
}
typedef struct {
- /* 0x00 */ u32 magic; // Yaz0
- /* 0x04 */ u32 decSize;
- /* 0x08 */ u32 compInfoOffset; // only used in mio0
- /* 0x0C */ u32 uncompDataOffset; // only used in mio0
-} Yaz0Header; // size = 0x10
+ /* 0x0 */ u32 magic; // Yaz0
+ /* 0x4 */ u32 decSize;
+ /* 0x8 */ u32 compInfoOffset; // only used in mio0
+ /* 0xC */ u32 uncompDataOffset; // only used in mio0
+} Yaz0Header; // size = 0x10
#define YAZ0_MAGIC 0x59617A30 // "Yaz0"
diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c
index bbf8e4bed..9ab6a29ca 100644
--- a/src/boot_O2_g3/z_std_dma.c
+++ b/src/boot_O2_g3/z_std_dma.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "stack.h"
#include "stackcheck.h"
+#include "z64thread.h"
u32 sDmaMgrDmaBuffSize = 0x2000;
diff --git a/src/code/PreRender.c b/src/code/PreRender.c
index 172659cf7..c9f279e75 100644
--- a/src/code/PreRender.c
+++ b/src/code/PreRender.c
@@ -403,7 +403,7 @@ void PreRender_ApplyAntiAliasingFilter(PreRender* this) {
* Applies filters to the framebuffer prerender to make it look smoother
*/
void PreRender_ApplyFilters(PreRender* this) {
- if (this->cvgSave == NULL || this->fbufSave == NULL) {
+ if ((this->cvgSave == NULL) || (this->fbufSave == NULL)) {
this->unk_4D = 0;
} else {
this->unk_4D = 1;
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index e10290356..1fbce712d 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "interface/parameter_static/parameter_static.h"
+#include "archives/icon_item_static/icon_item_static_yar.h"
+#include "archives/icon_item_24_static/icon_item_24_static_yar.h"
// Bit Flag array in which gBitFlags[n] is (1 << n)
u32 gBitFlags[] = {
@@ -95,139 +97,138 @@ u32 gGsFlagsShift[] = {
24,
};
-// TODO: use symbols for these icon textures once textures are properly in C
TexturePtr gItemIcons[] = {
- 0x08000000, // ITEM_OCARINA
- 0x08001000, // ITEM_BOW
- 0x08002000, // ITEM_ARROW_FIRE
- 0x08003000, // ITEM_ARROW_ICE
- 0x08004000, // ITEM_ARROW_LIGHT
- 0x08005000, // ITEM_OCARINA_FAIRY
- 0x08006000, // ITEM_BOMB
- 0x08007000, // ITEM_BOMBCHU
- 0x08008000, // ITEM_STICK
- 0x08009000, // ITEM_NUT
- 0x0800A000, // ITEM_MAGIC_BEANS
- 0x0800B000, // ITEM_SLINGSHOT
- 0x0800C000, // ITEM_POWDER_KEG
- 0x0800D000, // ITEM_PICTO_BOX
- 0x0800E000, // ITEM_LENS
- 0x0800F000, // ITEM_HOOKSHOT
- 0x08010000, // ITEM_SWORD_GREAT_FAIRY
- 0x08011000, // ITEM_LONGSHOT
- 0x08012000, // ITEM_BOTTLE
- 0x08013000, // ITEM_POTION_RED
- 0x08014000, // ITEM_POTION_GREEN
- 0x08015000, // ITEM_POTION_BLUE
- 0x08016000, // ITEM_FAIRY
- 0x08017000, // ITEM_DEKU_PRINCESS
- 0x08018000, // ITEM_MILK_BOTTLE
- 0x08019000, // ITEM_MILK_HALF
- 0x0801A000, // ITEM_FISH
- 0x0801B000, // ITEM_BUG
- 0x0801C000, // ITEM_BLUE_FIRE
- 0x0801D000, // ITEM_POE
- 0x0801E000, // ITEM_BIG_POE
- 0x0801F000, // ITEM_SPRING_WATER
- 0x08020000, // ITEM_HOT_SPRING_WATER
- 0x08021000, // ITEM_ZORA_EGG
- 0x08022000, // ITEM_GOLD_DUST
- 0x08023000, // ITEM_MUSHROOM
- 0x08024000, // ITEM_SEAHORSE
- 0x08025000, // ITEM_CHATEAU
- 0x08026000, // ITEM_HYLIAN_LOACH
- 0x08027000, // ITEM_OBABA_DRINK
- 0x08028000, // ITEM_MOON_TEAR
- 0x08029000, // ITEM_DEED_LAND
- 0x0802A000, // ITEM_DEED_SWAMP
- 0x0802B000, // ITEM_DEED_MOUNTAIN
- 0x0802C000, // ITEM_DEED_OCEAN
- 0x0802D000, // ITEM_ROOM_KEY
- 0x0802E000, // ITEM_LETTER_MAMA
- 0x0802F000, // ITEM_LETTER_TO_KAFEI
- 0x08030000, // ITEM_PENDANT_OF_MEMORIES
- 0x08031000, // ITEM_TINGLE_MAP
- 0x08032000, // ITEM_MASK_DEKU
- 0x08033000, // ITEM_MASK_GORON
- 0x08034000, // ITEM_MASK_ZORA
- 0x08035000, // ITEM_MASK_FIERCE_DEITY
- 0x08036000, // ITEM_MASK_TRUTH
- 0x08037000, // ITEM_MASK_KAFEIS_MASK
- 0x08038000, // ITEM_MASK_ALL_NIGHT
- 0x08039000, // ITEM_MASK_BUNNY
- 0x0803A000, // ITEM_MASK_KEATON
- 0x0803B000, // ITEM_MASK_GARO
- 0x0803C000, // ITEM_MASK_ROMANI
- 0x0803D000, // ITEM_MASK_CIRCUS_LEADER
- 0x0803E000, // ITEM_MASK_POSTMAN
- 0x0803F000, // ITEM_MASK_COUPLE
- 0x08040000, // ITEM_MASK_GREAT_FAIRY
- 0x08041000, // ITEM_MASK_GIBDO
- 0x08042000, // ITEM_MASK_DON_GERO
- 0x08043000, // ITEM_MASK_KAMARO
- 0x08044000, // ITEM_MASK_CAPTAIN
- 0x08045000, // ITEM_MASK_STONE
- 0x08046000, // ITEM_MASK_BREMEN
- 0x08047000, // ITEM_MASK_BLAST
- 0x08048000, // ITEM_MASK_SCENTS
- 0x08049000, // ITEM_MASK_GIANT
- 0x0804A000, // ITEM_BOW_ARROW_FIRE
- 0x0804B000, // ITEM_BOW_ARROW_ICE
- 0x0804C000, // ITEM_BOW_ARROW_LIGHT
- 0x0804D000, // ITEM_SWORD_KOKIRI
- 0x0804E000, // ITEM_SWORD_RAZOR
- 0x0804F000, // ITEM_SWORD_GILDED
- 0x08050000, // ITEM_SWORD_DEITY
- 0x08051000, // ITEM_SHIELD_HERO
- 0x08052000, // ITEM_SHIELD_MIRROR
- 0x08053000, // ITEM_QUIVER_30
- 0x08054000, // ITEM_QUIVER_40
- 0x08055000, // ITEM_QUIVER_50
- 0x08056000, // ITEM_BOMB_BAG_20
- 0x08057000, // ITEM_BOMB_BAG_30
- 0x08058000, // ITEM_BOMB_BAG_40
- 0x08059000, // ITEM_WALLET_DEFAULT
- 0x0805A000, // ITEM_WALLET_ADULT
- 0x0805B000, // ITEM_WALLET_GIANT
- 0x0805C000, // ITEM_FISHING_ROD
- 0x0805D000, // ITEM_REMAINS_ODOLWA
- 0x0805E000, // ITEM_REMAINS_GOHT
- 0x0805F000, // ITEM_REMAINS_GYORG
- 0x08060000, // ITEM_REMAINS_TWINMOLD
- 0x08062000, // ITEM_SONG_SONATA
- 0x08062000, // ITEM_SONG_LULLABY
- 0x08062000, // ITEM_SONG_NOVA
- 0x08062000, // ITEM_SONG_ELEGY
- 0x08062000, // ITEM_SONG_OATH
- 0x08062000, // ITEM_SONG_SARIA
- 0x08062000, // ITEM_SONG_TIME
- 0x08062000, // ITEM_SONG_HEALING
- 0x08062000, // ITEM_SONG_EPONA
- 0x08062000, // ITEM_SONG_SOARING
- 0x08062000, // ITEM_SONG_STORMS
- 0x08062000, // ITEM_SONG_SUN
- 0x08061000, // ITEM_BOMBERS_NOTEBOOK
- 0x09000000, // ITEM_SKULL_TOKEN
- 0x09000900, // ITEM_HEART_CONTAINER
- 0x09001200, // ITEM_HEART_PIECE
- 0x08062000, //
- 0x08062000, //
- 0x08062000, // ITEM_SONG_LULLABY_INTRO
- 0x09003600, // ITEM_KEY_BOSS
- 0x09004800, // ITEM_COMPASS
- 0x09003F00, // ITEM_DUNGEON_MAP
- 0x09005100, // ITEM_STRAY_FAIRIES
- 0x09005A00, // ITEM_KEY_SMALL
- 0x09006300, // ITEM_MAGIC_SMALL
- 0x09006C00, // ITEM_MAGIC_LARGE
- 0x08062180, // ITEM_HEART_PIECE_2
- 0x08062A80, // ITEM_INVALID_1
- 0x08063380, // ITEM_INVALID_2
- gOcarinaCUpTex, // ITEM_INVALID_3
- gOcarinaCDownTex, // ITEM_INVALID_4
- gOcarinaCLeftTex, // ITEM_INVALID_5
- gOcarinaCRightTex, // ITEM_INVALID_6
- gOcarinaATex, // ITEM_INVALID_7
+ icon_item_static_yar_Blob_000000, // ITEM_OCARINA
+ icon_item_static_yar_Blob_001000, // ITEM_BOW
+ icon_item_static_yar_Blob_002000, // ITEM_ARROW_FIRE
+ icon_item_static_yar_Blob_003000, // ITEM_ARROW_ICE
+ icon_item_static_yar_Blob_004000, // ITEM_ARROW_LIGHT
+ icon_item_static_yar_Blob_005000, // ITEM_OCARINA_FAIRY
+ icon_item_static_yar_Blob_006000, // ITEM_BOMB
+ icon_item_static_yar_Blob_007000, // ITEM_BOMBCHU
+ icon_item_static_yar_Blob_008000, // ITEM_STICK
+ icon_item_static_yar_Blob_009000, // ITEM_NUT
+ icon_item_static_yar_Blob_00A000, // ITEM_MAGIC_BEANS
+ icon_item_static_yar_Blob_00B000, // ITEM_SLINGSHOT
+ icon_item_static_yar_Blob_00C000, // ITEM_POWDER_KEG
+ icon_item_static_yar_Blob_00D000, // ITEM_PICTO_BOX
+ icon_item_static_yar_Blob_00E000, // ITEM_LENS
+ icon_item_static_yar_Blob_00F000, // ITEM_HOOKSHOT
+ icon_item_static_yar_Blob_010000, // ITEM_SWORD_GREAT_FAIRY
+ icon_item_static_yar_Blob_011000, // ITEM_LONGSHOT
+ icon_item_static_yar_Blob_012000, // ITEM_BOTTLE
+ icon_item_static_yar_Blob_013000, // ITEM_POTION_RED
+ icon_item_static_yar_Blob_014000, // ITEM_POTION_GREEN
+ icon_item_static_yar_Blob_015000, // ITEM_POTION_BLUE
+ icon_item_static_yar_Blob_016000, // ITEM_FAIRY
+ icon_item_static_yar_Blob_017000, // ITEM_DEKU_PRINCESS
+ icon_item_static_yar_Blob_018000, // ITEM_MILK_BOTTLE
+ icon_item_static_yar_Blob_019000, // ITEM_MILK_HALF
+ icon_item_static_yar_Blob_01A000, // ITEM_FISH
+ icon_item_static_yar_Blob_01B000, // ITEM_BUG
+ icon_item_static_yar_Blob_01C000, // ITEM_BLUE_FIRE
+ icon_item_static_yar_Blob_01D000, // ITEM_POE
+ icon_item_static_yar_Blob_01E000, // ITEM_BIG_POE
+ icon_item_static_yar_Blob_01F000, // ITEM_SPRING_WATER
+ icon_item_static_yar_Blob_020000, // ITEM_HOT_SPRING_WATER
+ icon_item_static_yar_Blob_021000, // ITEM_ZORA_EGG
+ icon_item_static_yar_Blob_022000, // ITEM_GOLD_DUST
+ icon_item_static_yar_Blob_023000, // ITEM_MUSHROOM
+ icon_item_static_yar_Blob_024000, // ITEM_SEAHORSE
+ icon_item_static_yar_Blob_025000, // ITEM_CHATEAU
+ icon_item_static_yar_Blob_026000, // ITEM_HYLIAN_LOACH
+ icon_item_static_yar_Blob_027000, // ITEM_OBABA_DRINK
+ icon_item_static_yar_Blob_028000, // ITEM_MOON_TEAR
+ icon_item_static_yar_Blob_029000, // ITEM_DEED_LAND
+ icon_item_static_yar_Blob_02A000, // ITEM_DEED_SWAMP
+ icon_item_static_yar_Blob_02B000, // ITEM_DEED_MOUNTAIN
+ icon_item_static_yar_Blob_02C000, // ITEM_DEED_OCEAN
+ icon_item_static_yar_Blob_02D000, // ITEM_ROOM_KEY
+ icon_item_static_yar_Blob_02E000, // ITEM_LETTER_MAMA
+ icon_item_static_yar_Blob_02F000, // ITEM_LETTER_TO_KAFEI
+ icon_item_static_yar_Blob_030000, // ITEM_PENDANT_OF_MEMORIES
+ icon_item_static_yar_Blob_031000, // ITEM_TINGLE_MAP
+ icon_item_static_yar_Blob_032000, // ITEM_MASK_DEKU
+ icon_item_static_yar_Blob_033000, // ITEM_MASK_GORON
+ icon_item_static_yar_Blob_034000, // ITEM_MASK_ZORA
+ icon_item_static_yar_Blob_035000, // ITEM_MASK_FIERCE_DEITY
+ icon_item_static_yar_Blob_036000, // ITEM_MASK_TRUTH
+ icon_item_static_yar_Blob_037000, // ITEM_MASK_KAFEIS_MASK
+ icon_item_static_yar_Blob_038000, // ITEM_MASK_ALL_NIGHT
+ icon_item_static_yar_Blob_039000, // ITEM_MASK_BUNNY
+ icon_item_static_yar_Blob_03A000, // ITEM_MASK_KEATON
+ icon_item_static_yar_Blob_03B000, // ITEM_MASK_GARO
+ icon_item_static_yar_Blob_03C000, // ITEM_MASK_ROMANI
+ icon_item_static_yar_Blob_03D000, // ITEM_MASK_CIRCUS_LEADER
+ icon_item_static_yar_Blob_03E000, // ITEM_MASK_POSTMAN
+ icon_item_static_yar_Blob_03F000, // ITEM_MASK_COUPLE
+ icon_item_static_yar_Blob_040000, // ITEM_MASK_GREAT_FAIRY
+ icon_item_static_yar_Blob_041000, // ITEM_MASK_GIBDO
+ icon_item_static_yar_Blob_042000, // ITEM_MASK_DON_GERO
+ icon_item_static_yar_Blob_043000, // ITEM_MASK_KAMARO
+ icon_item_static_yar_Blob_044000, // ITEM_MASK_CAPTAIN
+ icon_item_static_yar_Blob_045000, // ITEM_MASK_STONE
+ icon_item_static_yar_Blob_046000, // ITEM_MASK_BREMEN
+ icon_item_static_yar_Blob_047000, // ITEM_MASK_BLAST
+ icon_item_static_yar_Blob_048000, // ITEM_MASK_SCENTS
+ icon_item_static_yar_Blob_049000, // ITEM_MASK_GIANT
+ icon_item_static_yar_Blob_04A000, // ITEM_BOW_ARROW_FIRE
+ icon_item_static_yar_Blob_04B000, // ITEM_BOW_ARROW_ICE
+ icon_item_static_yar_Blob_04C000, // ITEM_BOW_ARROW_LIGHT
+ icon_item_static_yar_Blob_04D000, // ITEM_SWORD_KOKIRI
+ icon_item_static_yar_Blob_04E000, // ITEM_SWORD_RAZOR
+ icon_item_static_yar_Blob_04F000, // ITEM_SWORD_GILDED
+ icon_item_static_yar_Blob_050000, // ITEM_SWORD_DEITY
+ icon_item_static_yar_Blob_051000, // ITEM_SHIELD_HERO
+ icon_item_static_yar_Blob_052000, // ITEM_SHIELD_MIRROR
+ icon_item_static_yar_Blob_053000, // ITEM_QUIVER_30
+ icon_item_static_yar_Blob_054000, // ITEM_QUIVER_40
+ icon_item_static_yar_Blob_055000, // ITEM_QUIVER_50
+ icon_item_static_yar_Blob_056000, // ITEM_BOMB_BAG_20
+ icon_item_static_yar_Blob_057000, // ITEM_BOMB_BAG_30
+ icon_item_static_yar_Blob_058000, // ITEM_BOMB_BAG_40
+ icon_item_static_yar_Blob_059000, // ITEM_WALLET_DEFAULT
+ icon_item_static_yar_Blob_05A000, // ITEM_WALLET_ADULT
+ icon_item_static_yar_Blob_05B000, // ITEM_WALLET_GIANT
+ icon_item_static_yar_Blob_05C000, // ITEM_FISHING_ROD
+ icon_item_static_yar_Blob_05D000, // ITEM_REMAINS_ODOLWA
+ icon_item_static_yar_Blob_05E000, // ITEM_REMAINS_GOHT
+ icon_item_static_yar_Blob_05F000, // ITEM_REMAINS_GYORG
+ icon_item_static_yar_Blob_060000, // ITEM_REMAINS_TWINMOLD
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_SONATA
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_LULLABY
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_NOVA
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_ELEGY
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_OATH
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_SARIA
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_TIME
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_HEALING
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_EPONA
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_SOARING
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_STORMS
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_SUN
+ icon_item_static_yar_Blob_061000, // ITEM_BOMBERS_NOTEBOOK
+ icon_item_24_static_yar_Blob_000000, // ITEM_SKULL_TOKEN
+ icon_item_24_static_yar_Blob_000900, // ITEM_HEART_CONTAINER
+ icon_item_24_static_yar_Blob_001200, // ITEM_HEART_PIECE
+ icon_item_static_yar_Blob_062000, //
+ icon_item_static_yar_Blob_062000, //
+ icon_item_static_yar_Blob_062000, // ITEM_SONG_LULLABY_INTRO
+ icon_item_24_static_yar_Blob_003600, // ITEM_KEY_BOSS
+ icon_item_24_static_yar_Blob_004800, // ITEM_COMPASS
+ icon_item_24_static_yar_Blob_003F00, // ITEM_DUNGEON_MAP
+ icon_item_24_static_yar_Blob_005100, // ITEM_STRAY_FAIRIES
+ icon_item_24_static_yar_Blob_005A00, // ITEM_KEY_SMALL
+ icon_item_24_static_yar_Blob_006300, // ITEM_MAGIC_SMALL
+ icon_item_24_static_yar_Blob_006C00, // ITEM_MAGIC_LARGE
+ icon_item_static_yar_Blob_062180, // ITEM_HEART_PIECE_2
+ icon_item_static_yar_Blob_062A80, // ITEM_INVALID_1
+ icon_item_static_yar_Blob_063380, // ITEM_INVALID_2
+ gOcarinaCUpTex, // ITEM_INVALID_3
+ gOcarinaCDownTex, // ITEM_INVALID_4
+ gOcarinaCLeftTex, // ITEM_INVALID_5
+ gOcarinaCRightTex, // ITEM_INVALID_6
+ gOcarinaATex, // ITEM_INVALID_7
};
// Used to map item IDs to inventory slots
diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c
deleted file mode 100644
index f3d487fab..000000000
--- a/src/code/code_80140CE0.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140CE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D10.s")
diff --git a/src/code/flg_set.c b/src/code/flg_set.c
index bb25818a6..f7c8c261e 100644
--- a/src/code/flg_set.c
+++ b/src/code/flg_set.c
@@ -12,6 +12,11 @@
#include "global.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
+typedef struct FlagSetEntry {
+ /* 0x0 */ u8* value;
+ /* 0x4 */ const char* name;
+} FlagSetEntry; // size = 0x8
+
static FlagSetEntry sFlagEntries[] = {
{ &gSaveContext.save.saveInfo.weekEventReg[0], "week_event_reg[0]" },
{ &gSaveContext.save.saveInfo.weekEventReg[1], "week_event_reg[1]" },
diff --git a/src/code/game.c b/src/code/game.c
index bc8b9e39f..8f4e0f44d 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -11,9 +11,9 @@ f32 gFramerateDivisorThird = 1.0f / 3.0f;
void Game_UpdateFramerateVariables(s32 divisor) {
gFramerateDivisor = divisor;
- gFramerateDivisorF = (f32)divisor;
- gFramerateDivisorHalf = (f32)(divisor * 0.5f);
- gFramerateDivisorThird = (f32)(divisor / 3.0f);
+ gFramerateDivisorF = divisor;
+ gFramerateDivisorHalf = divisor / 2.0f;
+ gFramerateDivisorThird = divisor / 3.0f;
}
void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) {
@@ -31,7 +31,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) {
D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1);
D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2);
D_801F8010.color.a = R_FB_FILTER_A;
- func_80140D10(&D_801F8010, &dlist, zbuffer);
+ VisCvg_Draw(&D_801F8010, &dlist);
} else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6);
sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
@@ -194,7 +194,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
gameState->main = NULL;
gameState->destroy = NULL;
gameState->running = 1;
- gfxCtx->viMode = D_801FBB88;
+ gfxCtx->viMode = gActiveViMode;
gfxCtx->viConfigFeatures = gViConfigFeatures;
gfxCtx->xScale = gViConfigXScale;
gfxCtx->yScale = gViConfigYScale;
@@ -210,10 +210,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
init(gameState);
- func_80140CE0(&D_801F8010);
+ VisCvg_Init(&D_801F8010);
VisZbuf_Init(&sVisZbuf);
VisMono_Init(&sMonoColors);
- func_80140898(&D_801F8048);
+ ViMode_Init(&D_801F8048);
func_801773A0(&D_801F7FF0);
Rumble_Init();
@@ -232,10 +232,10 @@ void GameState_Destroy(GameState* gameState) {
Rumble_Destroy();
func_801773C4(&D_801F7FF0);
- func_80140D04(&D_801F8010);
+ VisCvg_Destroy(&D_801F8010);
VisZbuf_Destroy(&sVisZbuf);
VisMono_Destroy(&sMonoColors);
- func_80140900(&D_801F8048);
+ ViMode_Destroy(&D_801F8048);
THA_Destroy(&gameState->heap);
GameAlloc_Cleanup(&gameState->alloc);
}
diff --git a/src/code/graph.c b/src/code/graph.c
index 558f7d563..eca40bbaf 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,8 +1,9 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "buffers.h"
#include "system_malloc.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "overlays/gamestates/ovl_select/z_select.h"
#include "overlays/gamestates/ovl_title/z_title.h"
@@ -16,12 +17,12 @@ OSTime sGraphTaskStartTime;
void Graph_FaultClient(void) {
FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1");
- osViSwapBuffer(SysCfb_GetFbPtr(0));
- osViSetMode(D_801FBB88);
+ osViSwapBuffer(SysCfb_GetFramebuffer(0));
+ osViSetMode(gActiveViMode);
osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF);
Fault_WaitForInput();
- osViSwapBuffer(SysCfb_GetFbPtr(1));
- osViSetMode(D_801FBB88);
+ osViSwapBuffer(SysCfb_GetFramebuffer(1));
+ osViSetMode(gActiveViMode);
osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF);
}
@@ -50,7 +51,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
gfxCtx->workBuffer = pool->workBuffer;
gfxCtx->debugBuffer = pool->debugBuffer;
- gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2);
+ gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2);
gSegments[0x0F] = gfxCtx->curFrameBuffer;
gfxCtx->zbuffer = SysCfb_GetZBuffer();
@@ -179,7 +180,7 @@ retry:
task->dramStack = (u64*)gGfxSPTaskStack;
task->dramStackSize = sizeof(gGfxSPTaskStack);
task->outputBuff = gGfxSPTaskOutputBufferPtr;
- task->outputBuffSize = gGfxSPTaskOutputBufferSize;
+ task->outputBuffSize = gGfxSPTaskOutputBufferEnd;
task->dataPtr = (u64*)gGfxMasterDL;
task->dataSize = 0;
task->yieldDataPtr = (u64*)gGfxSPTaskYieldBuffer;
@@ -340,18 +341,19 @@ void Graph_ThreadEntry(void* arg) {
u32 size;
s32 pad[2];
- gZBuffer = SystemArena_Malloc(sizeof(*gZBuffer) + sizeof(*gWorkBuffer) + 64 - 1);
- gZBuffer = (void*)ALIGN64((u32)gZBuffer);
+ gZBufferLoRes = SystemArena_Malloc(sizeof(*gZBufferLoRes) + sizeof(*gWorkBufferLoRes) + 64 - 1);
+ gZBufferLoRes = (void*)ALIGN64((u32)gZBufferLoRes);
- gWorkBuffer = (void*)((u8*)gZBuffer + sizeof(*gZBuffer));
+ gWorkBufferLoRes = (void*)((u8*)gZBufferLoRes + sizeof(*gZBufferLoRes));
- gGfxSPTaskOutputBuffer2 = gGfxSPTaskOutputBuffer = SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBuffer));
+ gGfxSPTaskOutputBufferHiRes = gGfxSPTaskOutputBufferLoRes =
+ SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBufferLoRes));
- gGfxSPTaskOutputBufferEnd = (u8*)gGfxSPTaskOutputBuffer + sizeof(*gGfxSPTaskOutputBuffer);
- gGfxSPTaskOutputBufferEnd2 = (u8*)gGfxSPTaskOutputBuffer2 + sizeof(*gGfxSPTaskOutputBuffer2);
+ gGfxSPTaskOutputBufferEndLoRes = (u8*)gGfxSPTaskOutputBufferLoRes + sizeof(*gGfxSPTaskOutputBufferLoRes);
+ gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes);
- func_80178978();
- Fault_SetFB(D_801FBB90, SCREEN_WIDTH, SCREEN_HEIGHT);
+ SysCfb_Init();
+ Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT);
Graph_Init(&gfxCtx);
while (nextOvl) {
diff --git a/src/code/jpegutils.c b/src/code/jpegutils.c
index 904643f46..fbf6c69c2 100644
--- a/src/code/jpegutils.c
+++ b/src/code/jpegutils.c
@@ -86,7 +86,7 @@ u32 JpegUtils_ProcessHuffmanTableImpl(u8* data, JpegHuffmanTable* ht, u8* codesL
s32 temp;
ret = count;
- if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) {
+ if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) {
return 0;
}
if (ret != JpegUtils_GetHuffmanCodes(codesLengths, codes)) {
@@ -141,7 +141,7 @@ u32 JpegUtils_ProcessHuffmanTableImplOld(u8* dht, JpegHuffmanTableOld* ht, u8* c
count2 = count = JpegUtils_ParseHuffmanCodesLengths(dht, codesLengths);
- if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) {
+ if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) {
return true;
}
diff --git a/src/code/main.c b/src/code/main.c
index 6eadd591a..3da3d25d7 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -8,6 +8,8 @@
#include "buffers.h"
#include "stack.h"
#include "stackcheck.h"
+#include "system_heap.h"
+#include "z64thread.h"
extern OSMesgQueue sSiIntMsgQ;
extern OSMesg sSiIntMsgBuf[1];
@@ -44,7 +46,7 @@ void Main(void* arg) {
sysHeap = gSystemHeap;
fb = 0x80780000;
startHeapSize = fb - sysHeap;
- SystemArena_Init(sysHeap, startHeapSize);
+ SystemHeap_Init(sysHeap, startHeapSize);
Regs_Init();
diff --git a/src/code/sched.c b/src/code/sched.c
index c2630677c..29c558ea7 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -1,6 +1,7 @@
#include "prevent_bss_reordering.h"
#include "global.h"
#include "stackcheck.h"
+#include "z64thread.h"
#define RSP_DONE_MSG 667
#define RDP_DONE_MSG 668
@@ -25,7 +26,7 @@ void Sched_SwapFramebuffer(CfbInfo* cfbInfo) {
osViSwapBuffer(cfbInfo->swapBuffer);
cfbInfo->updateRate2 = cfbInfo->updateRate;
- if (SREG(62) == 0 && cfbInfo->viMode != NULL) {
+ if ((SREG(62) == 0) && (cfbInfo->viMode != NULL)) {
D_80096B20 = one;
osViSetMode(cfbInfo->viMode);
osViSetSpecialFeatures(cfbInfo->features);
@@ -68,7 +69,7 @@ void Sched_HandleAudioCancel(SchedContext* sched) {
// AUDIO SP Cancel
osSyncPrintf("AUDIO SP キャンセルします\n");
- if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_AUDTASK) {
+ if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_AUDTASK)) {
if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) {
// Attempts to stop AUDIO SP
osSyncPrintf("AUDIO SP止めようとします\n");
@@ -130,7 +131,7 @@ void Sched_HandleGfxCancel(SchedContext* sched) {
// GRAPH SP Cancel
osSyncPrintf("GRAPH SP キャンセルします\n");
- if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_GFXTASK) {
+ if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_GFXTASK)) {
if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) {
// GRAPH SP tries to stop
osSyncPrintf("GRAPH SP止めようとします\n");
@@ -227,7 +228,8 @@ s32 Sched_TaskCheckFramebuffers(SchedContext* sched, OSScTask* task) {
void* nextFB = osViGetNextFramebuffer();
void* curFB = osViGetCurrentFramebuffer();
- if (task == NULL || sched->pendingSwapBuf1 != NULL || (curFB == TASK_FRAMEBUFFER(task)->fb1 && curFB != nextFB)) {
+ if ((task == NULL) || (sched->pendingSwapBuf1 != NULL) ||
+ ((curFB == TASK_FRAMEBUFFER(task)->fb1) && (curFB != nextFB))) {
return 0;
}
return 1;
@@ -241,7 +243,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3
OSScTask* gfxTask = sched->gfxListHead;
OSScTask* audioTask = sched->audioListHead;
- if ((ret & OS_SC_SP) && sched->audioListHead != NULL) {
+ if ((ret & OS_SC_SP) && (sched->audioListHead != NULL)) {
*spTask = audioTask;
ret &= ~OS_SC_SP;
sched->audioListHead = sched->audioListHead->next;
@@ -249,7 +251,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3
sched->audioListTail = NULL;
}
} else if (gfxTask != NULL) {
- if (gfxTask->state & OS_SC_YIELDED || !(gfxTask->flags & OS_SC_NEEDS_RDP)) {
+ if ((gfxTask->state & OS_SC_YIELDED) || !(gfxTask->flags & OS_SC_NEEDS_RDP)) {
if (ret & OS_SC_SP) {
*spTask = gfxTask;
ret &= ~OS_SC_SP;
@@ -259,7 +261,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3
}
}
} else if (ret == (OS_SC_SP | OS_SC_DP)) {
- if (TASK_FRAMEBUFFER(gfxTask) == NULL || Sched_TaskCheckFramebuffers(sched, gfxTask)) {
+ if ((TASK_FRAMEBUFFER(gfxTask) == NULL) || Sched_TaskCheckFramebuffers(sched, gfxTask)) {
*spTask = *dpTask = gfxTask;
ret &= ~(OS_SC_SP | OS_SC_DP);
sched->gfxListHead = sched->gfxListHead->next;
@@ -275,7 +277,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3
void Sched_TaskUpdateFramebuffer(SchedContext* sched, OSScTask* task) {
sched->pendingSwapBuf1 = TASK_FRAMEBUFFER(task);
- if (sched->curBuf != NULL && sched->curBuf->updateRate2 > 0) {
+ if ((sched->curBuf != NULL) && (sched->curBuf->updateRate2 > 0)) {
return;
}
Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1);
@@ -314,7 +316,7 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) {
return;
}
// Write back the data cache to ensure imminent SP DMA does not miss anything
- if (spTask->list.t.type != M_AUDTASK && !(spTask->state & OS_SC_YIELDED)) {
+ if ((spTask->list.t.type != M_AUDTASK) && !(spTask->state & OS_SC_YIELDED)) {
osWritebackDCacheAll();
}
spTask->state &= ~(OS_SC_YIELD | OS_SC_YIELDED);
@@ -327,9 +329,11 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) {
case M_AUDTASK:
sRSPAudioStartTime = time;
break;
+
case M_GFXTASK:
sRSPGFXStartTime = time;
break;
+
default:
if (1) {}
sRSPOtherStartTime = time;
@@ -366,7 +370,7 @@ void Sched_HandleEntry(SchedContext* sched) {
Sched_QueueTask(sched, msg);
}
// If there is an audio task pending and an RSP task is running, yield the current task.
- if (sched->audioListHead != NULL && sched->curRSPTask != NULL) {
+ if ((sched->audioListHead != NULL) && (sched->curRSPTask != NULL)) {
Sched_Yield(sched);
return;
}
@@ -396,7 +400,7 @@ void Sched_HandleRetrace(SchedContext* sched) {
if (sched->curBuf->updateRate2 > 0) {
sched->curBuf->updateRate2--;
}
- if (sched->curBuf->updateRate2 <= 0 && sched->pendingSwapBuf1 != NULL) {
+ if ((sched->curBuf->updateRate2 <= 0) && (sched->pendingSwapBuf1 != NULL)) {
Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1);
}
}
@@ -421,9 +425,11 @@ void Sched_HandleRSPDone(SchedContext* sched) {
case M_AUDTASK:
gRSPAudioTotalTime += time - sRSPAudioStartTime;
break;
+
case M_GFXTASK:
sRSPGFXTotalTime += time - sRSPGFXStartTime;
break;
+
default:
if (1) {}
sRSPOtherTotalTime += time - sRSPOtherStartTime;
@@ -555,15 +561,19 @@ void Sched_ThreadEntry(void* arg) {
case RDP_AUDIO_CANCEL_MSG:
Sched_HandleAudioCancel(sched);
continue;
+
case RSP_GFX_CANCEL_MSG:
Sched_HandleGfxCancel(sched);
continue;
+
case ENTRY_MSG:
Sched_HandleEntry(sched);
continue;
+
case RSP_DONE_MSG:
Sched_HandleRSPDone(sched);
continue;
+
case RDP_DONE_MSG:
Sched_HandleRDPDone(sched);
continue;
@@ -573,9 +583,11 @@ void Sched_ThreadEntry(void* arg) {
case OS_SC_RETRACE_MSG:
Sched_HandleRetrace(sched);
continue;
+
case OS_SC_PRE_NMI_MSG:
Sched_HandleReset(sched);
continue;
+
case OS_SC_NMI_MSG:
Sched_HandleStop(sched);
continue;
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 25d92227c..29d6e39c4 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -1,21 +1,129 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "buffers.h"
#include "system_malloc.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s")
+extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
+extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s")
+OSViMode sNotebookViMode; // placeholder name
+void* gFramebuffers[2];
+OSViMode* gActiveViMode;
+u16* gZBufferPtr;
+void* gWorkBuffer;
+u64* gGfxSPTaskOutputBufferPtr;
+void* gGfxSPTaskOutputBufferEnd;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s")
+void* sCfbLoRes1;
+void* sCfbLoRes0;
+u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
+u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
+u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000];
+void* gGfxSPTaskOutputBufferEndLoRes;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s")
+void* sCfbHiRes1;
+void* sCfbHiRes0;
+u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
+u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
+u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000];
+void* gGfxSPTaskOutputBufferEndHiRes;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s")
+s16 gCfbWidth;
+s16 gCfbHeight;
+s16 gCfbLeftAdjust;
+s16 gCfbUpperAdjust;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s")
+u8 gSysCfbHiResEnabled;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s")
+void SysCfb_SetLoResMode(void) {
+ gFramebuffers[1] = sCfbLoRes1;
+ gFramebuffers[0] = sCfbLoRes0;
+ gZBufferPtr = *gZBufferLoRes;
+ gWorkBuffer = gWorkBufferLoRes;
+ gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes;
+ gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes;
+ gCfbWidth = SCREEN_WIDTH;
+ gCfbHeight = SCREEN_HEIGHT;
+ gCfbLeftAdjust = 0;
+ gCfbUpperAdjust = 0;
+ gSysCfbHiResEnabled = false;
+ gScreenWidth = gCfbWidth;
+ gScreenHeight = gCfbHeight;
+ gActiveViMode = &osViModeNtscLan1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s")
+void SysCfb_SetHiResMode(void) {
+ gFramebuffers[1] = sCfbHiRes1;
+ gFramebuffers[0] = sCfbHiRes0;
+ gZBufferPtr = *gZBufferHiRes;
+ gWorkBuffer = gWorkBufferHiRes;
+ gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes;
+ gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes;
+ if (1) {}
+ gCfbWidth = HIRES_BUFFER_WIDTH;
+ gCfbHeight = HIRES_BUFFER_HEIGHT;
+ gCfbLeftAdjust = 30;
+ gCfbUpperAdjust = 10;
+ gScreenWidth = gCfbWidth;
+ gScreenHeight = gCfbHeight;
+ if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) {
+ gActiveViMode = &osViModeNtscHpf1;
+ } else {
+ s32 rightAdjust;
+ s32 lowerAdjust;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s")
+ //! FAKE:
+ l1:
+ rightAdjust = gCfbWidth - 610;
+ lowerAdjust = gCfbHeight - 470;
+ ViMode_Configure(&sNotebookViMode, -1, osTvType, 0, 1, 0, 1, gCfbWidth, gCfbHeight, 30, rightAdjust, 10,
+ lowerAdjust);
+ gActiveViMode = &sNotebookViMode;
+ }
+ gSysCfbHiResEnabled = true;
+}
+
+void SysCfb_Init(void) {
+ sCfbLoRes1 = gFramebuffer1;
+ sCfbLoRes0 = gFramebuffer0;
+ sCfbHiRes1 = gFramebufferHiRes1;
+ sCfbHiRes0 = gFramebufferHiRes0;
+ SysCfb_SetLoResMode();
+}
+
+// Unused
+void SysCfb_Reset(void) {
+ gFramebuffers[0] = NULL;
+ gFramebuffers[1] = NULL;
+}
+
+void* SysCfb_GetFramebuffer(s32 index) {
+ if (index < 2) {
+ return gFramebuffers[index];
+ }
+ return NULL;
+}
+
+void* SysCfb_GetZBuffer(void) {
+ return gZBufferPtr;
+}
+
+void* SysCfb_GetWorkBuffer(void) {
+ return gWorkBuffer;
+}
+
+u16 SysCfb_GetZBufferPixel(s32 x, s32 y) {
+ u16* zBuff = SysCfb_GetZBuffer();
+ u16 val;
+
+ if (zBuff != NULL) {
+ val = (&zBuff[x])[y * gCfbWidth];
+ } else {
+ val = 0;
+ }
+ return val;
+}
+
+s32 SysCfb_GetZBufferInt(s32 x, s32 y) {
+ return Environment_ZBufValToFixedPoint(SysCfb_GetZBufferPixel(x, y) << 2) >> 3;
+}
diff --git a/src/code/sys_cmpdma.c b/src/code/sys_cmpdma.c
index b2a17d547..715892b49 100644
--- a/src/code/sys_cmpdma.c
+++ b/src/code/sys_cmpdma.c
@@ -2,7 +2,7 @@
#include "system_malloc.h"
typedef struct {
- union {
+ /* 0x0 */ union {
u32 dmaWord[2];
u32 dataStart;
u32 dataSize;
@@ -11,7 +11,7 @@ typedef struct {
u32 end;
} offset;
};
-} CmpDmaBuffer;
+} CmpDmaBuffer; // size = 0x8
CmpDmaBuffer sDmaBuffer;
diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c
index 0db0b8744..f2424b850 100644
--- a/src/code/sys_flashrom.c
+++ b/src/code/sys_flashrom.c
@@ -1,44 +1,254 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "stack.h"
#include "stackcheck.h"
#include "system_malloc.h"
+#include "z64thread.h"
-// extern UNK_TYPE1 D_801FBE10;
-// extern UNK_TYPE1 D_801FBE28;
-// extern UNK_TYPE1 D_801FBE2C;
-// extern UNK_TYPE4 D_801FBE30;
-extern STACK(sSysFlashromStack, 0x1000);
-extern StackEntry sSysFlashromStackInfo;
-extern OSThread sSysFlashromThread;
-extern s80185D40 D_801FD008;
-extern OSMesg D_801FD034[1];
+OSMesgQueue sFlashromMesgQueue;
+OSMesg sFlashromMesg[1];
+s32 sFlashromIsInit;
+s32 sFlashromVendor;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s")
+STACK(sSysFlashromStack, 0x1000);
+StackEntry sSysFlashromStackInfo;
+OSThread sSysFlashromThread;
+FlashromRequest sFlashromRequest;
+OSMesg sSysFlashromMsgBuf[1];
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857D0.s")
+s32 SysFlashrom_IsInit(void) {
+ return sFlashromIsInit;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185864.s")
+const char* SysFlashrom_GetVendorStr(void) {
+ switch (sFlashromVendor) {
+ case FLASH_VERSION_MX_PROTO_A:
+ return "PROTO A";
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185908.s")
+ case FLASH_VERSION_MX_A:
+ return "A";
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185968.s")
+ case FLASH_VERSION_MX_C:
+ return "C";
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801859F0.s")
+ case FLASH_VERSION_MEI:
+ return "D(NEW)";
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185A2C.s")
+ case FLASH_VERSION_MX_B_AND_D:
+ return "B or D";
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185B1C.s")
+ default:
+ return "UNKNOWN";
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185BE4.s")
+s32 SysFlashrom_CheckFlashType(void) {
+ u32 flashType;
+ u32 flashVendor;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185C24.s")
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ osFlashReadId(&flashType, &flashVendor);
+ sFlashromVendor = flashVendor;
+ if (flashType == FLASH_TYPE_MAGIC) {
+ if ((flashVendor == FLASH_VERSION_MX_PROTO_A) || (flashVendor == FLASH_VERSION_MX_A) ||
+ (flashVendor == FLASH_VERSION_MX_C) || (flashVendor == FLASH_VERSION_MEI) ||
+ (flashVendor == FLASH_VERSION_MX_B_AND_D)) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }
+ return -1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s")
+s32 SysFlashrom_InitFlash(void) {
+ osCreateMesgQueue(&sFlashromMesgQueue, sFlashromMesg, ARRAY_COUNT(sFlashromMesg));
+ osFlashInit();
+ sFlashromIsInit = true;
+ if (SysFlashrom_CheckFlashType() != 0) {
+ sFlashromIsInit = false;
+ return -1;
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185DDC.s")
+s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) {
+ OSIoMesg msg;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185EC4.s")
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE);
+ osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue);
+ osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F04.s")
+s32 SysFlashrom_EraseSector(u32 page) {
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ return osFlashSectorErase(page);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F64.s")
+s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) {
+ OSIoMesg msg;
+ s32 result;
+ u32 i;
+
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ // Ensure the page is always aligned to a sector boundary.
+ if ((pageNum % FLASH_PAGE_SIZE) != 0) {
+ Fault_AddHungupAndCrash("../sys_flashrom.c", 275);
+ }
+ osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
+ for (i = 0; i < pageCount; i++) {
+ osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue);
+ osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
+ result = osFlashWriteArray(i + pageNum);
+ if (result != 0) {
+ return result;
+ }
+ }
+ return 0;
+}
+
+s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) {
+ s32 result;
+ s32 i;
+
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
+ i = 0;
+failRetry:
+ result = SysFlashrom_EraseSector(pageNum);
+ if (result != 0) {
+ if (i < 3) {
+ i++;
+ goto failRetry;
+ }
+ return result;
+ }
+ result = SysFlashrom_ExecWrite(addr, pageNum, pageCount);
+ if (result != 0) {
+ if (i < 3) {
+ i++;
+ goto failRetry;
+ }
+ return result;
+ }
+ return 0;
+}
+
+// Flash bits can only by flipped with a write from 1 -> 0. Going from 0 -> 1 requires an erasure.
+// This function will try to determine if any sectors need to be erased before writing saving erase cycles.
+s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) {
+ u32 size;
+ u32 i;
+
+ for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) {
+ if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) {
+ return false;
+ }
+ }
+ return true;
+}
+
+s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) {
+ void* data;
+ size_t size;
+ s32 ret;
+
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ size = pageCount * FLASH_PAGE_SIZE;
+ data = SystemArena_Malloc(size);
+ if (data == NULL) {
+ ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount);
+ } else {
+ SysFlashrom_ReadData(data, pageNum, pageCount);
+ if (bcmp(data, addr, size) == 0) {
+ ret = 0;
+ } else {
+ // Will always erase the sector even if it wouldn't normally need to.
+ if (SysFlashrom_NeedsToErase(data, addr, pageCount)) {
+ ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount);
+ } else {
+ ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount);
+ }
+ if (ret == 0) {
+ SysFlashrom_ReadData(data, pageNum, pageCount);
+ if (bcmp(data, addr, size) == 0) {
+ ret = 0;
+ } else {
+ ret = -1;
+ }
+ }
+ }
+ SystemArena_Free(data);
+ }
+ return ret;
+}
+
+void SysFlashrom_ThreadEntry(void* arg) {
+ FlashromRequest* req = (FlashromRequest*)arg;
+
+ switch (req->requestType) {
+ case FLASHROM_REQUEST_WRITE:
+ req->response = SysFlashrom_WriteData(req->addr, req->pageNum, req->pageCount);
+ osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK);
+ break;
+
+ case FLASHROM_REQUEST_READ:
+ req->response = SysFlashrom_ReadData(req->addr, req->pageNum, req->pageCount);
+ osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK);
+ break;
+ }
+}
+
+void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount) {
+ FlashromRequest* req = &sFlashromRequest;
+ if (SysFlashrom_IsInit()) {
+ req->requestType = FLASHROM_REQUEST_WRITE;
+ req->addr = addr;
+ req->pageNum = pageNum;
+ req->pageCount = pageCount;
+ osCreateMesgQueue(&req->messageQueue, sSysFlashromMsgBuf, ARRAY_COUNT(sSysFlashromMsgBuf));
+ StackCheck_Init(&sSysFlashromStackInfo, sSysFlashromStack, STACK_TOP(sSysFlashromStack), 0, 0x100,
+ "sys_flashrom");
+ osCreateThread(&sSysFlashromThread, Z_THREAD_ID_FLASHROM, SysFlashrom_ThreadEntry, req,
+ STACK_TOP(sSysFlashromStack), Z_PRIORITY_FLASHROM);
+ osStartThread(&sSysFlashromThread);
+ }
+}
+
+s32 SysFlashrom_IsBusy(void) {
+ OSMesgQueue* queue = &sFlashromRequest.messageQueue;
+
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ return MQ_IS_FULL(queue);
+}
+
+s32 SysFlashrom_AwaitResult(void) {
+ if (!SysFlashrom_IsInit()) {
+ return -1;
+ }
+ osRecvMesg(&sFlashromRequest.messageQueue, NULL, OS_MESG_BLOCK);
+ osDestroyThread(&sSysFlashromThread);
+ StackCheck_Cleanup(&sSysFlashromStackInfo);
+ return sFlashromRequest.response;
+}
+
+void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount) {
+ SysFlashrom_WriteDataAsync(addr, pageNum, pageCount);
+ SysFlashrom_AwaitResult();
+}
diff --git a/src/code/sys_math.c b/src/code/sys_math.c
index 7fd7e9dea..99d13c332 100644
--- a/src/code/sys_math.c
+++ b/src/code/sys_math.c
@@ -4,15 +4,17 @@
*/
#include "global.h"
-static f32 sFactorialTbl[] = { 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f,
- 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f };
+static f32 sFactorialTbl[] = {
+ 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f, 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f,
+};
-// Rename to Math_FactorialF
/**
* Takes a float, returns the factorial of it(s trunctation), iteratively
* Unused
+ *
+ * @remark original name: "ffact"
*/
-f32 func_80179300(f32 n) {
+f32 Math_FactorialF(f32 n) {
f32 ret = 1.0f;
s32 i;
@@ -23,12 +25,13 @@ f32 func_80179300(f32 n) {
return ret;
}
-// Rename to Math_Factorial
/**
* Takes an int and returns its factorial as a float. Uses the lookup table for n <= 12.
* Unused
+ *
+ * @remark original name: "ifact"
*/
-f32 func_80179400(s32 n) {
+f32 Math_Factorial(s32 n) {
f32 ret;
s32 i;
@@ -45,12 +48,13 @@ f32 func_80179400(s32 n) {
return ret;
}
-// Rename to Math_PowF
/**
* Returns base^{exp} if exp is nonnegative and 1.0f otherwise.
* Unused
+ *
+ * @remark original name: "powi"
*/
-f32 pow_int(f32 base, s32 exp) {
+f32 Math_PowF(f32 base, s32 exp) {
f32 ret = 1.0f;
while (exp > 0) {
@@ -61,19 +65,21 @@ f32 pow_int(f32 base, s32 exp) {
return ret;
}
-// Rename to Math_SinF
/**
* Takes an angle in radians and returns the sine.
+ *
+ * @remark original name: "sinf_table"
*/
-f32 sin_rad(f32 rad) {
+f32 Math_SinF(f32 rad) {
return sins(RAD_TO_BINANG(rad)) * SHT_MINV;
}
-// Rename to Math_CosF
/**
* Takes an angle in radians and returns the cosine.
+ *
+ * @remark original name: "cosf_table"
*/
-f32 cos_rad(f32 rad) {
+f32 Math_CosF(f32 rad) {
return coss(RAD_TO_BINANG(rad)) * SHT_MINV;
}
@@ -84,10 +90,9 @@ f32 Rand_ZeroFloat(f32 scale) {
return Rand_ZeroOne() * scale;
}
-// Rename to Rand_CenteredFloat
/**
* Returns a pseudo-random floating-point number between (- scale / 2) and (scale / 2). Originally in z_actor in OoT.
*/
-f32 randPlusMinusPoint5Scaled(f32 scale) {
+f32 Rand_CenteredFloat(f32 scale) {
return Rand_Centered() * scale;
}
diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c
index 754c5d472..47170db62 100644
--- a/src/code/sys_slowly.c
+++ b/src/code/sys_slowly.c
@@ -8,9 +8,11 @@
*
* @note: `argCount` must be set manually, as this file implements no way to configure it.
*/
+
#include "slowly.h"
#include "global.h"
#include "stackcheck.h"
+#include "z64thread.h"
void Slowly_Main(SlowlyMgr* slowly) {
slowly->status |= SLOWLY_STATUS_STARTED;
diff --git a/src/code/title_setup.c b/src/code/title_setup.c
index 4e9293ce7..841c301e2 100644
--- a/src/code/title_setup.c
+++ b/src/code/title_setup.c
@@ -48,7 +48,7 @@ void Setup_SetRegs(void) {
}
void Setup_InitImpl(SetupState* this) {
- func_80185908();
+ SysFlashrom_InitFlash();
SaveContext_Init();
Setup_SetRegs();
diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c
index 020edcf27..aa5c0325d 100644
--- a/src/code/z_DLF.c
+++ b/src/code/z_DLF.c
@@ -46,7 +46,7 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) {
s32 var_v0;
if (overlayEntry->loadedRamAddr != NULL) {
- var_v0 = overlayEntry->unk_28 != 0 ? -1 : 0;
+ var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0;
if (var_v0 == 0) {
overlayEntry->unk_14 = (uintptr_t)(
(overlayEntry->unk_14 != NULL)
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index b09477198..0558f4130 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4,6 +4,7 @@
*/
#include "global.h"
+#include "z64horse.h"
#include "z64load.h"
#include "z64quake.h"
#include "z64rumble.h"
@@ -76,7 +77,7 @@ void ActorShadow_Draw(Actor* actor, Lights* lights, PlayState* play, Gfx* dlist,
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0,
COMBINED);
@@ -218,7 +219,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
actor->shape.feetFloorFlags = 0;
spB8 = 2;
@@ -360,7 +361,7 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
func_800C0094(actor->floorPoly, actor->world.pos.x, actor->floorHeight, actor->world.pos.z, &sp94);
temp_f22 = (f32)actor->shape.shadowAlpha * (1.0f - (spEC * (1.0f / 30.0f)));
@@ -475,6 +476,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
Actor* actor = targetCtx->targetedActor;
OPEN_DISPS(play->state.gfxCtx);
+
if (targetCtx->unk48 != 0) {
TargetContextEntry* entry;
s16 alpha = 255;
@@ -522,7 +524,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z);
if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) {
- OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39);
+ OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57);
for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) {
entry = &targetCtx->unk50[spAC];
@@ -564,7 +566,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) {
TatlColor* color = &sTatlColorList[actor->category];
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x07);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7);
Matrix_Translate(actor->focus.pos.x,
actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f,
@@ -597,10 +599,10 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS
targetCtx->unk_94 = sp68;
}
- if (targetCtx->unk8C != 0) {
+ if (targetCtx->unk8C != NULL) {
sp68 = targetCtx->unk8C;
targetCtx->unk8C = NULL;
- } else if (actor != 0) {
+ } else if (actor != NULL) {
sp68 = actor;
}
@@ -639,7 +641,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS
Target_SetColors(targetCtx, sp68, category, play);
}
- if (actor != NULL && targetCtx->unk4B == 0) {
+ if ((actor != NULL) && (targetCtx->unk4B == 0)) {
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW);
if ((projectedPos.z <= 0.0f) || (fabsf(projectedPos.x * invW) >= 1.0f) ||
(fabsf(projectedPos.y * invW) >= 1.0f)) {
@@ -694,7 +696,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS
* Tests if current scene switch flag is set.
*/
s32 Flags_GetSwitch(PlayState* play, s32 flag) {
- if (flag >= 0 && flag < 0x80) {
+ if ((flag >= 0) && (flag < 0x80)) {
return play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F));
}
return 0;
@@ -704,7 +706,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) {
* Sets current scene switch flag.
*/
void Flags_SetSwitch(PlayState* play, s32 flag) {
- if (flag >= 0 && flag < 0x80) {
+ if ((flag >= 0) && (flag < 0x80)) {
play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F);
}
}
@@ -713,7 +715,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) {
* Unsets current scene switch flag.
*/
void Flags_UnsetSwitch(PlayState* play, s32 flag) {
- if (flag >= 0 && flag < 0x80) {
+ if ((flag >= 0) && (flag < 0x80)) {
play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] &= ~(1 << (flag & 0x1F));
}
}
@@ -792,7 +794,7 @@ void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) {
* Tests if current scene collectible flag is set.
*/
s32 Flags_GetCollectible(PlayState* play, s32 flag) {
- if (flag > 0 && flag < 0x80) {
+ if ((flag > 0) && (flag < 0x80)) {
return play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F));
}
return 0;
@@ -802,7 +804,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) {
* Sets current scene collectible flag.
*/
void Flags_SetCollectible(PlayState* play, s32 flag) {
- if (flag > 0 && flag < 0x80) {
+ if ((flag > 0) && (flag < 0x80)) {
play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F);
}
}
@@ -849,17 +851,12 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) {
if (titleCtx->alpha != 0) {
s32 width = titleCtx->width;
s32 height = titleCtx->height;
- s32 unk1;
- s32 spC0;
- s32 sp38;
- s32 spB8;
- s32 spB4;
- s32 temp;
-
- temp = width * 2;
- spC0 = (titleCtx->x * 4) - temp;
- spB8 = (titleCtx->y * 4) - (height * 2);
- sp38 = width * 2;
+ s32 doubleWidth = width * 2;
+ s32 titleX = (titleCtx->x * 4) - doubleWidth;
+ s32 doubleHeight = height * 2;
+ s32 titleY = (titleCtx->y * 4) - doubleHeight;
+ s32 titleSecondY;
+ s32 textureLanguageOffset;
OPEN_DISPS(gameState->gfxCtx);
@@ -867,29 +864,30 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) {
height = TMEM_SIZE / width;
}
- spB4 = spB8 + (height * 4);
+ titleSecondY = titleY + (height * 4);
- OVERLAY_DISP = func_8012C014(OVERLAY_DISP);
+ OVERLAY_DISP = Gfx_SetupDL52_NoCD(OVERLAY_DISP);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity,
(u8)titleCtx->alpha);
- gDPLoadTextureBlock(OVERLAY_DISP++, (s32*)titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0,
+ gDPLoadTextureBlock(OVERLAY_DISP++, titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
- gSPTextureRectangle(OVERLAY_DISP++, spC0, spB8, ((sp38 * 2) + spC0) - 4, spB8 + (height * 4) - 1,
+ gSPTextureRectangle(OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4) - 1,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
height = titleCtx->height - height;
+ // If texture is bigger than 0x1000, display the rest
if (height > 0) {
- gDPLoadTextureBlock(OVERLAY_DISP++, (s32)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width,
+ gDPLoadTextureBlock(OVERLAY_DISP++, (uintptr_t)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width,
height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
- gSPTextureRectangle(OVERLAY_DISP++, spC0, spB4, ((sp38 * 2) + spC0) - 4, spB4 + (height * 4) - 1,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gSPTextureRectangle(OVERLAY_DISP++, titleX, titleSecondY, ((doubleWidth * 2) + titleX) - 4,
+ titleSecondY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
CLOSE_DISPS(gameState->gfxCtx);
@@ -1361,8 +1359,8 @@ s32 func_800B7200(Player* player) {
return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0);
}
-void func_800B722C(GameState* gameState, Player* player) {
- func_800F40A0(gameState, player);
+void Actor_SpawnHorse(PlayState* play, Player* player) {
+ Horse_Spawn(play, player);
}
s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) {
@@ -1374,7 +1372,7 @@ s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) {
player->csMode = csMode;
player->unk_398 = actor;
- player->unk_3BA = 0;
+ player->doorBgCamIndex = 0;
return true;
}
@@ -1382,7 +1380,7 @@ s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) {
Player* player = GET_PLAYER(play);
if (func_800B724C(play, actor, csMode)) {
- player->unk_3BA = 1;
+ player->doorBgCamIndex = 1;
return true;
}
return false;
@@ -2031,10 +2029,10 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x
PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) &&
(Player_GetExplosiveHeld(player) <= PLAYER_EXPLOSIVE_NONE)) {
if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) {
- if ((getItemId == GI_MASK_CIRCUS_LEADER || getItemId == GI_PENDANT_OF_MEMORIES ||
- getItemId == GI_DEED_LAND ||
- ((player->heldActor != NULL || actor == player->talkActor) &&
- (getItemId > GI_NONE && getItemId < GI_MAX))) ||
+ if (((getItemId == GI_MASK_CIRCUS_LEADER) || (getItemId == GI_PENDANT_OF_MEMORIES) ||
+ (getItemId == GI_DEED_LAND) ||
+ (((player->heldActor != NULL) || (actor == player->talkActor)) &&
+ ((getItemId > GI_NONE) && (getItemId < GI_MAX)))) ||
!(player->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000))) {
s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y;
s32 absYawDiff = ABS_ALT(yawDiff);
@@ -2308,7 +2306,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto
Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play);
Actor_InitHalfDaysBit(actorCtx);
Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL);
- func_800B722C(&play->state, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first);
+ Actor_SpawnHorse(play, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first);
}
/**
@@ -2389,12 +2387,12 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
} else {
if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
Actor_Kill(actor);
- } else if (((params->requiredActorFlag) && !(actor->flags & params->requiredActorFlag)) ||
- ((((!params->requiredActorFlag) != 0)) &&
+ } else if ((params->requiredActorFlag && !(actor->flags & params->requiredActorFlag)) ||
+ (((!params->requiredActorFlag) != 0) &&
(!(actor->flags & ACTOR_FLAG_100000) ||
((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & PLAYER_STATE1_200))) &&
- params->canFreezeCategory && (actor != params->talkActor) &&
- ((actor != params->player->heldActor)) && (actor->parent != ¶ms->player->actor))) {
+ params->canFreezeCategory && (actor != params->talkActor) && (actor != params->player->heldActor) &&
+ (actor->parent != ¶ms->player->actor))) {
CollisionCheck_ResetDamage(&actor->colChkInfo);
} else {
Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos);
@@ -2709,7 +2707,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors
spA4 = play->unk_18E68;
if (dbgVar2) {
- PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, zbuffer);
+ PreRender_SetValues(&play->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, zbuffer);
gfxTemp = gfx;
func_80170200(&play->pauseBgPreRender, &gfxTemp, zbuffer, spA4);
@@ -3198,7 +3196,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
}
overlayEntry = &gActorOverlayTable[index];
- if (overlayEntry->vramStart != 0) {
+ if (overlayEntry->vramStart != NULL) {
overlayEntry->numLoaded++;
}
@@ -3271,12 +3269,12 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) {
for (i = 0; i < numTransitionActors; transitionActorList++, i++) {
if (transitionActorList->id >= 0) {
- if ((transitionActorList->sides[0].room >= 0 &&
- (play->roomCtx.curRoom.num == transitionActorList->sides[0].room ||
- play->roomCtx.prevRoom.num == transitionActorList->sides[0].room)) ||
- (transitionActorList->sides[1].room >= 0 &&
- (play->roomCtx.curRoom.num == transitionActorList->sides[1].room ||
- play->roomCtx.prevRoom.num == transitionActorList->sides[1].room))) {
+ if (((transitionActorList->sides[0].room >= 0) &&
+ ((play->roomCtx.curRoom.num == transitionActorList->sides[0].room) ||
+ (play->roomCtx.prevRoom.num == transitionActorList->sides[0].room))) ||
+ ((transitionActorList->sides[1].room >= 0) &&
+ ((play->roomCtx.curRoom.num == transitionActorList->sides[1].room) ||
+ (play->roomCtx.prevRoom.num == transitionActorList->sides[1].room)))) {
s16 rotY = DEG_TO_BINANG((transitionActorList->rotY >> 7) & 0x1FF);
if (Actor_SpawnAsChildAndCutscene(actorCtx, play, transitionActorList->id & 0x1FFF,
@@ -3490,49 +3488,50 @@ void Enemy_StartFinishingBlow(PlayState* play, Actor* actor) {
}
// blinking routine
-s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) {
- if (DECR(arg0[1]) == 0) {
- arg0[1] = Rand_S16Offset(arg1, arg2);
+s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) {
+ if (DECR(info->blinkTimer) == 0) {
+ info->blinkTimer = Rand_S16Offset(arg1, arg2);
}
- if (arg0[1] - arg3 > 0) {
- arg0[0] = 0;
- } else if ((arg0[1] - arg3 >= -1) || (arg0[1] < 2)) {
- arg0[0] = 1;
+ if (info->blinkTimer - arg3 > 0) {
+ info->eyeTexIndex = 0;
+ } else if ((info->blinkTimer - arg3 >= -1) || (info->blinkTimer < 2)) {
+ info->eyeTexIndex = 1;
} else {
- arg0[0] = 2;
+ info->eyeTexIndex = 2;
}
- return arg0[0];
+ return info->eyeTexIndex;
}
// blinking routine
-s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) {
- if (DECR(arg0[1]) == 0) {
- arg0[1] = Rand_S16Offset(arg1, arg2);
+s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) {
+ if (DECR(info->blinkTimer) == 0) {
+ info->blinkTimer = Rand_S16Offset(arg1, arg2);
}
- if (arg0[1] - arg3 > 0) {
- arg0[0] = 0;
- } else if (arg0[1] - arg3 == 0) {
- arg0[0] = 1;
+ if (info->blinkTimer - arg3 > 0) {
+ info->eyeTexIndex = 0;
+ } else if (info->blinkTimer - arg3 == 0) {
+ info->eyeTexIndex = 1;
} else {
- arg0[0] = 2;
+ info->eyeTexIndex = 2;
}
- return arg0[0];
+ return info->eyeTexIndex;
}
// unused blinking routine
-s16 func_800BBC20(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) {
- if (DECR(arg0[1]) == 0) {
- arg0[1] = Rand_S16Offset(arg1, arg2);
- arg0[0]++;
- if ((arg0[0] % 3) == 0) {
- arg0[0] = (s32)(Rand_ZeroOne() * arg3) * 3;
+s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) {
+ if (DECR(info->blinkTimer) == 0) {
+ info->blinkTimer = Rand_S16Offset(arg1, arg2);
+ info->eyeTexIndex++;
+ if ((info->eyeTexIndex % 3) == 0) {
+ info->eyeTexIndex = (s32)(Rand_ZeroOne() * arg3) * 3;
}
}
- return arg0[0];
+
+ return info->eyeTexIndex;
}
void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList) {
@@ -3568,8 +3567,8 @@ void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 r
accel.y += (Rand_ZeroOne() - 0.5f) * 0.2f;
for (i = countMinusOne; i >= 0; i--) {
- pos.x = (sin_rad(angle) * radius) + posXZ->x;
- pos.z = (cos_rad(angle) * radius) + posXZ->z;
+ pos.x = (Math_SinF(angle) * radius) + posXZ->x;
+ pos.z = (Math_CosF(angle) * radius) + posXZ->z;
accel.x = (Rand_ZeroOne() - 0.5f) * randAccelWeight;
accel.z = (Rand_ZeroOne() - 0.5f) * randAccelWeight;
@@ -3614,15 +3613,15 @@ void func_800BC154(PlayState* play, ActorContext* actorCtx, Actor* actor, u8 act
// Damage flags for EnArrow
u32 sArrowDmgFlags[] = {
- DMG_FIRE_ARROW, // ENARROW_0
- DMG_NORMAL_ARROW, // ENARROW_1
- DMG_NORMAL_ARROW, // ENARROW_2
- DMG_FIRE_ARROW, // ENARROW_3
- DMG_ICE_ARROW, // ENARROW_4
- DMG_LIGHT_ARROW, // ENARROW_5
- DMG_DEKU_NUT, // ENARROW_6
- DMG_DEKU_BUBBLE, // ENARROW_7
- DMG_DEKU_NUT, // ENARROW_8
+ DMG_FIRE_ARROW, // ARROW_TYPE_NORMAL_LIT
+ DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL_HORSE
+ DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL
+ DMG_FIRE_ARROW, // ARROW_TYPE_FIRE
+ DMG_ICE_ARROW, // ARROW_TYPE_ICE
+ DMG_LIGHT_ARROW, // ARROW_TYPE_LIGHT
+ DMG_DEKU_NUT, // ARROW_TYPE_SLINGSHOT
+ DMG_DEKU_BUBBLE, // ARROW_TYPE_DEKU_BUBBLE
+ DMG_DEKU_NUT, // ARROW_TYPE_DEKU_NUT
};
u32 Actor_GetArrowDmgFlags(s32 params) {
@@ -3768,7 +3767,7 @@ void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha);
adjustedPos.x = pos->x;
@@ -4372,26 +4371,30 @@ Gfx* func_800BD9A0(GraphicsContext* gfxCtx) {
void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw,
Actor* actor, s16 alpha) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, alpha);
gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL);
POLY_OPA_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount,
overrideLimbDraw, postLimbDraw, actor, POLY_OPA_DISP);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw,
Actor* actor, s16 alpha) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, alpha);
gSPSegment(POLY_XLU_DISP++, 0x0C, func_800BD9A0(play->state.gfxCtx));
POLY_XLU_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount,
overrideLimbDraw, postLimbDraw, actor, POLY_XLU_DISP);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -4476,7 +4479,7 @@ s32 func_800BE184(PlayState* play, Actor* actor, f32 xzDist, s16 arg3, s16 arg4,
s16 phi_v0 = BINANG_SUB(BINANG_ROT180(actor->yawTowardsPlayer), player->actor.shape.rot.y);
s16 temp_t0 = actor->yawTowardsPlayer - arg5;
- if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != 0)) {
+ if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0)) {
if ((arg4 >= ABS_ALT(phi_v0)) && (arg3 >= ABS_ALT(temp_t0))) {
return true;
}
@@ -4653,7 +4656,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
switch (type) {
case ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX:
@@ -4813,7 +4816,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
// Apply and draw a light orb over each limb of frozen actor
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
- Matrix_RotateZF(randPlusMinusPoint5Scaled(2 * M_PI), MTXMODE_APPLY);
+ Matrix_RotateZF(Rand_CenteredFloat(2 * M_PI), MTXMODE_APPLY);
currentMatrix->mf[3][0] = limbPos->x;
currentMatrix->mf[3][1] = limbPos->y;
currentMatrix->mf[3][2] = limbPos->z;
@@ -4854,9 +4857,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
// first electric spark
Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI));
Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
- currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
- currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
- currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
+ currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x;
+ currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y;
+ currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4866,9 +4869,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
// second electric spark
Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI));
Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
- currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
- currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
- currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
+ currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x;
+ currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y;
+ currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 2fc1852ab..a263d4393 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "fixed_point.h"
#include "vt.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
@@ -1920,12 +1921,14 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
s32 bgId;
f32 temp_f0_2;
f32 f32temp;
- f32 nx2, nz2;
+ f32 nx2;
+ f32 nz2;
Vec3f checkLineNext;
Vec3f checkLinePrev;
f32 n2XZDist;
f32 n3XZDist;
- f32 nx3, nz3;
+ f32 nx3;
+ f32 nz3;
s32 bccFlags;
Vec3f posIntersect2;
s32 bgId2;
@@ -3045,7 +3048,7 @@ void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s3
newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z);
}
- newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA));
+ newPoly->dist = nearbyint(-DOTXYZ(newNormal, vtxA));
if (newNormal.y > 0.5f) {
s16 polyId = *polyStartIndex + i;
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index ea600b30e..acb4af20a 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -42,6 +42,7 @@
* -Y +Z -Y
*
*/
+
#include "global.h"
#include "z64quake.h"
#include "z64shrink_window.h"
@@ -465,13 +466,13 @@ s32 func_800CBA7C(Camera* camera) {
}
}
-s32 func_800CBAAC(Camera* camera) {
+PlayerMeleeWeaponState func_800CBAAC(Camera* camera) {
Actor* focalActor = camera->focalActor;
if (camera->focalActor == &GET_PLAYER(camera->play)->actor) {
return ((Player*)focalActor)->meleeWeaponState;
} else {
- return 0;
+ return PLAYER_MELEE_WEAPON_STATE_0;
}
}
@@ -506,13 +507,13 @@ s32 func_800CBB88(Camera* camera) {
Actor* focalActor = camera->focalActor;
if (camera->focalActor == &GET_PLAYER(camera->play)->actor) {
- if ((((Player*)focalActor)->meleeWeaponState != 0) &&
+ if ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
(((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT)) {
return 3;
}
if ((((Player*)focalActor)->stateFlags2 & PLAYER_STATE2_20000) ||
- ((((Player*)focalActor)->meleeWeaponState != 0) &&
+ ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
(((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK))) {
return 1;
}
@@ -874,7 +875,7 @@ void func_800CC938(Camera* camera) {
* Calculates the angle between points `from` and `to`
*/
s16 Camera_CalcXZAngle(Vec3f* to, Vec3f* from) {
- return CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(from->x - to->x, from->z - to->z)));
+ return CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(from->x - to->x, from->z - to->z)));
}
// BSS
@@ -963,8 +964,8 @@ s16 Camera_GetPitchAdjFromFloorHeightDiffs(Camera* camera, s16 viewYaw, s16 shou
floorYDiffNear = (sFloorYNear - camera->focalActorFloorHeight) * 0.8f;
floorYDiffFar = (sFloorYFar - camera->focalActorFloorHeight) * (20.0f * 0.01f);
- pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffNear, nearDist)));
- pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffFar, farDist)));
+ pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffNear, nearDist)));
+ pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffFar, farDist)));
return pitchNear + pitchFar;
}
@@ -1456,9 +1457,8 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32 xzOf
deltaY = focalActorPosRot->pos.y - *focalActorPosY;
eyeAtDistXZ = OLib_Vec3fDistXZ(at, &camera->eye);
- // Math_FTanF
// Get the height based on 80% of the fov
- fovHeight = func_80086760(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ;
+ fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ;
if (deltaY > fovHeight) {
//! FAKE
@@ -1538,8 +1538,8 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ
deltaY = focalActorPosRot->pos.y - *yPosOffset;
sp50 = OLib_Vec3fDistXZ(at, &camera->eye);
phi_f16 = sp50;
- func_80086B30(deltaY, sp50);
- fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16;
+ Math_FAtan2F(deltaY, sp50);
+ fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16;
if (fovHeight < deltaY) {
*yPosOffset += deltaY - fovHeight;
@@ -1551,12 +1551,12 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ
focalActorAtOffsetTarget.y -= deltaY;
} else {
deltaY = focalActorPosRot->pos.y - *yPosOffset;
- temp_f0_6 = func_80086B30(deltaY, OLib_Vec3fDistXZ(at, &camera->eye));
+ temp_f0_6 = Math_FAtan2F(deltaY, OLib_Vec3fDistXZ(at, &camera->eye));
if (temp_f0_6 > 0.34906584f) { // (M_PI / 9)
- phi_f16 = 1.0f - sin_rad(temp_f0_6 - 0.34906584f);
+ phi_f16 = 1.0f - Math_SinF(temp_f0_6 - 0.34906584f);
} else if (temp_f0_6 < -0.17453292f) { // (M_PI / 18)
- phi_f16 = 1.0f - sin_rad(-0.17453292f - temp_f0_6);
+ phi_f16 = 1.0f - Math_SinF(-0.17453292f - temp_f0_6);
} else {
phi_f16 = 1.0f;
}
@@ -1624,10 +1624,10 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset
new_var2 = *arg1;
sp4C = new_var2;
deltaY = focalActorPosRot->pos.y - *arg6;
- temp_f0_3 = func_80086B30(deltaY, sp4C);
+ temp_f0_3 = Math_FAtan2F(deltaY, sp4C);
if (!(flags & 0x80)) {
- fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C;
+ fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C;
if (fovHeight < deltaY) {
*arg6 += deltaY - fovHeight;
@@ -1640,9 +1640,9 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset
focalActorAtOffsetTarget.y -= deltaY;
} else {
if (temp_f0_3 > 0.34906584f) { // (M_PI / 9)
- phi_f14 = 1.0f - sin_rad(temp_f0_3 - 0.34906584f);
+ phi_f14 = 1.0f - Math_SinF(temp_f0_3 - 0.34906584f);
} else if (temp_f0_3 < -0.17453292f) { // (M_PI / 18)
- phi_f14 = 1.0f - sin_rad(-0.17453292f - temp_f0_3);
+ phi_f14 = 1.0f - Math_SinF(-0.17453292f - temp_f0_3);
} else {
phi_f14 = 1.0f;
}
@@ -1844,8 +1844,6 @@ void Camera_CalcDefaultSwing(Camera* camera, VecGeo* arg1, VecGeo* arg2, f32 arg
if (swing->unk_64 == 1) {
if (arg3 < (sp88 = OLib_Vec3fDist(at, &swing->collisionClosePoint))) {
- //! FAKE:
- dummy:;
swing->unk_64 = 0;
} else if ((sp88 = Math3D_SignedDistanceFromPlane(swing->eyeAtColChk.norm.x, swing->eyeAtColChk.norm.y,
swing->eyeAtColChk.norm.z, swing->eyeAtColChk.poly->dist,
@@ -3958,7 +3956,7 @@ s32 Camera_Battle1(Camera* camera) {
}
camera->roll = Camera_ScaledStepToCeilS(sp88, camera->roll, 0.06f, 5);
- if (func_800CBAAC(camera) != 0) {
+ if (func_800CBAAC(camera) != PLAYER_MELEE_WEAPON_STATE_0) {
phi_f12 = ((camera->play->state.frames & 8) != 0) ? roData->unk_20 - (roData->unk_20 * 0.5f) : roData->unk_20;
} else {
phi_f12 = ((gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f) * (sp78 - (sp78 * 0.05f * spEC));
@@ -6325,8 +6323,9 @@ s32 Camera_Demo4(Camera* camera) {
sCameraInterfaceFlags = roData->interfaceFlags;
switch (camera->animState) {
- //! FAKE:
- if (1) {}
+ default:
+ break;
+
case 0:
camera->animState++;
rwData->timer = 0;
@@ -6342,8 +6341,8 @@ s32 Camera_Demo4(Camera* camera) {
// Camera fixed on human player as the mask moves from the pocket to the face
// Camera rolls left and right
if (rwData->timer >= 12) {
- rwData->unk_0C = (rwData->timer - 12) * 10.384615f;
- sin = sin_rad(DEG_TO_RAD(rwData->unk_0C));
+ rwData->unk_0C = (rwData->timer - 12) * (135.0f / 13.0f);
+ sin = Math_SinF(DEG_TO_RAD(rwData->unk_0C));
rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin;
if (rwData->timer == 12) {
Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_1);
@@ -6515,7 +6514,7 @@ s32 Camera_Demo5(Camera* camera) {
// Camera zooms out while rolling back and forth
rwData->unk_0C = rwData->timer * (180.0f / 23.0f);
sp58 = DEG_TO_RAD(rwData->unk_0C);
- sin = sin_rad(sp58);
+ sin = Math_SinF(sp58);
rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin;
new_var = (46 - rwData->timer) * (5.0f / 46.0f);
focalActorFocus.pos.x = (Math_SinS(rwData->unk_24) * new_var * rwData->unk_0C) + focalActorPosRot->pos.x;
@@ -6776,8 +6775,9 @@ s32 Camera_Special5(Camera* camera) {
spA4 = BINANG_SUB(focalActorPosRot->rot.y, sp6C.yaw);
sp74.r = roData->eyeDist;
rand = Rand_ZeroOne();
- sp74.yaw = BINANG_ROT180(focalActorPosRot->rot.y) +
- (s16)(spA4 < 0 ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f)));
+ sp74.yaw =
+ BINANG_ROT180(focalActorPosRot->rot.y) +
+ (s16)((spA4 < 0) ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f)));
sp74.pitch = roData->pitch;
OLib_AddVecGeoToVec3f(eyeNext, &spA8.pos, &sp74);
*eye = *eyeNext;
@@ -7788,7 +7788,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) {
break;
case CAM_MODE_FOLLOWTARGET:
- if (camera->target != NULL && camera->target->id != ACTOR_EN_BOOM) {
+ if ((camera->target != NULL) && (camera->target->id != ACTOR_EN_BOOM)) {
sModeChangeFlags = CAM_CHANGE_MODE_FOLLOW_TARGET;
}
break;
@@ -7805,6 +7805,9 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) {
case CAM_MODE_HANG:
sModeChangeFlags = CAM_CHANGE_MODE_4;
break;
+
+ default:
+ break;
}
// Process Current Camera Mode
diff --git a/src/code/z_cheap_proc.c b/src/code/z_cheap_proc.c
index 2b4f67cae..82303a172 100644
--- a/src/code/z_cheap_proc.c
+++ b/src/code/z_cheap_proc.c
@@ -10,7 +10,7 @@ void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist) {
dl = POLY_OPA_DISP;
- gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]);
+ gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]);
gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&dl[2], dlist);
@@ -29,7 +29,7 @@ void Gfx_DrawDListXlu(PlayState* play, Gfx* dlist) {
dl = POLY_XLU_DISP;
- gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]);
+ gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]);
gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&dl[2], dlist);
diff --git a/src/code/z_collision_btltbls.c b/src/code/z_collision_btltbls.c
index c9f014f4f..36528e467 100644
--- a/src/code/z_collision_btltbls.c
+++ b/src/code/z_collision_btltbls.c
@@ -790,7 +790,7 @@ DamageTable sDamageTablePresets[] = {
* is out of range.
*/
DamageTable* DamageTable_Get(s32 index) {
- if (index < 0 || index > ARRAY_COUNT(sDamageTablePresets) - 1) {
+ if ((index < 0) || (index >= ARRAY_COUNT(sDamageTablePresets))) {
return NULL;
}
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 8bcd244bd..f3f4043dd 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -1,4 +1,11 @@
#include "global.h"
+#include "z64collision_check.h"
+
+typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*);
+typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*);
+typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*);
+typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*);
+typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*);
Vec3f D_801EDE00;
Vec3f D_801EDE10;
@@ -92,7 +99,8 @@ f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac) {
* factors such as the ac collider's defense.
*/
s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo) {
- if (at->actor != NULL && at->actor->id == ACTOR_EN_BOM && ac->actor != NULL && ac->actor->id == ACTOR_PLAYER) {
+ if ((at->actor != NULL) && (at->actor->id == ACTOR_EN_BOM) && (ac->actor != NULL) &&
+ (ac->actor->id == ACTOR_PLAYER)) {
return 8;
}
return atInfo->toucher.damage;
@@ -1153,7 +1161,7 @@ s32 CollisionCheck_SetAT(PlayState* play, CollisionCheckContext* colCtxt, Collid
}
sATResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->colATCount >= ARRAY_COUNT(colCtxt->colAT)) {
@@ -1179,7 +1187,7 @@ s32 CollisionCheck_SetAT_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co
}
sATResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->sacFlags & SAC_ON) {
@@ -1213,7 +1221,7 @@ s32 CollisionCheck_SetAC(PlayState* play, CollisionCheckContext* colCtxt, Collid
}
sACResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->colACCount >= ARRAY_COUNT(colCtxt->colAC)) {
@@ -1239,7 +1247,7 @@ s32 CollisionCheck_SetAC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co
}
sACResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->sacFlags & SAC_ON) {
@@ -1273,7 +1281,7 @@ s32 CollisionCheck_SetOC(PlayState* play, CollisionCheckContext* colCtxt, Collid
}
sOCResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->colOCCount >= ARRAY_COUNT(colCtxt->colOC)) {
@@ -1299,7 +1307,7 @@ s32 CollisionCheck_SetOC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co
}
sOCResetFuncs[collider->shape](play, collider);
- if (collider->actor != NULL && collider->actor->update == NULL) {
+ if ((collider->actor != NULL) && (collider->actor->update == NULL)) {
return -1;
}
if (colCtxt->sacFlags & SAC_ON) {
@@ -1523,7 +1531,7 @@ void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v
void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos) {
s32 flags = info->toucherFlags & TOUCH_SFX_NONE;
- if (flags == TOUCH_SFX_NORMAL && collider->colType != COLTYPE_METAL) {
+ if ((flags == TOUCH_SFX_NORMAL) && (collider->colType != COLTYPE_METAL)) {
EffectSsHitmark_SpawnFixedScale(play, 0, hitPos);
if (collider->actor == NULL) {
play_sound(NA_SE_IT_SHIELD_BOUND);
@@ -1558,7 +1566,7 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll
* Plays a hit sound effect for AT colliders attached to Player based on the AC element's elemType.
*/
s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) {
- if (at->actor != NULL && at->actor->category == ACTORCAT_PLAYER) {
+ if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) {
if (acInfo->elemType == ELEMTYPE_UNK0) {
Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE);
} else if (acInfo->elemType == ELEMTYPE_UNK1) {
@@ -1652,7 +1660,7 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo
return 0;
}
}
- if ((ac->acFlags & AC_HARD) && at->actor != NULL && ac->actor != NULL) {
+ if ((ac->acFlags & AC_HARD) && (at->actor != NULL) && (ac->actor != NULL)) {
CollisionCheck_SetBounce(at, ac);
}
if (!(acInfo->bumperFlags & BUMP_NO_AT_INFO)) {
@@ -1683,8 +1691,8 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo
acInfo->bumper.hitPos.y = hitPos->y;
acInfo->bumper.hitPos.z = hitPos->z;
}
- if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && ac->colType != COLTYPE_METAL && ac->colType != COLTYPE_WOOD &&
- ac->colType != COLTYPE_HARD) {
+ if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && (ac->colType != COLTYPE_METAL) && (ac->colType != COLTYPE_WOOD) &&
+ (ac->colType != COLTYPE_HARD)) {
acInfo->bumperFlags |= BUMP_DRAW_HITMARK;
} else {
CollisionCheck_HitEffects(play, at, atInfo, ac, acInfo, hitPos);
@@ -1719,7 +1727,7 @@ void CollisionCheck_AC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co
f32 overlapSize;
f32 centerDist;
- if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) {
for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) {
if (CollisionCheck_SkipTouch(&atElem->info)) {
continue;
@@ -1773,7 +1781,7 @@ void CollisionCheck_AC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt
f32 overlapSize;
f32 centerDist;
- if (at->count > 0 && at->elements != NULL && ac->dim.radius > 0 && ac->dim.height > 0) {
+ if ((at->count > 0) && (at->elements != NULL) && (ac->dim.radius > 0) && (ac->dim.height > 0)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -1822,7 +1830,7 @@ void CollisionCheck_AC_JntSphVsTris(PlayState* play, CollisionCheckContext* colC
ColliderTrisElement* acElem;
Vec3f hitPos;
- if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) {
for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) {
if (CollisionCheck_SkipTouch(&atElem->info)) {
continue;
@@ -1858,7 +1866,7 @@ void CollisionCheck_AC_JntSphVsQuad(PlayState* play, CollisionCheckContext* colC
Vec3f hitPos;
ColliderJntSphElement* sphElem;
- if (at->count > 0 && at->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -1898,7 +1906,7 @@ void CollisionCheck_AC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co
f32 overlapSize;
f32 centerDist;
- if (at->count > 0 && at->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -1943,7 +1951,7 @@ void CollisionCheck_AC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCt
f32 centerDist;
ColliderJntSphElement* sphElem;
- if (ac->count > 0 && ac->elements != NULL && at->dim.radius > 0 && at->dim.height > 0) {
+ if ((ac->count > 0) && (ac->elements != NULL) && (at->dim.radius > 0) && (at->dim.height > 0)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -1994,7 +2002,7 @@ void CollisionCheck_AC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt,
f32 overlapSize;
f32 centerDist;
- if (at->dim.radius > 0 && at->dim.height > 0 && ac->dim.radius > 0 && ac->dim.height > 0) {
+ if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->dim.radius > 0) && (ac->dim.height > 0)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -2046,7 +2054,7 @@ void CollisionCheck_AC_CylVsTris(PlayState* play, CollisionCheckContext* colCtxt
ColliderTrisElement* acElem;
Vec3f hitPos;
- if (at->dim.radius > 0 && at->dim.height > 0 && ac->count > 0 && ac->elements != NULL) {
+ if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->count > 0) && (ac->elements != NULL)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2079,7 +2087,7 @@ void CollisionCheck_AC_CylVsQuad(PlayState* play, CollisionCheckContext* colCtxt
ColliderCylinder* at = (ColliderCylinder*)colAT;
ColliderQuad* ac = (ColliderQuad*)colAC;
- if (at->dim.height > 0 && at->dim.radius > 0) {
+ if ((at->dim.height > 0) && (at->dim.radius > 0)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2119,7 +2127,7 @@ void CollisionCheck_AC_CylVsSphere(PlayState* play, CollisionCheckContext* colCt
f32 overlapSize;
f32 centerDist;
- if (at->dim.radius > 0 && at->dim.height > 0) {
+ if ((at->dim.radius > 0) && (at->dim.height > 0)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2166,7 +2174,7 @@ void CollisionCheck_AC_TrisVsJntSph(PlayState* play, CollisionCheckContext* colC
ColliderTrisElement* atElem;
Vec3f hitPos;
- if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) {
+ if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) {
for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) {
if (CollisionCheck_SkipBump(&acElem->info)) {
continue;
@@ -2204,7 +2212,7 @@ void CollisionCheck_AC_TrisVsCyl(PlayState* play, CollisionCheckContext* colCtxt
ColliderCylinder* ac = (ColliderCylinder*)colAC;
ColliderTrisElement* atElem;
- if (ac->dim.radius > 0 && ac->dim.height > 0 && at->count > 0 && at->elements != NULL) {
+ if ((ac->dim.radius > 0) && (ac->dim.height > 0) && (at->count > 0) && (at->elements != NULL)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -2238,7 +2246,7 @@ void CollisionCheck_AC_TrisVsTris(PlayState* play, CollisionCheckContext* colCtx
ColliderTris* ac = (ColliderTris*)colAC;
ColliderTrisElement* acElem;
- if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) {
+ if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) {
for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) {
if (CollisionCheck_SkipBump(&acElem->info)) {
continue;
@@ -2273,7 +2281,7 @@ void CollisionCheck_AC_TrisVsQuad(PlayState* play, CollisionCheckContext* colCtx
ColliderQuad* ac = (ColliderQuad*)colAC;
ColliderTrisElement* atElem;
- if (at->count > 0 && at->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -2312,7 +2320,7 @@ void CollisionCheck_AC_TrisVsSphere(PlayState* play, CollisionCheckContext* colC
ColliderSphere* ac = (ColliderSphere*)colAC;
Vec3f hitPos;
- if (at->count > 0 && at->elements != NULL) {
+ if ((at->count > 0) && (at->elements != NULL)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -2344,7 +2352,7 @@ void CollisionCheck_AC_QuadVsJntSph(PlayState* play, CollisionCheckContext* colC
ColliderQuad* at = (ColliderQuad*)colAT;
ColliderJntSph* ac = (ColliderJntSph*)colAC;
- if (ac->count > 0 && ac->elements != NULL) {
+ if ((ac->count > 0) && (ac->elements != NULL)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2385,7 +2393,7 @@ void CollisionCheck_AC_QuadVsCyl(PlayState* play, CollisionCheckContext* colCtxt
ColliderQuad* at = (ColliderQuad*)colAT;
ColliderCylinder* ac = (ColliderCylinder*)colAC;
- if (ac->dim.height > 0 && ac->dim.radius > 0) {
+ if ((ac->dim.height > 0) && (ac->dim.radius > 0)) {
if (CollisionCheck_SkipBump(&ac->info)) {
return;
}
@@ -2431,7 +2439,7 @@ void CollisionCheck_AC_QuadVsTris(PlayState* play, CollisionCheckContext* colCtx
ColliderTris* ac = (ColliderTris*)colAC;
ColliderTrisElement* acElem;
- if (ac->count > 0 && ac->elements != NULL) {
+ if ((ac->count > 0) && (ac->elements != NULL)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2546,7 +2554,7 @@ void CollisionCheck_AC_SphereVsJntSph(PlayState* play, CollisionCheckContext* co
f32 overlapSize;
f32 centerDist;
- if (ac->count > 0 && ac->elements != NULL) {
+ if ((ac->count > 0) && (ac->elements != NULL)) {
if (CollisionCheck_SkipTouch(&at->info)) {
return;
}
@@ -2739,7 +2747,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt
ColliderJntSphElement* element;
for (element = jntSph->elements; element < &jntSph->elements[jntSph->count]; element++) {
- if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL &&
+ if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) &&
!(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) {
Vec3f hitPos;
@@ -2758,7 +2766,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt
void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) {
ColliderCylinder* cylinder = (ColliderCylinder*)collider;
- if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && cylinder->info.acHitInfo != NULL &&
+ if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && (cylinder->info.acHitInfo != NULL) &&
!(cylinder->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) {
Vec3f hitPos;
@@ -2777,7 +2785,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt
ColliderTrisElement* element;
for (element = tris->elements; element < &tris->elements[tris->count]; element++) {
- if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL &&
+ if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) &&
!(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) {
Vec3f hitPos;
@@ -2796,7 +2804,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt
void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) {
ColliderQuad* quad = (ColliderQuad*)collider;
- if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && quad->info.acHitInfo != NULL &&
+ if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && (quad->info.acHitInfo != NULL) &&
!(quad->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) {
Vec3f hitPos;
@@ -2812,7 +2820,7 @@ void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt
void CollisionCheck_SetSphereHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) {
ColliderSphere* sphere = (ColliderSphere*)collider;
- if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && sphere->info.acHitInfo != NULL &&
+ if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && (sphere->info.acHitInfo != NULL) &&
!(sphere->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) {
Vec3f hitPos;
@@ -2837,8 +2845,8 @@ void CollisionCheck_SetHitEffects(PlayState* play, CollisionCheckContext* colCtx
for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) {
Collider* colAC = *col;
- if (colAC != NULL && (colAC->acFlags & AC_ON)) {
- if (colAC->actor != NULL && colAC->actor->update == NULL) {
+ if ((colAC != NULL) && (colAC->acFlags & AC_ON)) {
+ if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) {
continue;
}
sColChkApplyFuncs[colAC->shape](play, colCtxt, colAC);
@@ -2868,12 +2876,12 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider
for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) {
Collider* colAC = *col;
- if (colAC != NULL && (colAC->acFlags & AC_ON)) {
- if (colAC->actor != NULL && colAC->actor->update == NULL) {
+ if ((colAC != NULL) && (colAC->acFlags & AC_ON)) {
+ if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) {
continue;
}
- if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && colAT != colAC) {
- if (!(colAT->atFlags & AT_SELF) && colAT->actor != NULL && colAC->actor == colAT->actor) {
+ if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && (colAT != colAC)) {
+ if (!(colAT->atFlags & AT_SELF) && (colAT->actor != NULL) && (colAC->actor == colAT->actor)) {
continue;
}
sACVsFuncs[colAT->shape][colAC->shape](play, colCtxt, colAT, colAC);
@@ -2891,15 +2899,15 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider
void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colCtxt) {
Collider** col;
- if (colCtxt->colATCount == 0 || colCtxt->colACCount == 0) {
+ if ((colCtxt->colATCount == 0) || (colCtxt->colACCount == 0)) {
return;
}
for (col = &colCtxt->colAT[0]; col < &colCtxt->colAT[colCtxt->colATCount]; col++) {
Collider* colAC = *col;
- if (colAC != NULL && (colAC->atFlags & AT_ON)) {
- if (colAC->actor != NULL && colAC->actor->update == NULL) {
+ if ((colAC != NULL) && (colAC->atFlags & AT_ON)) {
+ if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) {
continue;
}
CollisionCheck_AC(play, colCtxt, colAC);
@@ -2958,7 +2966,8 @@ void CollisionCheck_SetOCvsOC(PlayState* play, Collider* left, ColliderInfo* lef
right->ocFlags2 |= OC2_HIT_PLAYER;
}
- if (leftActor == NULL || rightActor == NULL || (left->ocFlags1 & OC1_NO_PUSH) || (right->ocFlags1 & OC1_NO_PUSH)) {
+ if ((leftActor == NULL) || (rightActor == NULL) || (left->ocFlags1 & OC1_NO_PUSH) ||
+ (right->ocFlags1 & OC1_NO_PUSH)) {
return;
}
@@ -3032,7 +3041,7 @@ void CollisionCheck_OC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co
ColliderJntSphElement* rightElem;
f32 overlap;
- if (left->count > 0 && left->elements != NULL && right->count > 0 && right->elements != NULL &&
+ if ((left->count > 0) && (left->elements != NULL) && (right->count > 0) && (right->elements != NULL) &&
(left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON)) {
for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) {
@@ -3067,7 +3076,7 @@ void CollisionCheck_OC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt
ColliderJntSphElement* leftElem;
f32 overlap;
- if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) &&
+ if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) &&
(right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) {
for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) {
@@ -3096,7 +3105,7 @@ void CollisionCheck_OC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co
ColliderJntSphElement* leftElem;
f32 overlap;
- if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) &&
+ if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) &&
(right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) {
for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) {
@@ -3252,11 +3261,11 @@ void CollisionCheck_OC(PlayState* play, CollisionCheckContext* colCtxt) {
ColChkVsFunc vsFunc;
for (left = colCtxt->colOC; left < colCtxt->colOC + colCtxt->colOCCount; left++) {
- if (*left == NULL || CollisionCheck_SkipOC(*left)) {
+ if ((*left == NULL) || CollisionCheck_SkipOC(*left)) {
continue;
}
for (right = left + 1; right < colCtxt->colOC + colCtxt->colOCCount; right++) {
- if (*right == NULL || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) {
+ if ((*right == NULL) || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) {
continue;
}
vsFunc = sOCVsFuncs[(*left)->shape][(*right)->shape];
@@ -3353,7 +3362,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt,
at = info->acHit;
atInfo = info->acHitInfo;
- if (at != NULL && atInfo != NULL && collider != NULL && info != NULL) {
+ if ((at != NULL) && (atInfo != NULL) && (collider != NULL) && (info != NULL)) {
damage = CollisionCheck_GetDamageAndEffectOnBumper(at, atInfo, collider, info, &effect);
if (CollisionCheck_GetToucherDamage(at, atInfo, collider, info) != 0) {
@@ -3373,7 +3382,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt,
collider->actor->colChkInfo.damageEffect = effect;
}
if (!(collider->acFlags & AC_HARD) ||
- ((collider->acFlags & AC_HARD) && atInfo->toucher.dmgFlags == 0x20000000)) {
+ ((collider->acFlags & AC_HARD) && (atInfo->toucher.dmgFlags == 0x20000000))) {
if (collider->actor->colChkInfo.damage < finalDamage) {
collider->actor->colChkInfo.damage = finalDamage;
}
@@ -3388,7 +3397,7 @@ void CollisionCheck_ApplyDamageJntSph(PlayState* play, CollisionCheckContext* co
ColliderJntSph* jntSph = (ColliderJntSph*)collider;
s32 i;
- if (jntSph->count > 0 && jntSph->elements != NULL) {
+ if ((jntSph->count > 0) && (jntSph->elements != NULL)) {
for (i = 0; i < jntSph->count; i++) {
CollisionCheck_ApplyDamage(play, colCtxt, &jntSph->base, &jntSph->elements[i].info);
}
@@ -3965,7 +3974,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
if (SQ(actorDotItemXZ) < (4.0f * SQXZ(itemStep) * radSqDiff)) {
return 0;
}
- if (SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff) > zero) {
+ if ((SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff)) > zero) {
intersect1 = intersect2 = 1;
} else {
intersect1 = 1;
@@ -4005,12 +4014,12 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
}
if (intersect2 == 0) {
- if (frac1 < 0.0f || 1.0f < frac1) {
+ if ((frac1 < 0.0f) || (1.0f < frac1)) {
return 0;
}
} else {
- test1 = (frac1 < 0.0f || 1.0f < frac1);
- test2 = (frac2 < 0.0f || 1.0f < frac2);
+ test1 = (frac1 < 0.0f) || (1.0f < frac1);
+ test2 = (frac2 < 0.0f) || (1.0f < frac2);
if (test1 && test2) {
return 0;
@@ -4024,14 +4033,14 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
}
if ((intersect1 != 0) &&
- ((frac1 * itemStep.y + actorToItem.y < 0.0f) || (height < frac1 * itemStep.y + actorToItem.y))) {
+ (((frac1 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac1 * itemStep.y + actorToItem.y)))) {
intersect1 = 0;
}
if ((intersect2 != 0) &&
- ((frac2 * itemStep.y + actorToItem.y < 0.0f) || (height < frac2 * itemStep.y + actorToItem.y))) {
+ (((frac2 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac2 * itemStep.y + actorToItem.y)))) {
intersect2 = 0;
}
- if (intersect1 == 0 && intersect2 == 0) {
+ if ((intersect1 == 0) && (intersect2 == 0)) {
return 0;
} else if ((intersect1 != 0) && (intersect2 != 0)) {
out1->x = frac1 * itemStep.x + actorToItem.x + actorPos->x;
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 0e682231f..46dfe189e 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -8,10 +8,10 @@ void SaveContext_Init(void) {
gSaveContext.save.playerForm = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
- gSaveContext.unk_3F46 = NA_BGM_GENERAL_SFX;
+ gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX;
gSaveContext.nextCutsceneIndex = 0xFFEF;
gSaveContext.cutsceneTrigger = 0;
- gSaveContext.unk_3F4D = 0;
+ gSaveContext.chamberCutsceneNum = 0;
gSaveContext.nextDayTime = 0xFFFF;
gSaveContext.skyboxTime = 0;
gSaveContext.dogIsLost = true;
@@ -19,6 +19,6 @@ void SaveContext_Init(void) {
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
gSaveContext.options.language = 1;
- gSaveContext.options.audioSetting = 0;
+ gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.zTargetSetting = 0;
}
diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c
index d9f20d72b..9dd4d86b2 100644
--- a/src/code/z_debug_display.c
+++ b/src/code/z_debug_display.c
@@ -67,7 +67,7 @@ void DebugDisplay_DrawObjects(PlayState* play) {
void DebugDisplay_DrawSpriteI8(DebugDispObject* dispObj, void* texture, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C6FC(play->state.gfxCtx);
+ Gfx_SetupDL47_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a);
Matrix_Translate(dispObj->pos.x, dispObj->pos.y, dispObj->pos.z, MTXMODE_NEW);
@@ -90,7 +90,7 @@ Lights1 sDebugDisplayLight1 = gdSPDefLights1(128, 128, 128, 255, 255, 255, 73, 7
void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* dList, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C588(play->state.gfxCtx);
+ Gfx_SetupDL4_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a);
@@ -113,7 +113,7 @@ void DebugDisplay_DrawPath(PlayState* play, Path* path) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C560(play->state.gfxCtx);
+ Gfx_SetupDL38_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, DebugDisplay_PathDisplayList(play->state.gfxCtx, path));
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 733ec4bc1..00ee877e9 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -171,15 +171,15 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_CLOUDY_SKY:
if (isFirstFrame) {
- play->envCtx.unk_19 = 1;
- play->envCtx.unk_17 = 1;
- play->envCtx.unk_18 = 0;
- play->envCtx.unk_1A = 0x3C;
- play->envCtx.unk_21 = 1;
- play->envCtx.unk_1F = 0;
- play->envCtx.unk_20 = 1;
- play->envCtx.unk_24 = 0x3C;
- play->envCtx.unk_22 = play->envCtx.unk_24;
+ play->envCtx.changeSkyboxState = 1;
+ play->envCtx.skyboxConfig = 1;
+ play->envCtx.changeSkyboxNextConfig = 0;
+ play->envCtx.changeSkyboxTimer = 60;
+ play->envCtx.changeLightEnabled = true;
+ play->envCtx.lightConfig = 0;
+ play->envCtx.changeLightNextConfig = 1;
+ play->envCtx.changeDuration = 60;
+ play->envCtx.changeLightTimer = play->envCtx.changeDuration;
}
break;
@@ -327,8 +327,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_MOON_CRASH_SKYBOX:
if (isFirstFrame) {
- // skyboxConfig
- play->envCtx.unk_17 = 0xD;
+ play->envCtx.skyboxConfig = 0xD;
}
break;
diff --git a/src/code/z_draw.c b/src/code/z_draw.c
index a2686be8e..e6a814e2a 100644
--- a/src/code/z_draw.c
+++ b/src/code/z_draw.c
@@ -115,9 +115,9 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId);
void GetItem_DrawRemains(PlayState* play, s16 drawId);
typedef struct {
- /* 0x00 */ void (*drawFunc)(PlayState*, s16);
- /* 0x04 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*)
-} DrawItemTableEntry; // size = 0x24
+ /* 0x0 */ void (*drawFunc)(PlayState*, s16);
+ /* 0x4 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*)
+} DrawItemTableEntry; // size = 0x24
static DrawItemTableEntry sDrawItemTable[] = {
// GID_BOTTLE, OBJECT_GI_BOTTLE
@@ -386,7 +386,7 @@ void GetItem_DrawBombchu(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C214(play->state.gfxCtx);
+ Gfx_SetupDL23_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
@@ -399,12 +399,12 @@ void GetItem_DrawPoes(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -430,12 +430,12 @@ void GetItem_DrawFairyBottle(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -459,12 +459,12 @@ void GetItem_DrawSkullToken(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 5),
@@ -480,12 +480,12 @@ void GetItem_DrawCompass(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 5);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_5);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -498,7 +498,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, -play->state.frames, play->state.frames, 32, 32, 1,
@@ -509,7 +509,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) {
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[4]);
@@ -523,7 +523,7 @@ void GetItem_DrawGoronSword(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 1, play->state.frames * 0, 32,
@@ -539,7 +539,7 @@ void GetItem_DrawDekuNuts(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 6, play->state.frames * 6, 32,
@@ -555,7 +555,7 @@ void GetItem_DrawRecoveryHeart(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 3),
@@ -571,7 +571,7 @@ void GetItem_DrawFish(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 1, 32,
@@ -590,7 +590,7 @@ void GetItem_DrawOpa0(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
@@ -606,12 +606,12 @@ void GetItem_DrawOpa0Xlu1(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -627,7 +627,7 @@ void GetItem_DrawOpa01(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
@@ -644,7 +644,7 @@ void GetItem_DrawXlu01(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]);
@@ -659,12 +659,12 @@ void GetItem_DrawSeahorse(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -685,8 +685,8 @@ void GetItem_DrawFairyContainer(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiFairyBottleTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -710,8 +710,8 @@ void GetItem_DrawMoonsTear(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -730,12 +730,12 @@ void GetItem_DrawMagicArrow(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -749,7 +749,7 @@ void GetItem_DrawUpgrades(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -765,13 +765,13 @@ void GetItem_DrawRupee(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]);
@@ -786,13 +786,13 @@ void GetItem_DrawSmallRupee(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]);
@@ -806,7 +806,7 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
@@ -831,7 +831,7 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) {
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c
index 5f0221969..775db80e1 100644
--- a/src/code/z_eff_blure.c
+++ b/src/code/z_eff_blure.c
@@ -114,23 +114,17 @@ void EffectBlure_Init1(void* thisx, void* initParamsx) {
EffectBlureInit1* initParams = (EffectBlureInit1*)initParamsx;
if ((this != NULL) && (initParams != NULL)) {
+ s32 i;
+
EffectBlure_InitElements(this);
- this->p1StartColor.r = initParams->p1StartColor[0];
- this->p2StartColor.r = initParams->p2StartColor[0];
- this->p1EndColor.r = initParams->p1EndColor[0];
- this->p2EndColor.r = initParams->p2EndColor[0];
- this->p1StartColor.g = initParams->p1StartColor[1];
- this->p2StartColor.g = initParams->p2StartColor[1];
- this->p1EndColor.g = initParams->p1EndColor[1];
- this->p2EndColor.g = initParams->p2EndColor[1];
- this->p1StartColor.b = initParams->p1StartColor[2];
- this->p2StartColor.b = initParams->p2StartColor[2];
- this->p1EndColor.b = initParams->p1EndColor[2];
- this->p2EndColor.b = initParams->p2EndColor[2];
- this->p1StartColor.a = initParams->p1StartColor[3];
- this->p2StartColor.a = initParams->p2StartColor[3];
- this->p1EndColor.a = initParams->p1EndColor[3];
- this->p2EndColor.a = initParams->p2EndColor[3];
+
+ for (i = 0; i < 4; i++) {
+ this->p1StartColor[i] = initParams->p1StartColor[i];
+ this->p2StartColor[i] = initParams->p2StartColor[i];
+ this->p1EndColor[i] = initParams->p1EndColor[i];
+ this->p2EndColor[i] = initParams->p2EndColor[i];
+ }
+
this->elemDuration = initParams->elemDuration;
this->unkFlag = initParams->unkFlag;
this->calcMode = initParams->calcMode;
@@ -155,23 +149,17 @@ void EffectBlure_Init2(void* thisx, void* initParamsx) {
EffectBlureInit2* initParams = (EffectBlureInit2*)initParamsx;
if ((this != NULL) && (initParams != NULL)) {
+ s32 i;
+
EffectBlure_InitElements(this);
- this->p1StartColor.r = initParams->p1StartColor[0];
- this->p2StartColor.r = initParams->p2StartColor[0];
- this->p1EndColor.r = initParams->p1EndColor[0];
- this->p2EndColor.r = initParams->p2EndColor[0];
- this->p1StartColor.g = initParams->p1StartColor[1];
- this->p2StartColor.g = initParams->p2StartColor[1];
- this->p1EndColor.g = initParams->p1EndColor[1];
- this->p2EndColor.g = initParams->p2EndColor[1];
- this->p1StartColor.b = initParams->p1StartColor[2];
- this->p2StartColor.b = initParams->p2StartColor[2];
- this->p1EndColor.b = initParams->p1EndColor[2];
- this->p2EndColor.b = initParams->p2EndColor[2];
- this->p1StartColor.a = initParams->p1StartColor[3];
- this->p2StartColor.a = initParams->p2StartColor[3];
- this->p1EndColor.a = initParams->p1EndColor[3];
- this->p2EndColor.a = initParams->p2EndColor[3];
+
+ for (i = 0; i < 4; i++) {
+ this->p1StartColor[i] = initParams->p1StartColor[i];
+ this->p2StartColor[i] = initParams->p2StartColor[i];
+ this->p1EndColor[i] = initParams->p1EndColor[i];
+ this->p2EndColor[i] = initParams->p2EndColor[i];
+ }
+
this->elemDuration = initParams->elemDuration;
this->unkFlag = initParams->unkFlag;
this->calcMode = initParams->calcMode;
@@ -372,21 +360,21 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3
color1->r = color1->g = color1->b = color1->a = 255;
color2->r = color2->g = color2->b = color2->a = 255;
} else {
- color1->r = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio);
- color1->g = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio);
- color1->b = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio);
- color1->a = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio);
- color2->r = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio);
- color2->g = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio);
- color2->b = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio);
- color2->a = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio);
+ color1->r = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio);
+ color1->g = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio);
+ color1->b = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio);
+ color1->a = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio);
+ color2->r = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio);
+ color2->g = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio);
+ color2->b = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio);
+ color2->a = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio);
}
}
void EffectBlure_SetupSmooth(EffectBlure* this, GraphicsContext* gfxCtx) {
OPEN_DISPS(gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38);
CLOSE_DISPS(gfxCtx);
}
@@ -573,16 +561,16 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem
vtx[0].v = baseVtx;
vtx[1].v = baseVtx;
- vtx[0].v.ob[0] = func_80086814(sp158.x);
- vtx[0].v.ob[1] = func_80086814(sp158.y);
- vtx[0].v.ob[2] = func_80086814(sp158.z);
+ vtx[0].v.ob[0] = Math_FNearbyIntF(sp158.x);
+ vtx[0].v.ob[1] = Math_FNearbyIntF(sp158.y);
+ vtx[0].v.ob[2] = Math_FNearbyIntF(sp158.z);
vtx[0].v.cn[0] = sp148.r;
vtx[0].v.cn[1] = sp148.g;
vtx[0].v.cn[2] = sp148.b;
vtx[0].v.cn[3] = sp148.a;
- vtx[1].v.ob[0] = func_80086814(sp14C.x);
- vtx[1].v.ob[1] = func_80086814(sp14C.y);
- vtx[1].v.ob[2] = func_80086814(sp14C.z);
+ vtx[1].v.ob[0] = Math_FNearbyIntF(sp14C.x);
+ vtx[1].v.ob[1] = Math_FNearbyIntF(sp14C.y);
+ vtx[1].v.ob[2] = Math_FNearbyIntF(sp14C.z);
vtx[1].v.cn[0] = sp144.r;
vtx[1].v.cn[1] = sp144.g;
vtx[1].v.cn[2] = sp144.b;
@@ -618,17 +606,17 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem
vtx[j1].v = baseVtx;
vtx[j2].v = baseVtx;
- vtx[j1].v.ob[0] = func_80086814(sp158.x);
- vtx[j1].v.ob[1] = func_80086814(sp158.y);
- vtx[j1].v.ob[2] = func_80086814(sp158.z);
+ vtx[j1].v.ob[0] = Math_FNearbyIntF(sp158.x);
+ vtx[j1].v.ob[1] = Math_FNearbyIntF(sp158.y);
+ vtx[j1].v.ob[2] = Math_FNearbyIntF(sp158.z);
vtx[j1].v.cn[0] = func_800B0A24(sp1A4.r, sp19C.r, temp_f28);
vtx[j1].v.cn[1] = func_800B0A24(sp1A4.g, sp19C.g, temp_f28);
vtx[j1].v.cn[2] = func_800B0A24(sp1A4.b, sp19C.b, temp_f28);
vtx[j1].v.cn[3] = func_800B0A24(sp1A4.a, sp19C.a, temp_f28);
- vtx[j2].v.ob[0] = func_80086814(sp14C.x);
- vtx[j2].v.ob[1] = func_80086814(sp14C.y);
- vtx[j2].v.ob[2] = func_80086814(sp14C.z);
+ vtx[j2].v.ob[0] = Math_FNearbyIntF(sp14C.x);
+ vtx[j2].v.ob[1] = Math_FNearbyIntF(sp14C.y);
+ vtx[j2].v.ob[2] = Math_FNearbyIntF(sp14C.z);
vtx[j2].v.cn[0] = func_800B0A24(sp1A0.r, sp198.r, temp_f28);
vtx[j2].v.cn[1] = func_800B0A24(sp1A0.g, sp198.g, temp_f28);
vtx[j2].v.cn[2] = func_800B0A24(sp1A0.b, sp198.b, temp_f28);
@@ -705,7 +693,7 @@ void EffectBlure_DrawSmooth(EffectBlure* this2, GraphicsContext* gfxCtx) {
void EffectBlure_SetupSimple(GraphicsContext* gfxCtx, EffectBlure* this, Vtx* vtx) {
OPEN_DISPS(gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38);
CLOSE_DISPS(gfxCtx);
}
@@ -714,7 +702,7 @@ void EffectBlure_SetupSimpleAlt(GraphicsContext* gfxCtx, EffectBlure* this, Vtx*
OPEN_DISPS(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38);
gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE);
gDPSetTextureLUT(POLY_XLU_DISP++, G_TT_NONE);
@@ -765,7 +753,7 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this,
j = 0;
- for (i = 0; i < this->numElements - 1; i++) {
+ for (i = 0; i < this->numElements - 1; i++, j += 4) {
if (this->drawMode == 1) {
alphaRatio = (f32)this->elements[i].timer / (f32)this->elemDuration;
gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x80, this->altPrimColor.r, this->altPrimColor.g,
@@ -773,45 +761,43 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this,
gDPPipeSync(POLY_XLU_DISP++);
}
- if (1) {} // Necessary to match
-
gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0);
gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0);
- if (this->flags & 4) {
- sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) * 0.5f;
- sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) * 0.5f;
- sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) * 0.5f;
- sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) * 0.5f;
- sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) * 0.5f;
- sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) * 0.5f;
-
- Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198);
- scale = sqrtf(SQXYZ(sp198));
-
- if (fabsf(scale) > 0.0005f) {
- scale = 1.0f / scale;
- Math_Vec3f_Scale(&sp198, scale);
-
- SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z);
- SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z);
- SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4);
- SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z);
- SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94);
-
- mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94);
- if (mtx == NULL) {
- break;
- }
-
- gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0);
- gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0);
- gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- }
+ if (!(this->flags & 4)) {
+ continue;
}
- j += 4;
+ sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) / 2.0f;
+ sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) / 2.0f;
+ sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) / 2.0f;
+ sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) / 2.0f;
+ sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) / 2.0f;
+ sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) / 2.0f;
+
+ Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198);
+ scale = sqrtf(SQXYZ(sp198));
+
+ if (fabsf(scale) > 0.0005f) {
+ scale = 1.0f / scale;
+ Math_Vec3f_Scale(&sp198, scale);
+
+ SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z);
+ SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z);
+ SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4);
+ SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z);
+ SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94);
+
+ mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94);
+ if (mtx == NULL) {
+ break;
+ }
+
+ gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0);
+ gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0);
+ gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ }
}
}
@@ -938,7 +924,7 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
if (this->numElements != 0) {
if (this->flags == 0) {
- func_8012C560(gfxCtx);
+ Gfx_SetupDL38_Xlu(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
vtx = GRAPH_ALLOC(gfxCtx, 32 * sizeof(Vtx));
@@ -992,19 +978,19 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
vtx[j].v.flag = 0;
vtx[j].v.tc[0] = 0;
vtx[j].v.tc[1] = 0;
- vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio);
- vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio);
- vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio);
- vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio);
+ vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio);
+ vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio);
+ vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio);
+ vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio);
j++;
vtx[j].v.flag = 0;
vtx[j].v.tc[0] = 0;
vtx[j].v.tc[1] = 0;
- vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio);
- vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio);
- vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio);
- vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio);
+ vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio);
+ vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio);
+ vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio);
+ vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio);
j++;
}
}
diff --git a/src/code/z_eff_footmark.c b/src/code/z_eff_footmark.c
index bcf6ff824..806cc45e0 100644
--- a/src/code/z_eff_footmark.c
+++ b/src/code/z_eff_footmark.c
@@ -105,7 +105,7 @@ void EffFootmark_Draw(PlayState* play) {
s32 i;
GraphicsContext* gfxCtx = play->state.gfxCtx;
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gSPDisplayList(gfxCtx->polyXlu.p++, gEffFootprintMaterialDL);
diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c
index 90833947b..e15874a78 100644
--- a/src/code/z_eff_shield_particle.c
+++ b/src/code/z_eff_shield_particle.c
@@ -149,7 +149,7 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) {
OPEN_DISPS(gfxCtx);
if (this != NULL) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38);
gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE);
gDPPipeSync(POLY_XLU_DISP++);
diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c
index fdd25a6b4..77b40e3ed 100644
--- a/src/code/z_eff_spark.c
+++ b/src/code/z_eff_spark.c
@@ -148,7 +148,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
if (this != NULL) {
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38);
gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE);
gDPPipeSync(POLY_XLU_DISP++);
diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c
index d7754c5a7..55c15714e 100644
--- a/src/code/z_eff_tire_mark.c
+++ b/src/code/z_eff_tire_mark.c
@@ -80,7 +80,8 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f
spAC->flags |= 1;
}
- if (spA8) {} // Necessary to match
+ //! FAKE:
+ if (spA8) {}
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
@@ -231,7 +232,7 @@ void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) {
if (vtx != NULL) {
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP++, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP++, SETUPDL_44);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
gDPLoadTextureBlock(POLY_OPA_DISP++, gameplay_keep_Tex_014570, G_IM_FMT_I, G_IM_SIZ_8b, 64, 32, 0,
diff --git a/src/code/z_effect.c b/src/code/z_effect.c
index b4a76380e..60a98c4d9 100644
--- a/src/code/z_effect.c
+++ b/src/code/z_effect.c
@@ -187,33 +187,31 @@ void Effect_DrawAll(GraphicsContext* gfxCtx) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.sparks[i].status.active) {
- sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx);
+ if (!sEffectContext.sparks[i].status.active) {
+ continue;
}
+ sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx);
}
for (i = 0; i < BLURE_COUNT; i++) {
- if (1) {
- if (gfxCtx) {}
- } // necessary to match
- if (sEffectContext.blures[i].status.active) {
- sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx);
+ if (!sEffectContext.blures[i].status.active) {
+ continue;
}
+ sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx);
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.shieldParticles[i].status.active) {
- sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx);
+ if (!sEffectContext.shieldParticles[i].status.active) {
+ continue;
}
+ sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx);
}
- if (1) {} // necessary to match
for (i = 0; i < TIRE_MARK_COUNT; i++) {
- if (sEffectContext.tireMarks[i].status.active) {
- sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx);
+ if (!sEffectContext.tireMarks[i].status.active) {
+ continue;
}
+ sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx);
}
}
@@ -221,38 +219,38 @@ void Effect_UpdateAll(PlayState* play) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.sparks[i].status.active) {
- if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) {
- Effect_Destroy(play, i);
- }
+ if (!sEffectContext.sparks[i].status.active) {
+ continue;
+ }
+ if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) {
+ Effect_Destroy(play, i);
}
}
for (i = 0; i < BLURE_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.blures[i].status.active) {
- if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) {
- Effect_Destroy(play, i + SPARK_COUNT);
- }
+ if (!sEffectContext.blures[i].status.active) {
+ continue;
+ }
+ if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) {
+ Effect_Destroy(play, i + SPARK_COUNT);
}
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.shieldParticles[i].status.active) {
- if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) {
- Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT);
- }
+ if (!sEffectContext.shieldParticles[i].status.active) {
+ continue;
+ }
+ if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) {
+ Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT);
}
}
for (i = 0; i < TIRE_MARK_COUNT; i++) {
- if (1) {} // necessary to match
- if (sEffectContext.tireMarks[i].status.active) {
- if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) {
- Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT);
- }
+ if (!sEffectContext.tireMarks[i].status.active) {
+ continue;
+ }
+ if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) {
+ Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT);
}
}
}
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index 775b68f01..186608729 100644
--- a/src/code/z_effect_soft_sprite.c
+++ b/src/code/z_effect_soft_sprite.c
@@ -273,6 +273,7 @@ void EffectSS_DrawAllParticles(PlayState* play) {
s16 func_800B096C(s16 arg0, s16 arg1, s32 arg2) {
s16 ret = (arg2 == 0) ? arg1 : arg0 + (s32)((arg1 - arg0) / (f32)arg2);
+
return ret;
}
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 0b08f4dd0..17852c4c1 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -58,7 +58,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(texture));
- func_8012C9BC(gfxCtx);
+ Gfx_SetupDL61_Xlu(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rgPrimColorR, this->rgPrimColorG, this->rgPrimColorB,
this->rgPrimColorA);
gDPSetEnvColor(POLY_XLU_DISP++, this->rgEnvColorR, this->rgEnvColorG, this->rgEnvColorB, this->rgEnvColorA);
diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c
index 674f4bfa4..b5992dec4 100644
--- a/src/code/z_en_hy_code.c
+++ b/src/code/z_en_hy_code.c
@@ -69,13 +69,13 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) {
do {
doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
door = (EnDoor*)doorIter;
- dist = Actor_WorldDistXYZToActor(actor, &door->dyna.actor);
+ dist = Actor_WorldDistXYZToActor(actor, &door->knobDoor.dyna.actor);
if (!isSetup || (dist < minDist)) {
nearestDoor = door;
minDist = dist;
isSetup = true;
}
- doorIter = door->dyna.actor.next;
+ doorIter = door->knobDoor.dyna.actor.next;
} while (doorIter != NULL);
if (1) {}
@@ -134,16 +134,16 @@ void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4
Vec3f offset;
f32 phi_f0;
- Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &enHy->actor.world.pos);
+ Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &enHy->actor.world.pos);
phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f;
animIndex = ((s8)phi_f0 < 0) ? 0 : 2;
EnHy_ChangeObjectAndAnim(enHy, play, (animIndex == 0) ? arg3 : arg4);
enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable;
enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable;
- enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATEY | ANIM_FLAG_1);
+ enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATE_Y | ANIM_FLAG_1);
AnimationContext_SetMoveActor(play, &enHy->actor, &enHy->skelAnime, 1.0f);
- door->unk_1A1 = 1;
- door->animIndex = animIndex;
+ door->knobDoor.playOpenAnim = true;
+ door->knobDoor.animIndex = animIndex;
}
s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) {
@@ -157,7 +157,7 @@ s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg
if (door != NULL) {
ret = true;
func_800F0BB4(enHy, play, door, arg3, arg4);
- yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos);
+ yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos);
enHy->actor.world.pos.x += arg5 * Math_SinS(yaw);
enHy->actor.world.pos.z += arg5 * Math_CosS(yaw);
enHy->actor.world.rot.y = -yaw;
@@ -179,7 +179,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) {
if (door != NULL) {
ret = true;
func_800F0BB4(enHy, play, door, arg2, arg3);
- enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos);
+ enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos);
enHy->actor.world.rot.y = enHy->actor.shape.rot.y;
enHy->actor.gravity = 0.0f;
enHy->actor.flags &= ~ACTOR_FLAG_1;
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 44e8703a2..886c3c942 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -127,7 +127,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
break;
case ITEM00_RECOVERY_HEART:
- this->actor.home.rot.z = randPlusMinusPoint5Scaled(0xFFFF);
+ this->actor.home.rot.z = Rand_CenteredFloat(0xFFFF);
shadowOffset = 430.0f;
Actor_SetScale(&this->actor, 0.02f);
this->unk154 = 0.02f;
@@ -381,9 +381,9 @@ void func_800A6650(EnItem00* this, PlayState* play) {
}
if ((play->gameplayFrames & 1) != 0) {
- pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(10.0f);
- pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(10.0f);
- pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(10.0f);
+ pos.x = this->actor.world.pos.x + Rand_CenteredFloat(10.0f);
+ pos.y = this->actor.world.pos.y + Rand_CenteredFloat(10.0f);
+ pos.z = this->actor.world.pos.z + Rand_CenteredFloat(10.0f);
EffectSsKirakira_SpawnSmall(play, &pos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, &sEffectEnvColor);
}
@@ -783,7 +783,7 @@ void EnItem00_DrawRupee(EnItem00* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
if (this->actor.params <= ITEM00_RUPEE_RED) {
@@ -834,7 +834,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) {
}
}
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sItemDropTextures[texIndex]));
@@ -851,7 +851,7 @@ void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) {
if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Scale(20.0f, 20.0f, 20.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
@@ -868,7 +868,7 @@ void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
@@ -956,7 +956,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
}
spawnedActor->speed = 2.0f;
spawnedActor->gravity = -0.9f;
- spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000);
+ spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000);
Actor_SetScale(spawnedActor, 0.0f);
((EnItem00*)spawnedActor)->actionFunc = func_800A6780;
((EnItem00*)spawnedActor)->unk152 = 0xDC;
@@ -1011,7 +1011,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
} else {
spawnedActor->gravity = -0.9f;
}
- spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000);
+ spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000);
spawnedActor->flags |= 0x10;
}
}
diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c
index aec6fdbb0..121957396 100644
--- a/src/code/z_eventmgr.c
+++ b/src/code/z_eventmgr.c
@@ -36,7 +36,7 @@ ActorCutscene sGlobalCutsceneList[] = {
typedef enum {
/* 0 */ CS_START_0,
/* 1 */ CS_START_1,
- /* 2 */ CS_START_2,
+ /* 2 */ CS_START_2
} ActorCutsceneStartMethod;
typedef struct {
@@ -371,7 +371,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) {
Camera* retCam;
s32 csType = 0;
- if ((csId < 0) || (sCutsceneMgr.csId != CS_ID_NONE)) {
+ if ((csId <= CS_ID_NONE) || (sCutsceneMgr.csId != CS_ID_NONE)) {
return csId;
}
@@ -437,7 +437,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) {
s16 CutsceneManager_Stop(s16 csId) {
ActorCutscene* csEntry;
- if (csId < 0) {
+ if (csId <= CS_ID_NONE) {
return csId;
}
@@ -468,28 +468,28 @@ ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId) {
}
s16 CutsceneManager_GetAdditionalCsId(s16 csId) {
- if (csId < 0) {
+ if (csId <= CS_ID_NONE) {
return CS_ID_NONE;
}
return CutsceneManager_GetCutsceneEntryImpl(csId)->additionalCsId;
}
s16 CutsceneManager_GetLength(s16 csId) {
- if (csId < 0) {
+ if (csId <= CS_ID_NONE) {
return -1;
}
return CutsceneManager_GetCutsceneEntryImpl(csId)->length;
}
s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId) {
- if (csId < 0) {
+ if (csId <= CS_ID_NONE) {
return -1;
}
return CutsceneManager_GetCutsceneEntryImpl(csId)->scriptIndex;
}
s16 CutsceneManager_GetCutsceneCustomValue(s16 csId) {
- if (csId < 0) {
+ if (csId <= CS_ID_NONE) {
return -1;
}
return CutsceneManager_GetCutsceneEntryImpl(csId)->customValue;
diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c
index bc07df883..185373e06 100644
--- a/src/code/z_fbdemo_circle.c
+++ b/src/code/z_fbdemo_circle.c
@@ -2,7 +2,7 @@
typedef enum {
/* 0 */ TRANS_CIRCLE_DIR_IN,
- /* 1 */ TRANS_CIRCLE_DIR_OUT,
+ /* 1 */ TRANS_CIRCLE_DIR_OUT
} TransitionCircleDirection;
Gfx sTransCircleSetupDL[] = {
@@ -82,8 +82,8 @@ void TransitionCircle_SetType(void* thisx, s32 type) {
void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt,
f32 arg6) {
Gfx* gfx = *gfxp;
- s32 xh = D_801FBBCC;
- s32 yh = D_801FBBCE;
+ s32 xh = gCfbWidth;
+ s32 yh = gCfbHeight;
s32 width = 1 << masks;
s32 height = 1 << maskt;
f32 s;
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index 114e62cc7..98d14874b 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -67,8 +67,7 @@ void FireObj_StepSize(FireObj* fire) {
if (Math_StepToF(&fire->dynamicSize, 1.0f, fire->dynamicSizeStep)) {
FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_FULLY_LIT);
}
- } else if ((fire->state == FIRE_STATE_SHRINKING) &&
- (Math_StepToF(&fire->dynamicSize, 0.0f, fire->dynamicSizeStep))) {
+ } else if ((fire->state == FIRE_STATE_SHRINKING) && Math_StepToF(&fire->dynamicSize, 0.0f, fire->dynamicSizeStep)) {
FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_NOT_LIT);
}
if (fire->sizeGrowsCos2 == 1) {
@@ -142,7 +141,8 @@ void FireObj_Draw(PlayState* play, FireObj* fire) {
Vec3s vec;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128));
diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c
index 1b82705f5..7336b01f6 100644
--- a/src/code/z_game_dlftbls.c
+++ b/src/code/z_game_dlftbls.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "overlays/gamestates/ovl_select/z_select.h"
#include "overlays/gamestates/ovl_title/z_title.h"
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index d0e5e45f2..c3c6819be 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -49,7 +49,7 @@ void GameOver_Update(PlayState* play) {
}
}
- gSaveContext.unk_3DC0 = 2000;
+ gSaveContext.nayrusLoveTimer = 2000;
gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index 976ea2948..ac0142fae 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -1,21 +1,233 @@
#include "global.h"
+#include "z64horse.h"
+#include "overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h"
+#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3940.s")
+s32 Horse_GetJumpingFencePathIndex(PlayState* play) {
+ Actor* actor;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F39B4.s")
+ for (actor = NULL;; actor = actor->next) {
+ actor = SubS_FindActor(play, actor, ACTORCAT_PROP, ACTOR_BG_UMAJUMP);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3A64.s")
+ if (actor == NULL) {
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B2C.s")
+ if (actor->params == BG_UMAJUMP_TYPE_2) {
+ return ((BgUmajump*)actor)->pathIndex;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B68.s")
+ return -1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3C44.s")
+// unused
+s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4) {
+ Path* path = &play->setupPathList[pathIndex];
+ Vec3s* points;
+ s32 count = path->count;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3ED4.s")
+ dst->x = 0;
+ dst->y = 0;
+ dst->z = 0;
+ *arg4 = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F40A0.s")
+ if (count == 0) {
+ return false;
+ }
+ if (pointIndex >= count) {
+ return false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F415C.s")
+ points = Lib_SegmentedToVirtual(path->points);
+ points += pointIndex;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F41E4.s")
+ dst->x = points->x;
+ dst->y = points->y;
+ dst->z = points->z;
+ *arg4 = 0;
+
+ return true;
+}
+
+typedef struct HorseValidScene {
+ /* 0x0 */ s16 sceneId;
+ /* 0x2 */ s16 sceneLayerMinusOne;
+} HorseValidScene; // size = 0x4
+
+HorseValidScene sHorseValidScenes[] = {
+ { SCENE_00KEIKOKU, 0 }, // Termina Field
+ { SCENE_24KEMONOMITI, 0 }, // Road to southern swap
+ { SCENE_F01, 0 }, // Romani ranch
+ { SCENE_KOEPONARACE, 0 }, // Gorman track
+ { SCENE_20SICHITAI, 0 }, // Southern swamp poisoned
+ { SCENE_20SICHITAI2, 0 }, // Souther swamp clear
+ { SCENE_30GYOSON, 0 }, // Great bay coast
+ { SCENE_31MISAKI, 0 }, // Zora cape
+ { SCENE_ROMANYMAE, 0 }, // Milk road
+ { SCENE_IKANAMAE, 0 }, // Road to Ikana
+ { SCENE_13HUBUKINOMITI, 0 }, // Path to Mountain Village
+};
+
+s32 Horse_IsValidSpawn(s16 sceneId) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(sHorseValidScenes); i++) {
+ if (sceneId == sHorseValidScenes[i].sceneId) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void Horse_ResetHorseData(PlayState* play) {
+ gSaveContext.save.saveInfo.horseData.sceneId = SCENE_F01;
+ gSaveContext.save.saveInfo.horseData.pos.x = -1420;
+ gSaveContext.save.saveInfo.horseData.pos.y = 257;
+ gSaveContext.save.saveInfo.horseData.pos.z = -1285;
+ gSaveContext.save.saveInfo.horseData.yaw = 0x2AAA;
+}
+
+s32 gHorseIsMounted = false;
+s32 D_801BDAA0 = false;
+s32 gHorsePlayedEponasSong = false;
+
+HorseValidScene sHorseValidSceneLayers[] = {
+ { SCENE_00KEIKOKU, 5 - 1 }, // Termina Field - First Cycle
+ { SCENE_30GYOSON, 1 - 1 }, // Great Bay Coast - Post-Gyorg
+ { SCENE_31MISAKI, 1 - 1 }, // Zora Cape - Post-Gyorg
+ { SCENE_13HUBUKINOMITI, 1 - 1 }, // Path to Mountain Village - Post-Goht
+};
+
+s32 Horse_IsValidSceneLayer(PlayState* play, Player* player) {
+ s32 i;
+
+ if (gSaveContext.sceneLayer == 0) {
+ return true;
+ }
+
+ for (i = 0; i < ARRAY_COUNT(sHorseValidSceneLayers); i++) {
+ if ((sHorseValidSceneLayers[i].sceneId == play->sceneId) &&
+ (gSaveContext.sceneLayer == sHorseValidSceneLayers[i].sceneLayerMinusOne + 1)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void Horse_SpawnOverworld(PlayState* play, Player* player) {
+ if (!Horse_IsValidSceneLayer(play, player)) {
+ return;
+ }
+
+ if (gHorseIsMounted && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
+ s32 pad;
+ Vec3f pos = player->actor.world.pos;
+ f32 yIntersect;
+ CollisionPoly* poly;
+ s32 pad2[3];
+
+ pos.y += 5.0f;
+ yIntersect = BgCheck_EntityRaycastFloor1(&play->colCtx, &poly, &pos);
+ if (yIntersect == BGCHECK_Y_MIN) {
+ yIntersect = player->actor.world.pos.y;
+ }
+
+ player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, yIntersect,
+ player->actor.world.pos.z, player->actor.shape.rot.x, player->actor.shape.rot.y,
+ player->actor.shape.rot.z, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_11));
+ Actor_MountHorse(play, player, player->rideActor);
+ Actor_SetCameraHorseSetting(play, player);
+ } else if ((play->sceneId == gSaveContext.save.saveInfo.horseData.sceneId) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
+ if (Horse_IsValidSpawn(gSaveContext.save.saveInfo.horseData.sceneId)) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.saveInfo.horseData.pos.x,
+ gSaveContext.save.saveInfo.horseData.pos.y, gSaveContext.save.saveInfo.horseData.pos.z, 0,
+ gSaveContext.save.saveInfo.horseData.yaw, 0, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1));
+ } else {
+ Horse_ResetHorseData(play);
+ }
+ } else if ((play->sceneId == SCENE_F01) && !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1420.0f, 257.0f, -1285.0f, 0, 0x2AAA, 0,
+ ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1));
+ } else if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && Horse_IsValidSpawn(play->sceneId)) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, player->actor.world.pos.y,
+ player->actor.world.pos.z, 0, player->actor.shape.rot.y, 0,
+ ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_2));
+ }
+}
+
+void Horse_SpawnMinigame(PlayState* play, Player* player) {
+ if ((play->sceneId == SCENE_KOEPONARACE) &&
+ (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) {
+ player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1262.0f, -106.0f, 470.0f, 0, 0x7FFF, 0,
+ ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_13));
+ Actor_MountHorse(play, player, player->rideActor);
+ Actor_SetCameraHorseSetting(play, player);
+ } else if ((play->sceneId == SCENE_KOEPONARACE) &&
+ ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) ||
+ (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2))) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1741.0f, -106.0f, -641.0f, 0, -0x4FA4, 0,
+ ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1));
+ } else if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0) &&
+ (player->transformation == PLAYER_FORM_HUMAN)) {
+ player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1106.0f, 260.0f, -1185.0f, 0, 0x13, 0,
+ ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_7));
+ Actor_MountHorse(play, player, player->rideActor);
+ Actor_SetCameraHorseSetting(play, player);
+ }
+}
+
+void Horse_Spawn(PlayState* play, Player* player) {
+ if (((play->sceneId == SCENE_KOEPONARACE) &&
+ (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) ||
+ ((play->sceneId == SCENE_F01) && (((gSaveContext.sceneLayer == 1)) || (gSaveContext.sceneLayer == 5)) &&
+ (player->transformation == PLAYER_FORM_HUMAN)) ||
+ ((play->sceneId == SCENE_KOEPONARACE) &&
+ (((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) ||
+ (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2)))) {
+ // Gorman Track and horse state is either STATE_START, STATE_2 or STATE_3
+ // or Romani Ranch, Player is Human and scene layer is either 1 or 5
+ Horse_SpawnMinigame(play, player);
+ } else {
+ Horse_SpawnOverworld(play, player);
+ }
+
+ D_801BDAA0 = false;
+}
+
+void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw) {
+ s16 yaw = Math_Vec3f_Yaw(&actor->world.pos, pos) - actor->world.rot.y;
+
+ if (yaw > turnYaw) {
+ actor->world.rot.y += turnYaw;
+ } else if (yaw < -turnYaw) {
+ actor->world.rot.y -= turnYaw;
+ } else {
+ actor->world.rot.y += yaw;
+ }
+
+ actor->shape.rot.y = actor->world.rot.y;
+}
+
+s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx) {
+ Actor* bgActor = actorCtx->actorLists[ACTORCAT_BG].first;
+
+ if (bgActor != NULL) {
+ while (true) {
+ if ((bgActor->update != NULL) && (bgActor->init == NULL)) {
+ if (Object_IsLoaded(&play->objectCtx, bgActor->objBankIndex)) {
+ if ((bgActor->id == ACTOR_EN_HORSE) && (((EnHorse*)bgActor)->action != ENHORSE_ACTION_INACTIVE)) {
+ return true;
+ }
+ }
+ }
+ bgActor = bgActor->next;
+ if (bgActor == NULL) {
+ break;
+ }
+ }
+ }
+
+ return false;
+}
diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index 59fde2f2d..1d2046e57 100644
--- a/src/code/z_kaleido_scope_call.c
+++ b/src/code/z_kaleido_scope_call.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64shrink_window.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
@@ -40,13 +39,13 @@ void KaleidoScopeCall_Update(PlayState* play) {
if (ShrinkWindow_Letterbox_GetSize() == 0) {
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP;
pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
- pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1;
}
} else if (pauseCtx->state == PAUSE_STATE_GAMEOVER_0) {
R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP;
pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
- pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1;
} else if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_1) ||
(pauseCtx->state == PAUSE_STATE_OWLWARP_1)) {
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 148aad84e..130fa88db 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -145,7 +145,7 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
- pauseCtx->pageSwitchTimer = 0;
+ pauseCtx->pageSwitchInputTimer = 0;
pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE;
pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index d6d38f9d6..9346af59a 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -2,7 +2,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s")
@@ -90,13 +90,13 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD59C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD5E0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD654.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD698.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s")
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index 136918765..f3e67e5f3 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -348,9 +348,9 @@ void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) {
}
void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest) {
- dest->x = randPlusMinusPoint5Scaled(scale) + orig->x;
- dest->y = randPlusMinusPoint5Scaled(scale) + orig->y;
- dest->z = randPlusMinusPoint5Scaled(scale) + orig->z;
+ dest->x = Rand_CenteredFloat(scale) + orig->x;
+ dest->y = Rand_CenteredFloat(scale) + orig->y;
+ dest->z = Rand_CenteredFloat(scale) + orig->z;
}
void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) {
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index d6f2edf2a..7226a6719 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -16,14 +16,14 @@ s16 sBeatingHeartsDDEnv[3];
s16 sHeartsDDPrim[2][3];
s16 sHeartsDDEnv[2][3];
-TexturePtr HeartTextures[] = {
+static TexturePtr sHeartTextures[] = {
gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex,
gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex,
gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex,
gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex,
};
-TexturePtr HeartDDTextures[] = {
+static TexturePtr sHeartDDTextures[] = {
gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex,
gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex,
gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex,
@@ -283,7 +283,7 @@ void LifeMeter_Draw(PlayState* play) {
if (i < fullHeartCount) {
heartTex = gHeartFullTex;
} else if (i == fullHeartCount) {
- heartTex = HeartTextures[fractionHeartCount];
+ heartTex = sHeartTextures[fractionHeartCount];
} else {
heartTex = gHeartEmptyTex;
}
@@ -323,7 +323,7 @@ void LifeMeter_Draw(PlayState* play) {
if (i < fullHeartCount) {
heartTex = gDefenseHeartFullTex;
} else if (i == fullHeartCount) {
- heartTex = HeartDDTextures[fractionHeartCount];
+ heartTex = sHeartDDTextures[fractionHeartCount];
} else {
heartTex = gDefenseHeartEmptyTex;
}
@@ -340,13 +340,13 @@ void LifeMeter_Draw(PlayState* play) {
if ((ddCount < 0) || (i > ddCount)) {
if (curCombineModeSet != 1) {
curCombineModeSet = 1;
- func_8012C654(gfxCtx);
+ Gfx_SetupDL39_Overlay(gfxCtx);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
}
} else if (curCombineModeSet != 3) {
curCombineModeSet = 3;
- func_8012C654(gfxCtx);
+ Gfx_SetupDL39_Overlay(gfxCtx);
gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0,
ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
}
@@ -366,7 +366,7 @@ void LifeMeter_Draw(PlayState* play) {
if ((ddCount < 0) || (ddCount < i)) {
if (curCombineModeSet != 2) {
curCombineModeSet = 2;
- func_8012C8D4(gfxCtx);
+ Gfx_SetupDL42_Overlay(gfxCtx);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
@@ -374,7 +374,7 @@ void LifeMeter_Draw(PlayState* play) {
} else {
if (curCombineModeSet != 4) {
curCombineModeSet = 4;
- func_8012C8D4(gfxCtx);
+ Gfx_SetupDL42_Overlay(gfxCtx);
gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE,
0, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index 6a31c7e94..e82c3a9b2 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -190,12 +190,12 @@ void Lights_BindDirectional(Lights* lights, LightParams* params, void* unused) {
* available in the Lights group. This is at most 7 slots for a new group, but could be less.
*/
void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayState* play) {
- static LightsPosBindFunc posBindFuncs[] = {
+ static LightsPosBindFunc sPosBindFuncs[] = {
Lights_BindPoint,
(LightsPosBindFunc)Lights_BindDirectional,
Lights_BindPoint,
};
- static LightsBindFunc dirBindFuncs[] = {
+ static LightsBindFunc sDirBindFuncs[] = {
Lights_BindPointWithReference,
(LightsBindFunc)Lights_BindDirectional,
Lights_BindPointWithReference,
@@ -204,12 +204,12 @@ void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayStat
if (listHead != NULL) {
if ((refPos == NULL) && (lights->enablePosLights == 1)) {
do {
- posBindFuncs[listHead->info->type](lights, &listHead->info->params, play);
+ sPosBindFuncs[listHead->info->type](lights, &listHead->info->params, play);
listHead = listHead->next;
} while (listHead != NULL);
} else {
do {
- dirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos);
+ sDirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos);
listHead = listHead->next;
} while (listHead != NULL);
}
@@ -338,7 +338,7 @@ Lights* Lights_NewAndDraw(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8
lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR;
lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG;
lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB;
- lights->enablePosLights = 0;
+ lights->enablePosLights = false;
lights->numLights = numLights;
for (i = 0; i < numLights; i++) {
@@ -360,13 +360,10 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient
lights = GRAPH_ALLOC(gfxCtx, sizeof(Lights));
- lights->l.a.l.col[0] = ambientR;
- lights->l.a.l.colc[0] = ambientR;
- lights->l.a.l.col[1] = ambientG;
- lights->l.a.l.colc[1] = ambientG;
- lights->l.a.l.col[2] = ambientB;
- lights->l.a.l.colc[2] = ambientB;
- lights->enablePosLights = 0;
+ lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR;
+ lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG;
+ lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB;
+ lights->enablePosLights = false;
lights->numLights = 0;
return lights;
@@ -394,7 +391,7 @@ void Lights_GlowCheck(PlayState* play) {
s32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW);
s32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW);
s32 wZ = (s32)((projectedPos.z * invW) * 16352.0f) + 16352;
- s32 zBuf = func_80178A94(screenPosX, screenPosY);
+ s32 zBuf = SysCfb_GetZBufferInt(screenPosX, screenPosY);
if (wZ < zBuf) {
params->drawGlow = 1;
@@ -414,7 +411,7 @@ void Lights_DrawGlow(PlayState* play) {
if (light != NULL) {
OPEN_DISPS(play->state.gfxCtx);
- dl = func_8012C7FC(POLY_XLU_DISP);
+ dl = Gfx_SetupDL65_NoCD(POLY_XLU_DISP);
gDPSetDither(dl++, G_CD_NOISE);
diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c
index 73bcdf693..7bd458870 100644
--- a/src/code/z_map_disp.c
+++ b/src/code/z_map_disp.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "gfx.h"
void MapDisp_DestroyIMap(PlayState* play);
void MapDisp_InitIMap(PlayState* play);
@@ -148,7 +149,7 @@ void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg
if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) {
MapDisp_GetMapTexDim(spCC, &spC8, &spC4);
OPEN_DISPS(play->state.gfxCtx);
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
func_801094A0(func_80109908(spCC->mapId), &spAC);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC.r, spAC.g, spAC.b,
(s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC.a / 255.0f));
@@ -275,7 +276,7 @@ void func_80103A58(PlayState* play, Actor* actor) {
OPEN_DISPS(play->state.gfxCtx);
if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) {
s16 spA2;
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
@@ -300,7 +301,7 @@ void func_80103A58(PlayState* play, Actor* actor) {
if (actor->id == ACTOR_EN_BOX) {
if (!Flags_GetTreasure(play, actor->params & 0x1F)) {
if (func_80102F9C(spB4->actor.world.pos.y) == func_80102F9C(actor->world.pos.y)) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPPipeSync(OVERLAY_DISP++);
gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha);
@@ -341,7 +342,7 @@ void func_80103A58(PlayState* play, Actor* actor) {
}
}
}
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
if (actor->flags & 0x80000000) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g,
@@ -438,7 +439,7 @@ void func_801045AC(PlayState* play, Actor* actor) {
}
if ((sp78 > 0) && (sp78 < 0x3FF) && (sp74 > 0) && (sp74 < 0x3FF)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
if ((actor->category == 0xA) && (func_80103A10(play) != 0)) {
@@ -930,7 +931,7 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) {
}
if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
@@ -1196,7 +1197,7 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
OPEN_DISPS(play->state.gfxCtx);
// temp_a0 = play->state.gfxCtx;
// sp48 = arg6 + &gSaveContext;
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84);
gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, D_801BECA4);
@@ -1602,7 +1603,7 @@ void func_80108AF8(PlayState* play) {
spB4 = gSaveContext.mapIndex;
}
OPEN_DISPS(play->state.gfxCtx);
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha);
@@ -1638,7 +1639,7 @@ void func_80108AF8(PlayState* play) {
gSPTextureRectangle(POLY_OPA_DISP++, (a3 + 1) << 2, temp_a0_2 << 2, (a2 - 1) << 2, temp_a2_2 << 2,
G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
CLOSE_DISPS(play->state.gfxCtx);
}
}
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 8681967e6..03fadc9c9 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -5,6 +5,27 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#if 0
+#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage,
+#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage,
+
+u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX] = {
+#include "tables/bombers_notebook/person_table.h"
+#include "tables/bombers_notebook/event_table.h"
+};
+
+#undef DEFINE_PERSON
+#undef DEFINE_EVENT
+
+#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, _metMessage, metFlag) metFlag,
+#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, _completedMessage, completedFlag) completedFlag,
+
+u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = {
+#include "tables/bombers_notebook/person_table.h"
+#include "tables/bombers_notebook/event_table.h"
+};
+
+#undef DEFINE_PERSON
+#undef DEFINE_EVENT
s16 D_801D02D8[15] = {
ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect
@@ -20,8 +41,6 @@ s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 };
#endif
-extern u16 D_801C6AB8[];
-extern u16 D_801C6B28[];
extern s16 D_801D02D8[];
extern s32 D_801D02F8[];
extern s16 D_801F6B0C;
@@ -225,6 +244,7 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg
*arg3 = temp2;
}
+// TODO: SJIS support
// Message_LoadRupees JPN ?
void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
MessageContext* msgCtx = &play->msgCtx;
@@ -240,7 +260,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x8373;
t += 1;
- Font_LoadChar(play, 0x815C, k); // Ox815C = ― in JISX0213
+ Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x815C;
@@ -365,19 +385,19 @@ void func_80151A68(PlayState* play, u16 textId) {
}
}
-void func_80151BB4(PlayState* play, u8 arg1) {
+void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) {
MessageContext* msgCtx = &play->msgCtx;
- u8 temp = arg1;
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) {
- msgCtx->unk120B2[msgCtx->unk120B1] = temp;
- msgCtx->unk120B1++;
+ if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) {
+ msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event;
+ msgCtx->bombersNotebookEventQueueCount++;
}
- } else if (arg1 >= 20) {
- if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) {
- msgCtx->unk120B2[msgCtx->unk120B1] = temp;
- msgCtx->unk120B1++;
+ } else if (event >= BOMBERS_NOTEBOOK_PERSON_MAX) {
+ // Non MET events are processed even if the player does not have the notebook yet
+ if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) {
+ msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event;
+ msgCtx->bombersNotebookEventQueueCount++;
}
}
}
@@ -386,16 +406,22 @@ u32 func_80151C9C(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
while (true) {
- if (msgCtx->unk120B1 == 0) {
+ if (msgCtx->bombersNotebookEventQueueCount == 0) {
return false;
}
- msgCtx->unk120B1--;
+ msgCtx->bombersNotebookEventQueueCount--;
- if (!CHECK_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]])) {
- SET_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]);
+ if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags
+ [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]])) {
+ SET_WEEKEVENTREG(gBombersNotebookWeekEventFlags
+ [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]);
- if ((D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]] != 0) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- Message_ContinueTextbox(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]);
+ if ((sBombersNotebookEventMessages
+ [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]] != 0) &&
+ CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ Message_ContinueTextbox(
+ play, sBombersNotebookEventMessages
+ [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]);
play_sound(NA_SE_SY_SCHEDULE_WRITE);
return true;
}
@@ -476,7 +502,7 @@ u8 Message_GetState(MessageContext* msgCtx) {
if (msgCtx->msgMode == 0x40) {
return TEXT_STATE_13;
}
- if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->unk120B1 == 0)) {
+ if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) {
return TEXT_STATE_CLOSING;
}
diff --git a/src/code/z_nmi_buff.c b/src/code/z_nmi_buff.c
index 205bd8d0f..eacfc5f46 100644
--- a/src/code/z_nmi_buff.c
+++ b/src/code/z_nmi_buff.c
@@ -3,6 +3,13 @@
#define COLD_RESET 0
#define NMI 1
+typedef struct {
+ /* 0x00 */ u32 resetting;
+ /* 0x04 */ u32 resetCount;
+ /* 0x08 */ OSTime duration;
+ /* 0x10 */ OSTime resetTime;
+} NmiBuff; // size >= 0x18
+
NmiBuff* gNMIBuffer;
void Nmi_Init(void) {
diff --git a/src/code/z_olib.c b/src/code/z_olib.c
index 754857014..848a48a72 100644
--- a/src/code/z_olib.c
+++ b/src/code/z_olib.c
@@ -123,14 +123,14 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) {
if ((distXZ == 0.0f) && (vec->y == 0.0f)) {
sph.pitch = 0;
} else {
- sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(distXZ, vec->y)));
+ sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(distXZ, vec->y)));
}
sph.r = sqrtf(SQ(vec->y) + distXZSq);
if ((vec->x == 0.0f) && (vec->z == 0.0f)) {
sph.yaw = 0;
} else {
- sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(vec->x, vec->z)));
+ sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(vec->x, vec->z)));
}
*dest = sph;
@@ -202,8 +202,8 @@ Vec3f* OLib_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) {
Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b) {
Vec3f anglesRad;
- anglesRad.x = func_80086B30(b->z - a->z, b->y - a->y);
- anglesRad.y = func_80086B30(b->x - a->x, b->z - a->z);
+ anglesRad.x = Math_FAtan2F(b->z - a->z, b->y - a->y);
+ anglesRad.y = Math_FAtan2F(b->x - a->x, b->z - a->z);
anglesRad.z = 0;
*dest = anglesRad;
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index fe4ca5ef8..ae535dc9b 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -23,11 +23,11 @@ typedef enum {
#define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex))
typedef struct {
- /* 0x00 */ u8 scene;
- /* 0x01 */ u8 flags1;
- /* 0x02 */ u8 flags2;
- /* 0x03 */ u8 flags3;
-} RestrictionFlags;
+ /* 0x0 */ u8 scene;
+ /* 0x1 */ u8 flags1;
+ /* 0x2 */ u8 flags2;
+ /* 0x3 */ u8 flags3;
+} RestrictionFlags; // size = 0x4
Input sPostmanTimerInput[MAXCONTROLLERS];
@@ -73,125 +73,21 @@ Input sPostmanTimerInput[MAXCONTROLLERS];
#define RESTRICTIONS_MOON RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0)
#define RESTRICTIONS_NO_DOUBLE_TIME RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0)
+#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, restrictionFlags, _persistentCycleFlags) \
+ { enumValue, restrictionFlags },
+
+#define DEFINE_SCENE_UNSET(enumValue) { enumValue, RESTRICTIONS_NONE },
+
RestrictionFlags sRestrictionFlags[] = {
- { SCENE_20SICHITAI2, RESTRICTIONS_NONE },
- { SCENE_UNSET_1, RESTRICTIONS_NONE },
- { SCENE_UNSET_2, RESTRICTIONS_NONE },
- { SCENE_UNSET_3, RESTRICTIONS_NONE },
- { SCENE_UNSET_4, RESTRICTIONS_NONE },
- { SCENE_UNSET_5, RESTRICTIONS_NONE },
- { SCENE_UNSET_6, RESTRICTIONS_NONE },
- { SCENE_KAKUSIANA, RESTRICTIONS_NONE },
- { SCENE_SPOT00, RESTRICTIONS_NONE },
- { SCENE_UNSET_9, RESTRICTIONS_NONE },
- { SCENE_WITCH_SHOP, RESTRICTIONS_INDOORS },
- { SCENE_LAST_BS, RESTRICTIONS_MOON },
- { SCENE_HAKASHITA, RESTRICTIONS_NONE },
- { SCENE_AYASHIISHOP, RESTRICTIONS_INDOORS },
- { SCENE_UNSET_E, RESTRICTIONS_NONE },
- { SCENE_UNSET_F, RESTRICTIONS_NONE },
- { SCENE_OMOYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0) },
- { SCENE_BOWLING, RESTRICTIONS_INDOORS },
- { SCENE_SONCHONOIE, RESTRICTIONS_INDOORS },
- { SCENE_IKANA, RESTRICTIONS_NONE },
- { SCENE_KAIZOKU, RESTRICTIONS_NONE },
- { SCENE_MILK_BAR, RESTRICTIONS_INDOORS },
- { SCENE_INISIE_N, RESTRICTIONS_NONE },
- { SCENE_TAKARAYA, RESTRICTIONS_INDOORS },
- { SCENE_INISIE_R, RESTRICTIONS_NONE },
- { SCENE_OKUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) },
- { SCENE_OPENINGDAN, RESTRICTIONS_NONE },
- { SCENE_MITURIN, RESTRICTIONS_NONE },
- { SCENE_13HUBUKINOMITI, RESTRICTIONS_NONE },
- { SCENE_CASTLE, RESTRICTIONS_NONE },
- { SCENE_DEKUTES, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1) },
- { SCENE_MITURIN_BS, RESTRICTIONS_NONE },
- { SCENE_SYATEKI_MIZU, RESTRICTIONS_INDOORS },
- { SCENE_HAKUGIN, RESTRICTIONS_NONE },
- { SCENE_ROMANYMAE, RESTRICTIONS_NONE },
- { SCENE_PIRATE, RESTRICTIONS_NONE },
- { SCENE_SYATEKI_MORI, RESTRICTIONS_INDOORS },
- { SCENE_SINKAI, RESTRICTIONS_NONE },
- { SCENE_YOUSEI_IZUMI, RESTRICTIONS_NONE },
- { SCENE_KINSTA1, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_KINDAN2, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_TENMON_DAI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0) },
- { SCENE_LAST_DEKU, RESTRICTIONS_MOON },
- { SCENE_22DEKUCITY, RESTRICTIONS_NONE },
- { SCENE_KAJIYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) },
- { SCENE_00KEIKOKU, RESTRICTIONS_NONE },
- { SCENE_POSTHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_LABO, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_DANPEI2TEST, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_UNSET_31, RESTRICTIONS_NONE },
- { SCENE_16GORON_HOUSE, RESTRICTIONS_NONE },
- { SCENE_33ZORACITY, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0) },
- { SCENE_8ITEMSHOP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_F01, RESTRICTIONS_NONE },
- { SCENE_INISIE_BS, RESTRICTIONS_NONE },
- { SCENE_30GYOSON, RESTRICTIONS_NONE },
- { SCENE_31MISAKI, RESTRICTIONS_NONE },
- { SCENE_TAKARAKUJI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_UNSET_3A, RESTRICTIONS_NONE },
- { SCENE_TORIDE, RESTRICTIONS_NONE },
- { SCENE_FISHERMAN, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_GORONSHOP, RESTRICTIONS_INDOORS },
- { SCENE_DEKU_KING, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) },
- { SCENE_LAST_GORON, RESTRICTIONS_MOON },
- { SCENE_24KEMONOMITI, RESTRICTIONS_NONE },
- { SCENE_F01_B, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_F01C, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_BOTI, RESTRICTIONS_NONE },
- { SCENE_HAKUGIN_BS, RESTRICTIONS_NONE },
- { SCENE_20SICHITAI, RESTRICTIONS_NONE },
- { SCENE_21MITURINMAE, RESTRICTIONS_NONE },
- { SCENE_LAST_ZORA, RESTRICTIONS_MOON },
- { SCENE_11GORONNOSATO2, RESTRICTIONS_NONE },
- { SCENE_SEA, RESTRICTIONS_NONE },
- { SCENE_35TAKI, RESTRICTIONS_NONE },
- { SCENE_REDEAD, RESTRICTIONS_NONE },
- { SCENE_BANDROOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) },
- { SCENE_11GORONNOSATO, RESTRICTIONS_NONE },
- { SCENE_GORON_HAKA, RESTRICTIONS_NONE },
- { SCENE_SECOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0) },
- { SCENE_10YUKIYAMANOMURA, RESTRICTIONS_NONE },
- { SCENE_TOUGITES, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) },
- { SCENE_DANPEI, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_IKANAMAE, RESTRICTIONS_NONE },
- { SCENE_DOUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) },
- { SCENE_MUSICHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) },
- { SCENE_IKNINSIDE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0) },
- { SCENE_MAP_SHOP, RESTRICTIONS_INDOORS },
- { SCENE_F40, RESTRICTIONS_NONE },
- { SCENE_F41, RESTRICTIONS_NONE },
- { SCENE_10YUKIYAMANOMURA2, RESTRICTIONS_NONE },
- { SCENE_14YUKIDAMANOMITI, RESTRICTIONS_NONE },
- { SCENE_12HAKUGINMAE, RESTRICTIONS_NONE },
- { SCENE_17SETUGEN, RESTRICTIONS_NONE },
- { SCENE_17SETUGEN2, RESTRICTIONS_NONE },
- { SCENE_SEA_BS, RESTRICTIONS_NONE },
- { SCENE_RANDOM, RESTRICTIONS_NONE },
- { SCENE_YADOYA, RESTRICTIONS_INDOORS },
- { SCENE_KONPEKI_ENT, RESTRICTIONS_NONE },
- { SCENE_INSIDETOWER, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0) },
- { SCENE_26SARUNOMORI, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_LOST_WOODS, RESTRICTIONS_NONE },
- { SCENE_LAST_LINK, RESTRICTIONS_MOON },
- { SCENE_SOUGEN, RESTRICTIONS_MOON },
- { SCENE_BOMYA, RESTRICTIONS_INDOORS },
- { SCENE_KYOJINNOMA, RESTRICTIONS_NONE },
- { SCENE_KOEPONARACE, RESTRICTIONS_NO_DOUBLE_TIME },
- { SCENE_GORONRACE, RESTRICTIONS_NONE },
- { SCENE_TOWN, RESTRICTIONS_NONE },
- { SCENE_ICHIBA, RESTRICTIONS_NONE },
- { SCENE_BACKTOWN, RESTRICTIONS_NONE },
- { SCENE_CLOCKTOWER, RESTRICTIONS_NONE },
- { SCENE_ALLEY, RESTRICTIONS_NONE },
+#include "tables/scene_table.h"
// { RESTRICTIONS_TABLE_END, RESTRICTIONS_NONE }, // See note below
};
//! @note: in `Interface_SetSceneRestrictions`, `RESTRICTIONS_TABLE_END` act as a terminating value to
// stop looping through the array. If a scene is missing, then this will cause issues.
+#undef DEFINE_SCENE
+#undef DEFINE_SCENE_UNSET
+
s16 sPictoState = PICTO_BOX_STATE_OFF;
s16 sPictoPhotoBeingTaken = false;
@@ -251,7 +147,7 @@ s16 D_801BF97C = 255;
f32 D_801BF980 = 1.0f;
s32 D_801BF984 = 0;
-Gfx sScreenFillSetupDL[] = {
+static Gfx sScreenFillSetupDL[] = {
gsDPPipeSync(),
gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH),
@@ -2421,7 +2317,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
// Related to pictograph
if (sPictoState == PICTO_BOX_STATE_LENS) {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) {
- Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer,
(u8*)((void)0, gSaveContext.pictoPhotoI5),
PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
@@ -2460,7 +2356,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
sPictoState = PICTO_BOX_STATE_OFF;
if (sPictoPhotoBeingTaken) {
- Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer,
(u8*)((void)0, gSaveContext.pictoPhotoI5),
PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
Snap_RecordPictographedActors(play);
@@ -2493,7 +2389,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
sPictoState = PICTO_BOX_STATE_LENS;
} else {
Play_DecompressI5ToI8((u8*)((void)0, gSaveContext.pictoPhotoI5),
- (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer,
PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
play->haltAllActors = true;
sPictoState = PICTO_BOX_STATE_SETUP_PHOTO;
@@ -3850,7 +3746,7 @@ void Magic_DrawMeter(PlayState* play) {
magicBarY = 34; // one row of hearts
}
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255);
@@ -3971,7 +3867,6 @@ void Interface_DrawItemButtons(PlayState* play) {
OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[0],
D_801BF9DC[0], D_801BFAF4[0], D_801BFAF4[0], D_801BF9E4[0] * 2,
D_801BF9E4[0] * 2, 100, 255, 120, interfaceCtx->bAlpha);
- if (1) {}
gDPPipeSync(OVERLAY_DISP++);
// C-Left Button Color & Texture
@@ -4287,7 +4182,7 @@ void Interface_DrawAButton(PlayState* play) {
aAlpha = 100;
}
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
Interface_SetPerspectiveView(play, 25 + R_A_BTN_Y_OFFSET, 70 + R_A_BTN_Y_OFFSET, 192, 237);
@@ -4362,7 +4257,7 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) {
(pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK))) {
// Inventory Equip Effects
gSPSegment(OVERLAY_DISP++, 0x08, pauseCtx->iconItemSegment);
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4414,11 +4309,10 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) {
/**
* Draws either the analog three-day clock or the digital final-hours clock
*/
-#ifdef NON_MATCHING
void Interface_DrawClock(PlayState* play) {
static s16 sThreeDayClockAlpha = 255;
- static s16 D_801BFB30 = 0; // sClockAlphaTimer1
- static s16 D_801BFB34 = 0; // sClockAlphaTimer2
+ static s16 sClockAlphaTimer1 = 0;
+ static s16 sClockAlphaTimer2 = 0;
static u16 sThreeDayClockHours[] = {
CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0),
CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0),
@@ -4434,31 +4328,30 @@ void Interface_DrawClock(PlayState* play) {
gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
};
- static s16 D_801BFBCC = 0; // sClockInvDiamondPrimRed
- static s16 D_801BFBD0 = 0; // sClockInvDiamondPrimGreen
- static s16 D_801BFBD4 = 255; // sClockInvDiamondPrimBlue
- static s16 D_801BFBD8 = 0; // sClockInvDiamondEnvRed
- static s16 D_801BFBDC = 0; // sClockInvDiamondEnvGreen
- static s16 D_801BFBE0 = 0; // sClockInvDiamondEnvBlue
- static s16 D_801BFBE4 = 15; // sClockInvDiamondTimer
- static s16 D_801BFBE8 = 0; // sClockInvDiamondTargetIndex
- static s16 D_801BFBEC[] = { 100, 0 }; // sClockInvDiamondPrimRedTargets
- static s16 D_801BFBF0[] = { 205, 155 }; // sClockInvDiamondPrimGreenTargets
- static s16 D_801BFBF4[] = { 255, 255 }; // sClockInvDiamondPrimBlueTargets
- static s16 D_801BFBF8[] = { 30, 0 }; // sClockInvDiamondEnvRedTargets
- static s16 D_801BFBFC[] = { 30, 0 }; // sClockInvDiamondEnvGreenTargets
- static s16 D_801BFC00[] = { 100, 0 }; // sClockInvDiamondEnvBlueTargets
- static s16 D_801BFC04[] = { 255, 0 }; // sFinalHoursClockDigitsRed
- static s16 D_801BFC08[] = { 100, 0 }; // sFinalHoursClockFrameEnvRedTargets
- static s16 D_801BFC0C[] = { 30, 0 }; // sFinalHoursClockFrameEnvGreenTargets
- static s16 D_801BFC10[] = { 100, 0 }; // sFinalHoursClockFrameEnvBlueTargets
+ static s16 sClockInvDiamondPrimRed = 0;
+ static s16 sClockInvDiamondPrimGreen = 155;
+ static s16 sClockInvDiamondPrimBlue = 255;
+ static s16 sClockInvDiamondEnvRed = 0;
+ static s16 sClockInvDiamondEnvGreen = 0;
+ static s16 sClockInvDiamondEnvBlue = 0;
+ static s16 sClockInvDiamondTimer = 15;
+ static s16 sClockInvDiamondTargetIndex = 0;
+ static s16 sClockInvDiamondPrimRedTargets[] = { 100, 0 };
+ static s16 sClockInvDiamondPrimGreenTargets[] = { 205, 155 };
+ static s16 sClockInvDiamondPrimBlueTargets[] = { 255, 255 };
+ static s16 sClockInvDiamondEnvRedTargets[] = { 30, 0 };
+ static s16 sClockInvDiamondEnvGreenTargets[] = { 30, 0 };
+ static s16 sClockInvDiamondEnvBlueTargets[] = { 100, 0 };
+ static s16 sFinalHoursClockDigitsRedTargets[] = { 255, 0 };
+ static s16 sFinalHoursClockFrameEnvRedTargets[] = { 100, 0 };
+ static s16 sFinalHoursClockFrameEnvGreenTargets[] = { 30, 0 };
+ static s16 sFinalHoursClockFrameEnvBlueTargets[] = { 100, 0 };
static TexturePtr sFinalHoursDigitTextures[] = {
gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
};
- // sFinalHoursDigitSlotPosXOffset
- static s16 D_801BFC40[] = {
+ static s16 sFinalHoursDigitSlotPosXOffset[] = {
127, 136, 144, 151, 160, 168, 175, 184,
};
InterfaceContext* interfaceCtx = &play->interfaceCtx;
@@ -4470,527 +4363,492 @@ void Interface_DrawClock(PlayState* play) {
f32 timeInMinutes;
f32 timeInSeconds;
f32 sp1CC;
- s32 new_var;
+ s32 pad1;
s16 sp1C6;
s16 currentHour;
u16 time;
- s16 temp;
+ s16 pad2;
s16 colorStep;
- s16 finalHoursClockSlots[8]; // sp1AC
+ s16 finalHoursClockSlots[8];
s16 index;
OPEN_DISPS(play->state.gfxCtx);
- if (R_TIME_SPEED != 0) {
- if ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) ||
- (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
- (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) {
- if (!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day < 4)) {
- /**
- * Changes Clock's transparancy depending if Player is moving or not and possibly other things
- */
- if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) {
- if (func_801234D4(play)) {
- sThreeDayClockAlpha = 80;
- D_801BFB30 = 5;
- D_801BFB34 = 20;
- } else if (D_801BFB34 != 0) {
- D_801BFB34--;
- } else if (D_801BFB30 != 0) {
- colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / D_801BFB30;
- sThreeDayClockAlpha += colorStep;
+ if ((R_TIME_SPEED != 0) &&
+ ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) ||
+ (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
+ (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) &&
+ !FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) {
+ /**
+ * Section: Changes Clock's transparancy depending if Player is moving or not and possibly other things
+ */
+ if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) {
+ if (func_801234D4(play)) {
+ sThreeDayClockAlpha = 80;
+ sClockAlphaTimer1 = 5;
+ sClockAlphaTimer2 = 20;
+ } else if (sClockAlphaTimer2 != 0) {
+ sClockAlphaTimer2--;
+ } else if (sClockAlphaTimer1 != 0) {
+ colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / sClockAlphaTimer1;
+ sThreeDayClockAlpha += colorStep;
- if (sThreeDayClockAlpha >= 255) {
- sThreeDayClockAlpha = 255;
- D_801BFB30 = 0;
- }
- } else {
- if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
- sThreeDayClockAlpha = 255;
- } else {
- sThreeDayClockAlpha = interfaceCtx->bAlpha;
- }
- D_801BFB34 = 0;
- D_801BFB30 = 0;
- }
+ if (sThreeDayClockAlpha >= 255) {
+ sThreeDayClockAlpha = 255;
+ sClockAlphaTimer1 = 0;
+ }
+ } else {
+ if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
+ sThreeDayClockAlpha = 255;
} else {
- if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
- sThreeDayClockAlpha = 255;
+ sThreeDayClockAlpha = interfaceCtx->bAlpha;
+ }
+ sClockAlphaTimer2 = 0;
+ sClockAlphaTimer1 = 0;
+ }
+ } else {
+ if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
+ sThreeDayClockAlpha = 255;
+ } else {
+ sThreeDayClockAlpha = interfaceCtx->bAlpha;
+ }
+ sClockAlphaTimer2 = 0;
+ sClockAlphaTimer1 = 0;
+ }
+
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
+
+ /**
+ * Section: Draw Clock's Hour Lines
+ */
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
+ 0, PRIMITIVE, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, 35, 1,
+ 6, 0, 1 << 10, 1 << 10);
+
+ /**
+ * Section: Draw Clock's Border
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
+ 0, PRIMITIVE, 0);
+
+ //! @bug A texture height of 50 is given below. The texture is only 48 units height
+ //! resulting in this reading into the next texture. This results in a white
+ //! dot in the bottom center of the clock. For the three-day clock, this is
+ //! covered by the diamond. However, it can be seen by the final-hours clock.
+ OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, 1, 6,
+ 0, 1 << 10, 1 << 10);
+
+ if (((CURRENT_DAY >= 4) ||
+ ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) &&
+ (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) {
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
+ gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ } else {
+ /**
+ * Section: Draw Three-Day Clock's Diamond
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // Time is slowed down to half speed with inverted song of time
+ if (gSaveContext.save.timeSpeedOffset == -2) {
+ // Clock diamond is blue and flashes white
+ colorStep =
+ ABS_ALT(sClockInvDiamondPrimRed - sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondPrimRed >= sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondPrimRed -= colorStep;
} else {
- sThreeDayClockAlpha = interfaceCtx->bAlpha;
+ sClockInvDiamondPrimRed += colorStep;
}
- D_801BFB34 = 0;
- D_801BFB30 = 0;
+
+ colorStep = ABS_ALT(sClockInvDiamondPrimGreen -
+ sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondPrimGreen >= sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondPrimGreen -= colorStep;
+ } else {
+ sClockInvDiamondPrimGreen += colorStep;
+ }
+
+ colorStep = ABS_ALT(sClockInvDiamondPrimBlue -
+ sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondPrimBlue >= sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondPrimBlue -= colorStep;
+ } else {
+ sClockInvDiamondPrimBlue += colorStep;
+ }
+
+ colorStep =
+ ABS_ALT(sClockInvDiamondEnvRed - sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondEnvRed >= sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondEnvRed -= colorStep;
+ } else {
+ sClockInvDiamondEnvRed += colorStep;
+ }
+
+ colorStep = ABS_ALT(sClockInvDiamondEnvGreen -
+ sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondEnvGreen >= sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondEnvGreen -= colorStep;
+ } else {
+ sClockInvDiamondEnvGreen += colorStep;
+ }
+
+ colorStep =
+ ABS_ALT(sClockInvDiamondEnvBlue - sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) /
+ sClockInvDiamondTimer;
+ if (sClockInvDiamondEnvBlue >= sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) {
+ sClockInvDiamondEnvBlue -= colorStep;
+ } else {
+ sClockInvDiamondEnvBlue += colorStep;
+ }
+
+ sClockInvDiamondTimer--;
+
+ if (sClockInvDiamondTimer == 0) {
+ sClockInvDiamondPrimRed = sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondPrimGreen = sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondPrimBlue = sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondEnvRed = sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondEnvGreen = sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondEnvBlue = sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex];
+ sClockInvDiamondTimer = 15;
+ sClockInvDiamondTargetIndex ^= 1;
+ }
+
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
+ 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sClockInvDiamondPrimRed, sClockInvDiamondPrimGreen, 255,
+ sThreeDayClockAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, sClockInvDiamondEnvRed, sClockInvDiamondEnvGreen,
+ sClockInvDiamondEnvBlue, 0);
+ } else {
+ // Clock diamond is green for regular timeSpeedOffset
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha);
}
- if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, 32,
+ 1 << 10, 1 << 10);
- func_8012C654(play->state.gfxCtx);
+ /**
+ * Section: Draw Three-Day Clock's Day-Number over Diamond
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
- /**
- * Draw Clock's Hour Lines
- */
- gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha);
- gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
- TEXEL0, 0, PRIMITIVE, 0);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, 137, 192,
+ 48, 27, 1 << 10, 1 << 10);
- OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128,
- 35, 1, 6, 0, 1 << 10, 1 << 10);
+ /**
+ * Section: Draw Three-Day Clock's Star (for the Minute Tracker)
+ */
+ gDPPipeSync(OVERLAY_DISP++);
- /**
- * Draw Clock's Border
- */
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha);
- gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
- TEXEL0, 0, PRIMITIVE, 0);
+ if (D_801BF974 != 0) {
+ D_801BF980 += 0.02f;
+ D_801BF97C += 11;
+ } else {
+ D_801BF980 -= 0.02f;
+ D_801BF97C -= 11;
+ }
- //! @bug A texture height of 50 is given below. The texture is only 48 units height
- //! resulting in this reading into the next texture. This results in a white
- //! dot in the bottom center of the clock. For the three-day clock, this is
- //! covered by the diamond. However, it can be seen by the final-hours clock.
- OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50,
- 1, 6, 0, 1 << 10, 1 << 10);
+ D_801BF978--;
+ if (D_801BF978 == 0) {
+ D_801BF978 = 10;
+ D_801BF974 ^= 1;
+ }
- if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) &&
- (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) {
- func_8012C8D4(play->state.gfxCtx);
- gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time);
+ timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f;
+
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
+
+ gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ if (sThreeDayClockAlpha != 255) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha);
+ } else {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C);
+ }
+
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+
+ Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY);
+ Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY);
+
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 16, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
+ }
+
+ /**
+ * Section: Cuts off Three-Day Clock's Sun and Moon when they dip below the clock
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
+ R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f);
+
+ // determines the current hour
+ for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) {
+ if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) {
+ break;
+ }
+ }
+
+ /**
+ * Section: Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker)
+ */
+ time = gSaveContext.save.time;
+ sp1D8 = Math_SinS(time) * -40.0f;
+ temp_f14 = Math_CosS(time) * -34.0f;
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha);
+
+ Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0);
+
+ /**
+ * Section: Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker)
+ */
+ sp1D8 = Math_SinS(time) * 40.0f;
+ temp_f14 = Math_CosS(time) * 34.0f;
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha);
+
+ Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0);
+
+ /**
+ * Section: Cuts off Three-Day Clock's Hour Digits when they dip below the clock
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
+ R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f);
+
+ /**
+ * Section: Draws Three-Day Clock's Hour Digit Above the Sun
+ */
+ sp1CC = gSaveContext.save.time * 0.000096131f; // (2.0f * 3.15f / 0x10000)
+
+ // Rotates Three-Day Clock's Hour Digit To Above the Sun
+ Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ // Draws Three-Day Clock's Hour Digit Above the Sun
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
+ 0, PRIMITIVE, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
+
+ // Colours the Three-Day Clocks's Hour Digit Above the Sun
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
+ gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
+
+ /**
+ * Section: Draws Three-Day Clock's Hour Digit Above the Moon
+ */
+
+ // Rotates Three-Day Clock's Hour Digit To Above the Moon
+ Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ Matrix_RotateZF(-sp1CC, MTXMODE_APPLY);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ // Draws Three-Day Clock's Hour Digit Above the Moon
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
+ 0, PRIMITIVE, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
+
+ // Colours the Three-Day Clocks's Hour Digit Above the Moon
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
+ gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
+
+ gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor);
+
+ // Final Hours
+ if ((CURRENT_DAY >= 4) ||
+ ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) &&
+ (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) {
+ if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) {
+ // The Final Hours clock will flash red
+
+ colorStep = ABS_ALT(sFinalHoursClockDigitsRed -
+ sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) /
+ sFinalHoursClockColorTimer;
+ if (sFinalHoursClockDigitsRed >=
+ sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) {
+ sFinalHoursClockDigitsRed -= colorStep;
} else {
- /**
- * Draw Three-Day Clock's Diamond
- */
- gDPPipeSync(OVERLAY_DISP++);
-
- // Time is slowed down to half speed with inverted song of time
- if (gSaveContext.save.timeSpeedOffset == -2) {
- // Clock diamond is blue and flashes white
- colorStep = ABS_ALT(D_801BFBCC - D_801BFBEC[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBCC >= D_801BFBEC[D_801BFBE8]) {
- D_801BFBCC -= colorStep;
- } else {
- D_801BFBCC += colorStep;
- }
-
- colorStep = ABS_ALT(D_801BFBD0 - D_801BFBF0[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBD0 >= D_801BFBF0[D_801BFBE8]) {
- D_801BFBD0 -= colorStep;
- } else {
- D_801BFBD0 += colorStep;
- }
-
- colorStep = ABS_ALT(D_801BFBD4 - D_801BFBF4[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBD4 >= D_801BFBF4[D_801BFBE8]) {
- D_801BFBD4 -= colorStep;
- } else {
- D_801BFBD4 += colorStep;
- }
-
- colorStep = ABS_ALT(D_801BFBD8 - D_801BFBF8[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBD8 >= D_801BFBF8[D_801BFBE8]) {
- D_801BFBD8 -= colorStep;
- } else {
- D_801BFBD8 += colorStep;
- }
-
- colorStep = ABS_ALT(D_801BFBDC - D_801BFBFC[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBDC >= D_801BFBFC[D_801BFBE8]) {
- D_801BFBDC -= colorStep;
- } else {
- D_801BFBDC += colorStep;
- }
-
- colorStep = ABS_ALT(D_801BFBE0 - D_801BFC00[D_801BFBE8]) / D_801BFBE4;
- if (D_801BFBE0 >= D_801BFC00[D_801BFBE8]) {
- D_801BFBE0 -= colorStep;
- } else {
- D_801BFBE0 += colorStep;
- }
-
- D_801BFBE4--;
-
- if (D_801BFBE4 == 0) {
- D_801BFBCC = D_801BFBEC[D_801BFBE8];
- D_801BFBD0 = D_801BFBF0[D_801BFBE8];
- D_801BFBD4 = D_801BFBF4[D_801BFBE8];
- D_801BFBD8 = D_801BFBF8[D_801BFBE8];
- D_801BFBDC = D_801BFBFC[D_801BFBE8];
- D_801BFBE0 = D_801BFC00[D_801BFBE8];
- D_801BFBE4 = 15;
- D_801BFBE8 ^= 1;
- }
-
- gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
- PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
- PRIMITIVE, 0);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BFBCC, D_801BFBD0, 255, sThreeDayClockAlpha);
- gDPSetEnvColor(OVERLAY_DISP++, D_801BFBD8, D_801BFBDC, D_801BFBE0, 0);
- } else {
- // Clock diamond is green for regular timeSpeedOffset
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha);
- }
-
- OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40,
- 32, 1 << 10, 1 << 10);
-
- /**
- * Draw Three-Day Clock's Day-Number over Diamond
- */
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
-
- OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27,
- 137, 192, 48, 27, 1 << 10, 1 << 10);
-
- /**
- * Draw Three-Day Clock's Star (for the Minute Tracker)
- */
- gDPPipeSync(OVERLAY_DISP++);
-
- if (D_801BF974 != 0) {
- D_801BF980 += 0.02f;
- D_801BF97C += 11;
- } else {
- D_801BF980 -= 0.02f;
- D_801BF97C -= 11;
- }
-
- D_801BF978--;
- if (D_801BF978 == 0) {
- D_801BF978 = 10;
- D_801BF974 ^= 1;
- }
-
- timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time);
- timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f;
-
- func_8012C8D4(play->state.gfxCtx);
-
- gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
-
- if (sThreeDayClockAlpha != 255) {
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha);
- } else {
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C);
- }
-
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
-
- Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW);
- Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY);
- Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY);
-
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0);
- gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 16, 16, 0,
- G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
- G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
- gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
+ sFinalHoursClockDigitsRed += colorStep;
}
- /**
- * Cuts off Three-Day Clock's Sun and Moon when they dip below the clock
- */
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
- R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f);
-
- // determines the current hour
- for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) {
- if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) {
- break;
- }
+ colorStep = ABS_ALT(sFinalHoursClockFrameEnvRed -
+ sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) /
+ sFinalHoursClockColorTimer;
+ if (sFinalHoursClockFrameEnvRed >=
+ sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) {
+ sFinalHoursClockFrameEnvRed -= colorStep;
+ } else {
+ sFinalHoursClockFrameEnvRed += colorStep;
}
- /**
- * Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker)
- */
- time = gSaveContext.save.time;
- sp1D8 = Math_SinS(time) * -40.0f;
- temp_f14 = Math_CosS(time) * -34.0f;
-
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha);
-
- Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
- Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
-
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0);
-
- OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0);
-
- /**
- * Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker)
- */
- sp1D8 = Math_SinS(time) * 40.0f;
- temp_f14 = Math_CosS(time) * 34.0f;
-
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha);
-
- Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
- Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0);
-
- OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0);
-
- /**
- * Cuts off Three-Day Clock's Hour Digits when they dip below the clock
- */
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
- R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f);
-
- /**
- * Draws Three-Day Clock's Hour Digit Above the Sun
- */
- sp1CC = gSaveContext.save.time * 0.000096131f;
-
- // Rotates Three-Day Clock's Hour Digit To Above the Sun
- Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
- Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY);
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
-
- // Draws Three-Day Clock's Hour Digit Above the Sun
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
- TEXEL0, 0, PRIMITIVE, 0);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
- gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0);
-
- OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
-
- // Colours the Three-Day Clocks's Hour Digit Above the Sun
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
- gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
-
- /**
- * Draws Three-Day Clock's Hour Digit Above the Moon
- */
- // Rotates Three-Day Clock's Hour Digit To Above the Moon
- Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
- Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateZF(-sp1CC, MTXMODE_APPLY);
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
-
- // Draws Three-Day Clock's Hour Digit Above the Moon
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
- TEXEL0, 0, PRIMITIVE, 0);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
- gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0);
-
- OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
-
- // Colours the Three-Day Clocks's Hour Digit Above the Moon
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
- gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
-
- gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor);
-
- // Final Hours
- if ((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) &&
- (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) {
- if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) {
- // The Final Hours clock will flash red
-
- colorStep =
- ABS_ALT(sFinalHoursClockDigitsRed - D_801BFC04[sFinalHoursClockColorTargetIndex]) /
+ colorStep = ABS_ALT(sFinalHoursClockFrameEnvGreen -
+ sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) /
sFinalHoursClockColorTimer;
- if (sFinalHoursClockDigitsRed >= D_801BFC04[sFinalHoursClockColorTargetIndex]) {
- sFinalHoursClockDigitsRed -= colorStep;
- } else {
- sFinalHoursClockDigitsRed += colorStep;
- }
-
- colorStep =
- ABS_ALT(sFinalHoursClockFrameEnvRed - D_801BFC08[sFinalHoursClockColorTargetIndex]) /
- sFinalHoursClockColorTimer;
- if (sFinalHoursClockFrameEnvRed >= D_801BFC08[sFinalHoursClockColorTargetIndex]) {
- sFinalHoursClockFrameEnvRed -= colorStep;
- } else {
- sFinalHoursClockFrameEnvRed += colorStep;
- }
-
- colorStep =
- ABS_ALT(sFinalHoursClockFrameEnvGreen - D_801BFC0C[sFinalHoursClockColorTargetIndex]) /
- sFinalHoursClockColorTimer;
- if (sFinalHoursClockFrameEnvGreen >= D_801BFC0C[sFinalHoursClockColorTargetIndex]) {
- sFinalHoursClockFrameEnvGreen -= colorStep;
- } else {
- sFinalHoursClockFrameEnvGreen += colorStep;
- }
-
- colorStep =
- ABS_ALT(sFinalHoursClockFrameEnvBlue - D_801BFC10[sFinalHoursClockColorTargetIndex]) /
- sFinalHoursClockColorTimer;
- if (sFinalHoursClockFrameEnvBlue >= D_801BFC10[sFinalHoursClockColorTargetIndex]) {
- sFinalHoursClockFrameEnvBlue -= colorStep;
- } else {
- sFinalHoursClockFrameEnvBlue += colorStep;
- }
-
- sFinalHoursClockColorTimer--;
-
- if (sFinalHoursClockColorTimer == 0) {
- sFinalHoursClockDigitsRed = D_801BFC04[sFinalHoursClockColorTargetIndex];
- sFinalHoursClockFrameEnvRed = D_801BFC08[sFinalHoursClockColorTargetIndex];
- sFinalHoursClockFrameEnvGreen = D_801BFC0C[sFinalHoursClockColorTargetIndex];
- sFinalHoursClockFrameEnvBlue = D_801BFC10[sFinalHoursClockColorTargetIndex];
- sFinalHoursClockColorTimer = 6;
- sFinalHoursClockColorTargetIndex ^= 1;
- }
- }
-
- sp1E6 = sThreeDayClockAlpha;
- if (sp1E6 != 0) {
- sp1E6 = 255;
- }
-
- func_8012C654(play->state.gfxCtx);
-
- /**
- * Draws Final-Hours Clock's Frame
- */
- gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
- gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
- PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
- PRIMITIVE, 0);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6);
- gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen,
- sFinalHoursClockFrameEnvBlue, 0);
-
- OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202,
- 80, 13, 0, 0, 0, 1 << 10, 1 << 10);
-
- finalHoursClockSlots[0] = 0;
-
- timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH;
-
- timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash);
-
- // digits for hours
- finalHoursClockSlots[1] = timeInMinutes / 60.0f;
- finalHoursClockSlots[2] = timeInMinutes / 60.0f;
-
- temp = (s32)timeInMinutes % 60;
-
- while (finalHoursClockSlots[1] >= 10) {
- finalHoursClockSlots[0]++;
- finalHoursClockSlots[1] -= 10;
- }
-
- // digits for minutes
- finalHoursClockSlots[3] = 0;
- finalHoursClockSlots[4] = temp;
-
- while (finalHoursClockSlots[4] >= 10) {
- finalHoursClockSlots[3]++;
- finalHoursClockSlots[4] -= 10;
- }
-
- // digits for seconds
- finalHoursClockSlots[6] = 0;
- finalHoursClockSlots[7] =
- timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) +
- (((void)0, temp) * ((f32)0x10000 / (24 * 60))));
-
- while (finalHoursClockSlots[7] >= 10) {
- finalHoursClockSlots[6]++;
- finalHoursClockSlots[7] -= 10;
- }
-
- // Colon separating hours from minutes and minutes from seconds
- finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10;
-
- /**
- * Draws Final-Hours Clock's Digits
- */
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6);
- gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0);
-
- for (sp1C6 = 0; sp1C6 < 8; sp1C6++) {
- index = D_801BFC40[sp1C6];
-
- OVERLAY_DISP =
- Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]],
- 8, 8, index, 205, 8, 8, 1 << 10, 1 << 10);
- }
+ if (sFinalHoursClockFrameEnvGreen >=
+ sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) {
+ sFinalHoursClockFrameEnvGreen -= colorStep;
+ } else {
+ sFinalHoursClockFrameEnvGreen += colorStep;
}
+
+ colorStep = ABS_ALT(sFinalHoursClockFrameEnvBlue -
+ sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) /
+ sFinalHoursClockColorTimer;
+ if (sFinalHoursClockFrameEnvBlue >=
+ sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) {
+ sFinalHoursClockFrameEnvBlue -= colorStep;
+ } else {
+ sFinalHoursClockFrameEnvBlue += colorStep;
+ }
+
+ sFinalHoursClockColorTimer--;
+
+ if (sFinalHoursClockColorTimer == 0) {
+ sFinalHoursClockDigitsRed = sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex];
+ sFinalHoursClockFrameEnvRed =
+ sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex];
+ sFinalHoursClockFrameEnvGreen =
+ sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex];
+ sFinalHoursClockFrameEnvBlue =
+ sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex];
+ sFinalHoursClockColorTimer = 6;
+ sFinalHoursClockColorTargetIndex ^= 1;
+ }
+ }
+
+ sp1E6 = sThreeDayClockAlpha;
+ if (sp1E6 != 0) {
+ sp1E6 = 255;
+ }
+
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
+
+ /**
+ * Section: Draws Final-Hours Clock's Frame
+ */
+ gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6);
+ gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen,
+ sFinalHoursClockFrameEnvBlue, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, 80, 13, 0,
+ 0, 0, 1 << 10, 1 << 10);
+
+ timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH;
+ timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash);
+
+ // digits for hours
+ finalHoursClockSlots[0] = 0;
+ finalHoursClockSlots[1] = timeInMinutes / 60.0f;
+ finalHoursClockSlots[2] = timeInMinutes / 60.0f;
+
+ while (finalHoursClockSlots[1] >= 10) {
+ finalHoursClockSlots[0]++;
+ finalHoursClockSlots[1] -= 10;
+ }
+
+ // digits for minutes
+ finalHoursClockSlots[3] = 0;
+ finalHoursClockSlots[4] = (s32)timeInMinutes % 60;
+ finalHoursClockSlots[5] = (s32)timeInMinutes % 60;
+
+ while (finalHoursClockSlots[4] >= 10) {
+ finalHoursClockSlots[3]++;
+ finalHoursClockSlots[4] -= 10;
+ }
+
+ // digits for seconds
+ finalHoursClockSlots[6] = 0;
+ finalHoursClockSlots[7] =
+ timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) +
+ (finalHoursClockSlots[5] * ((f32)0x10000 / (24 * 60))));
+
+ while (finalHoursClockSlots[7] >= 10) {
+ finalHoursClockSlots[6]++;
+ finalHoursClockSlots[7] -= 10;
+ }
+
+ // Colon separating hours from minutes and minutes from seconds
+ finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10;
+
+ /**
+ * Section: Draws Final-Hours Clock's Digits
+ */
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6);
+ gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0);
+
+ for (sp1C6 = 0; sp1C6 < 8; sp1C6++) {
+ index = sFinalHoursDigitSlotPosXOffset[sp1C6];
+
+ OVERLAY_DISP =
+ Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], 8, 8,
+ index, 205, 8, 8, 1 << 10, 1 << 10);
}
}
}
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-s16 sThreeDayClockAlpha = 255;
-s16 D_801BFB30 = 0;
-s16 D_801BFB34 = 0;
-u16 sThreeDayClockHours[] = {
- CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0),
- CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0),
- CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0),
- CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0),
- CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1,
-};
-TexturePtr sThreeDayClockHourTextures[] = {
- gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
- gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
- gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
- gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
- gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
- gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
-};
-s16 D_801BFBCC = 0; // color R
-s16 D_801BFBD0 = 155; // color G
-s16 D_801BFBD4 = 255;
-s16 D_801BFBD8 = 0;
-s16 D_801BFBDC = 0;
-s16 D_801BFBE0 = 0;
-s16 D_801BFBE4 = 0xF;
-u32 D_801BFBE8 = 0;
-s16 D_801BFBEC[] = { 100, 0 };
-s16 D_801BFBF0[] = { 205, 155 };
-s16 D_801BFBF4[] = { 255, 255 };
-s16 D_801BFBF8[] = { 30, 0 };
-s16 D_801BFBFC[] = { 30, 0 };
-s16 D_801BFC00[] = { 100, 0 };
-s16 D_801BFC04[] = { 255, 0 };
-s16 D_801BFC08[] = { 100, 0 };
-s16 D_801BFC0C[] = { 30, 0 };
-s16 D_801BFC10[] = { 100, 0 };
-TexturePtr sFinalHoursDigitTextures[] = {
- gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
- gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
- gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
-};
-s16 D_801BFC40[] = {
- 127, 136, 144, 151, 160, 168, 175, 184,
-};
-void Interface_DrawClock(PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawClock.s")
-#endif
void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
@@ -5499,7 +5357,7 @@ void Interface_DrawPerfectLetters(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
@@ -6136,7 +5994,7 @@ void Interface_DrawMinigameIcons(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
// Carrots rendering if the action corresponds to riding a horse
@@ -6311,7 +6169,7 @@ void Interface_Draw(PlayState* play) {
// Draw Grandma's Story
if (interfaceCtx->storyDmaStatus == STORY_DMA_DONE) {
gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->storySegment);
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@@ -6336,7 +6194,7 @@ void Interface_Draw(PlayState* play) {
LifeMeter_Draw(play);
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
// Draw Rupee Icon
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].r,
@@ -6521,7 +6379,7 @@ void Interface_Draw(PlayState* play) {
Actor_DrawZTarget(&play->actorCtx.targetContext, play);
}
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
Interface_DrawItemButtons(play);
@@ -6553,7 +6411,7 @@ void Interface_Draw(PlayState* play) {
interfaceCtx->actionVtx[40 + 2].v.tc[1] = interfaceCtx->actionVtx[40 + 3].v.tc[1] = 32 << 5;
- func_8012C8D4(play->state.gfxCtx);
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
@@ -6588,7 +6446,7 @@ void Interface_Draw(PlayState* play) {
// Draw pictograph focus icons
if (sPictoState == PICTO_BOX_STATE_LENS) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
@@ -6631,7 +6489,7 @@ void Interface_Draw(PlayState* play) {
// Draw pictograph photo
if (sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) {
- Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer,
(u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
@@ -6656,7 +6514,7 @@ void Interface_Draw(PlayState* play) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 200, 200, 250);
gDPFillRectangle(OVERLAY_DISP++, 70, 22, 251, 151);
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetRenderMode(OVERLAY_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM);
@@ -6667,7 +6525,7 @@ void Interface_Draw(PlayState* play) {
for (sp2CC = 0; sp2CC < (PICTO_PHOTO_HEIGHT / 8); sp2CC++, pictoRectTop += 8) {
pictoRectLeft = PICTO_PHOTO_TOPLEFT_X;
gDPLoadTextureBlock(OVERLAY_DISP++,
- (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90) +
+ (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer) +
(0x500 * sp2CC),
G_IM_FMT_I, G_IM_SIZ_8b, PICTO_PHOTO_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
@@ -6748,7 +6606,7 @@ void Interface_Update(PlayState* play) {
case HUD_VISIBILITY_NONE:
case HUD_VISIBILITY_NONE_ALT:
case HUD_VISIBILITY_B:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
@@ -6779,7 +6637,7 @@ void Interface_Update(PlayState* play) {
case HUD_VISIBILITY_B_MAGIC:
case HUD_VISIBILITY_A_B:
case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
@@ -6792,7 +6650,7 @@ void Interface_Update(PlayState* play) {
break;
case HUD_VISIBILITY_ALL:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
diff --git a/src/code/z_path.c b/src/code/z_path.c
index 3c446d49a..76d7ce144 100644
--- a/src/code/z_path.c
+++ b/src/code/z_path.c
@@ -1,9 +1,9 @@
#include "global.h"
-Path* Path_GetByIndex(PlayState* play, s16 index, s16 max) {
+Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone) {
Path* path;
- if (index != max) {
+ if (index != indexNone) {
path = &play->setupPathList[index];
} else {
path = NULL;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index abf2be57c..f74be514f 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "buffers.h"
+#include "z64bombers_notebook.h"
#include "z64debug_display.h"
#include "z64quake.h"
#include "z64rumble.h"
@@ -7,7 +8,7 @@
#include "z64view.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
s32 gDbgCamEnabled = false;
@@ -358,10 +359,10 @@ void Play_Destroy(GameState* thisx) {
if (sBombersNotebookOpen) {
MsgEvent_SendNullTask();
- func_80178750();
- gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2);
+ SysCfb_SetLoResMode();
+ gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2);
gfxCtx->zbuffer = SysCfb_GetZBuffer();
- gfxCtx->viMode = D_801FBB88;
+ gfxCtx->viMode = gActiveViMode;
gfxCtx->viConfigFeatures = gViConfigFeatures;
gfxCtx->xScale = gViConfigXScale;
gfxCtx->yScale = gViConfigYScale;
@@ -1036,9 +1037,9 @@ void Play_UpdateMain(PlayState* this) {
if (this->sramCtx.status != 0) {
if (gSaveContext.save.isOwlSave) {
- func_80147198(&this->sramCtx);
+ Sram_UpdateWriteToFlashOwlSave(&this->sramCtx);
} else {
- func_80147068(&this->sramCtx);
+ Sram_UpdateWriteToFlashDefault(&this->sramCtx);
}
}
}
@@ -1051,14 +1052,14 @@ void Play_Update(PlayState* this) {
if (!sBombersNotebookOpen) {
if (this->pauseCtx.bombersNotebookOpen) {
sBombersNotebookOpen = true;
- sBombersNotebook.unk_00 = 0;
+ sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE;
}
} else if (CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_B) ||
CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_START) || (gIrqMgrResetStatus != 0)) {
sBombersNotebookOpen = false;
this->pauseCtx.bombersNotebookOpen = false;
- sBombersNotebook.unk_00 = 0;
+ sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE;
this->msgCtx.msgLength = 0;
this->msgCtx.msgMode = 0;
this->msgCtx.currentTextId = 0;
@@ -1116,7 +1117,7 @@ void Play_PostWorldDraw(PlayState* this) {
}
#ifdef NON_MATCHING
-// Stack issues and 1 small issue around Play_PostWorldDraw
+// Something weird going on with the stack of the unused arg0 of `Camera_Update`
void Play_DrawMain(PlayState* this) {
GraphicsContext* gfxCtx = this->state.gfxCtx;
Lights* sp268;
@@ -1242,7 +1243,7 @@ void Play_DrawMain(PlayState* this) {
goto PostWorldDraw;
}
- PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer);
+ PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, gfxCtx->zbuffer);
if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) {
MsgEvent_SendNullTask();
@@ -1269,11 +1270,11 @@ void Play_DrawMain(PlayState* this) {
if (!this->unk_18844) {
if (1) {
- if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) {
+ if (((u32)this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) {
if ((this->skyboxId == SKYBOX_NORMAL_SKY) || (this->skyboxId == SKYBOX_3)) {
Environment_UpdateSkybox(this->skyboxId, &this->envCtx, &this->skyboxCtx);
- Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.unk_13, this->view.eye.x,
- this->view.eye.y, this->view.eye.z);
+ Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.skyboxBlend,
+ this->view.eye.x, this->view.eye.y, this->view.eye.z);
} else if (!this->skyboxCtx.skyboxShouldDraw) {
Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x, this->view.eye.y,
this->view.eye.z);
@@ -1305,10 +1306,11 @@ void Play_DrawMain(PlayState* this) {
if (this->skyboxCtx.skyboxShouldDraw) {
Vec3f sp78;
- if (1) {}
- Camera_GetQuakeOffset(&sp78, GET_ACTIVE_CAM(this));
- Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x + sp78.x,
- this->view.eye.y + sp78.y, this->view.eye.z + sp78.z);
+ if (1) {
+ Camera_GetQuakeOffset(&sp78, GET_ACTIVE_CAM(this));
+ Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x + sp78.x,
+ this->view.eye.y + sp78.y, this->view.eye.z + sp78.z);
+ }
}
// envCtx.precipitation[PRECIP_RAIN_CUR]
@@ -1369,9 +1371,8 @@ void Play_DrawMain(PlayState* this) {
Play_DrawMotionBlur(this);
- if (((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) ||
- (gTransitionTileState == TRANS_TILE_SETUP)) ||
- (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP)) {
+ if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) ||
+ (gTransitionTileState == TRANS_TILE_SETUP) || (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP)) {
Gfx* sp74;
Gfx* sp70 = POLY_OPA_DISP;
@@ -1404,15 +1405,18 @@ void Play_DrawMain(PlayState* this) {
POLY_OPA_DISP = sp74;
this->unk_18B49 = 2;
SREG(33) |= 1;
- } else {
- PostWorldDraw:
- if (1) {
- Play_PostWorldDraw(this);
- }
+ goto SkipPostWorldDraw;
+ }
+
+ PostWorldDraw:
+ if (1) {
+ Play_PostWorldDraw(this);
}
}
}
+SkipPostWorldDraw:
+
if ((this->view.unk164 != 0) && !gDbgCamEnabled) {
Vec3s sp4C;
@@ -1428,7 +1432,7 @@ void Play_DrawMain(PlayState* this) {
func_800FE3E0(this);
}
- CLOSE_DISPS(this->state.gfxCtx);
+ CLOSE_DISPS(gfxCtx);
}
#else
void Play_DrawMain(PlayState* this);
@@ -1442,24 +1446,24 @@ void Play_Draw(PlayState* this) {
GraphicsContext* gfxCtx2 = this->state.gfxCtx;
if (sBombersNotebookOpen) {
- if (D_801FBBD4 != 1) {
+ if (gSysCfbHiResEnabled != 1) {
MsgEvent_SendNullTask();
- func_80178818();
- gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2);
+ SysCfb_SetHiResMode();
+ gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2);
gfxCtx2->zbuffer = SysCfb_GetZBuffer();
- gfxCtx2->viMode = D_801FBB88;
+ gfxCtx2->viMode = gActiveViMode;
gfxCtx2->viConfigFeatures = gViConfigFeatures;
gfxCtx2->xScale = gViConfigXScale;
gfxCtx2->yScale = gViConfigYScale;
gfxCtx2->updateViMode = true;
}
} else {
- if (D_801FBBD4 != 0) {
+ if (gSysCfbHiResEnabled != 0) {
MsgEvent_SendNullTask();
- func_80178750();
- gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2);
+ SysCfb_SetLoResMode();
+ gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2);
gfxCtx2->zbuffer = SysCfb_GetZBuffer();
- gfxCtx2->viMode = D_801FBB88;
+ gfxCtx2->viMode = gActiveViMode;
gfxCtx2->viConfigFeatures = gViConfigFeatures;
gfxCtx2->xScale = gViConfigXScale;
gfxCtx2->yScale = gViConfigYScale;
@@ -1508,7 +1512,7 @@ void Play_Main(GameState* thisx) {
}
s32 Play_InCsMode(PlayState* this) {
- return (this->csCtx.state != 0) || Player_InCsMode(this);
+ return (this->csCtx.state != CS_STATE_IDLE) || Player_InCsMode(this);
}
f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos) {
@@ -2086,8 +2090,8 @@ void Play_Init(GameState* thisx) {
s32 scene;
if ((gSaveContext.respawnFlag == -4) || (gSaveContext.respawnFlag == -0x63)) {
- if (CHECK_EVENTINF(EVENTINF_27)) {
- CLEAR_EVENTINF(EVENTINF_27);
+ if (CHECK_EVENTINF(EVENTINF_TRIGGER_DAYTELOP)) {
+ CLEAR_EVENTINF(EVENTINF_TRIGGER_DAYTELOP);
STOP_GAMESTATE(&this->state);
SET_NEXT_GAMESTATE(&this->state, DayTelop_Init, sizeof(DayTelopState));
return;
@@ -2217,7 +2221,7 @@ void Play_Init(GameState* thisx) {
if (((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN)) ||
(gSaveContext.save.cutsceneIndex >= 0xFFF0)) {
- gSaveContext.unk_3DC0 = 0;
+ gSaveContext.nayrusLoveTimer = 0;
Magic_Reset(this);
gSaveContext.sceneLayer = (gSaveContext.save.cutsceneIndex & 0xF) + 1;
@@ -2252,10 +2256,10 @@ void Play_Init(GameState* thisx) {
R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF;
PreRender_Init(&this->pauseBgPreRender);
- PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL);
- PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL);
+ PreRender_SetValuesSave(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL, NULL);
+ PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL);
- this->unk_18E64 = D_801FBB90;
+ this->unk_18E64 = gWorkBuffer;
this->pictoPhotoI8 = gPictoPhotoI8;
this->unk_18E68 = D_80784600;
this->unk_18E58 = D_80784600;
@@ -2327,8 +2331,8 @@ void Play_Init(GameState* thisx) {
Camera_InitFocalActorSettings(&this->mainCamera, &player->actor);
gDbgCamEnabled = false;
- if ((player->actor.params & 0xFF) != 0xFF) {
- Camera_ChangeActorCsCamIndex(&this->mainCamera, player->actor.params & 0xFF);
+ if (PLAYER_GET_BG_CAM_INDEX(&player->actor) != 0xFF) {
+ Camera_ChangeActorCsCamIndex(&this->mainCamera, PLAYER_GET_BG_CAM_INDEX(&player->actor));
}
CutsceneManager_StoreCamera(&this->mainCamera);
diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c
index 829fe71f2..24dcaca55 100644
--- a/src/code/z_play_hireso.c
+++ b/src/code/z_play_hireso.c
@@ -1,27 +1,1339 @@
#include "global.h"
+#include "z64bombers_notebook.h"
+#include "interface/schedule_static/schedule_static.h"
+#include "archives/schedule_dma_static/schedule_dma_static_yar.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AC10.s")
+#define BOMBERS_NOTEBOOK_ENTRY_SIZE 3
+#define BOMBERS_NOTEBOOK_ENTRY_MAX 10
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AE1C.s")
+#define BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, entry) (((&sBombersNotebookEntries[row][entry])[0] & 0xF00) >> 8)
+#define BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, entry) ((&sBombersNotebookEntries[row][entry])[0] & 0xFF)
+#define BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[1])
+#define BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[2])
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B278.s")
+#define BOMBERS_NOTEBOOK_ENTRY(pos, day, event, startTime, endTime) \
+ ((pos)&0xF000) | (((day)&0xF) << 8) | ((event)&0xFF), (startTime), (endTime)
+#define BOMBERS_NOTEBOOK_ENTRY_END 0x9999
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B4B0.s")
+#define BOMBERS_NOTEBOOK_ENTRY_POS_CENTER 0x0000
+#define BOMBERS_NOTEBOOK_ENTRY_POS_BELOW 0x4000
+#define BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE 0x8000
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016C344.s")
+typedef enum {
+ /* 0 */ BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT,
+ /* 1 */ BOMBERS_NOTEBOOK_EVENT_ICON_MASK,
+ /* 2 */ BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON
+} BombersNotebookEventIcon;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016CD4C.s")
+#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE 0xFFF0
+#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI 0xFFF1
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016E40C.s")
+u16 sBombersNotebookEntries[BOMBERS_NOTEBOOK_PERSON_MAX][BOMBERS_NOTEBOOK_ENTRY_MAX * BOMBERS_NOTEBOOK_ENTRY_SIZE] = {
+ {
+ /* Bombers */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Anju */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY,
+ CLOCK_TIME(13, 45), CLOCK_TIME(16, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING,
+ CLOCK_TIME(14, 30), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI,
+ CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI,
+ CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2,
+ BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(17, 0),
+ CLOCK_TIME(21, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3,
+ BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(6, 0),
+ CLOCK_TIME(12, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK,
+ CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Kafei */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, CLOCK_TIME(16, 30),
+ CLOCK_TIME(22, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT,
+ CLOCK_TIME(18, 0), CLOCK_TIME(19, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK,
+ CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Curiosity Shop Man */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK,
+ CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL,
+ CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK,
+ CLOCK_TIME(22, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Old Lady from Bomb Shop */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK,
+ CLOCK_TIME(0, 30), CLOCK_TIME(1, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Romani */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM,
+ CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM,
+ CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE,
+ CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Cremia */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA,
+ CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK,
+ CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Mayor Dotour */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP,
+ CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP,
+ CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP,
+ CLOCK_TIME(8, 0), CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Madame Aroma */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK,
+ CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK,
+ CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Toto */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0),
+ CLOCK_TIME(5, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0),
+ CLOCK_TIME(5, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Gorman */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0),
+ CLOCK_TIME(5, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0),
+ CLOCK_TIME(5, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Postman */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP,
+ CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI,
+ CLOCK_TIME(6, 0), CLOCK_TIME(12, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP,
+ CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Rosa Sisters */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* ??? */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Anju's Grandmother */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0),
+ CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0),
+ CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0),
+ CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2,
+ BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0),
+ CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Kamaro */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK,
+ CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Grog */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD,
+ CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD,
+ CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD,
+ CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Gorman Brothers */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA,
+ CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Shiro */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK,
+ CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+ {
+ /* Guru-Guru */
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK,
+ CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)),
+ BOMBERS_NOTEBOOK_ENTRY_END,
+ },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016EA90.s")
+s16 sBombersNotebookDayRectRectLeft[] = { 120, 120, 270, 420 };
+TexturePtr sBombersNotebookDayTextures[] = {
+ gBombersNotebookDay1stTex,
+ gBombersNotebookDay2ndTex,
+ gBombersNotebookDayFinalTex,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s")
+#define DEFINE_EVENT(_enum, icon, _colorFlag, _description, _completedMessage, _completedFlag) icon,
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F4EC.s")
+s32 sBombersNotebookEventIcons[] = {
+#include "tables/bombers_notebook/event_table.h"
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s")
+#undef DEFINE_EVENT
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s")
+s32 sBombersNotebookEventIconWidths[] = { 16, 24, 32 };
+s32 sBombersNotebookEventIconHeights[] = { 16, 28, 28 };
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s")
+#define DEFINE_EVENT(_enum, _icon, colorFlag, _description, _completedMessage, _completedFlag) colorFlag,
+
+u16 sBombersNotebookEventColorWeekEventFlags[] = {
+#include "tables/bombers_notebook/event_table.h"
+};
+
+#undef DEFINE_EVENT
+
+void BombersNotebook_DrawScisTexRect(Gfx** gfxP, s32 rxl, s32 ryl, s32 rxh, s32 ryh, s32 tile, s32 s, s32 t, s32 dsdx,
+ s32 dtdy) {
+ s32 xl = rxl - (gCfbLeftAdjust * 4);
+ s32 yl = ryl - (gCfbUpperAdjust * 4);
+ s32 xh = rxh - (gCfbLeftAdjust * 4);
+ s32 yh = ryh - (gCfbUpperAdjust * 4);
+ Gfx* gfx = *gfxP;
+
+ gSPScisTextureRectangle(gfx++, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
+
+ *gfxP = gfx;
+}
+
+s16 sBombersNotebookHeaderColors[][3] = {
+ { 116, 134, 146 }, // Column 1
+ { 158, 156, 131 }, // Column 2
+ { 174, 141, 151 }, // Column 3
+};
+
+void BombersNotebook_DrawHeaders(Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ s32 i;
+ s32 rectLeft;
+
+ gDPLoadTextureBlock(gfx++, gBombersNotebookHeaderBoxTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 24, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ for (i = 0, rectLeft = 120; i < ARRAY_COUNT(sBombersNotebookHeaderColors); i++, rectLeft += 150) {
+ gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookHeaderColors[i][0], sBombersNotebookHeaderColors[i][1],
+ sBombersNotebookHeaderColors[i][2], 192);
+ BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 74 * 4, (rectLeft + 143) * 4, 98 * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ for (i = 0, rectLeft = 124; i < ARRAY_COUNT(sBombersNotebookDayTextures); i++, rectLeft += 150) {
+ gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 48, 22, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 77 * 4, (rectLeft + 48) * 4, 99 * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ }
+
+ rectLeft = 172;
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebook1800Tex, G_IM_FMT_IA, 48, 11, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ for (i = 0; i < 3; i++) {
+ BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 86 * 4, (rectLeft + 48) * 4, 97 * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ rectLeft += 150;
+ }
+
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+// Each column/day gets subdivided into 4 sub columns, the first 2 sub columns use 1 color, the last 2 another
+s16 sBombersNotebookColumnColors[][2][3] = {
+ { { 165, 183, 195 }, { 140, 158, 170 } }, // Column 1
+ { { 197, 195, 172 }, { 172, 170, 147 } }, // Column 2
+ { { 223, 190, 200 }, { 190, 165, 175 } }, // Column 3
+};
+
+void BombersNotebook_DrawColumns(Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ s16* color;
+ s32 i;
+ s32 j;
+ s32 k;
+ s32 columnRectLeft;
+ s32 subColumnRectLeft;
+ s32 pad;
+
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookSubColumnBoxTex, G_IM_FMT_I, 48, 1, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ color = &sBombersNotebookColumnColors[0][0][0];
+ for (i = 0, columnRectLeft = 120; i < ARRAY_COUNT(sBombersNotebookColumnColors); i++, columnRectLeft += 150) {
+ subColumnRectLeft = columnRectLeft;
+ for (j = 0; j < 2; j++) {
+ gDPSetPrimColor(gfx++, 0, 0, color[0], color[1], color[2], 192);
+ for (k = 0; k < 2; k++) {
+ BombersNotebook_DrawScisTexRect(&gfx, subColumnRectLeft * 4, 104 * 4, (subColumnRectLeft + 48) * 4,
+ 480 * 4, 0, 0, 0, 1 << 10, 1 << 10);
+ subColumnRectLeft += 36;
+ }
+ color += 3;
+ }
+ }
+
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+TexturePtr sBombersNotebookEventIconTextures[] = {
+ gBombersNotebookEntryIconExclamationPointTex,
+ schedule_dma_static_yar_Blob_00AC00,
+ schedule_dma_static_yar_Blob_00AEA0,
+};
+s16 sBombersNotebookEntryIconColors[][3] = {
+ { 255, 255, 0 },
+ { 141, 255, 182 },
+ { 255, 100, 60 },
+};
+
+void BombersNotebook_DrawEntries(Gfx** gfxP, s32 row, u32 rectTop) {
+ Gfx* gfx = *gfxP;
+ s32 entryRectLeft;
+ u32 eventIcon;
+ u32 unfinishedEvent = false;
+ u16 startTime;
+ u16 endTime;
+ s32 j = 0;
+ u32 iconRectLeft;
+ s32 entryRectRight;
+ u32 yOffset;
+ s32 entryWidth;
+
+ while (true) {
+ if (sBombersNotebookEntries[row][j] == BOMBERS_NOTEBOOK_ENTRY_END) {
+ if (!unfinishedEvent) {
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookStampTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 48, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, 567 * 4, (rectTop + 1) * 4, 599 * 4, (rectTop + 49) * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ gDPSetEnvColor(gfx++, 255, 0, 0, 255);
+ BombersNotebook_DrawScisTexRect(&gfx, 565 * 4, (rectTop + -1) * 4, 597 * 4, (rectTop + 47) * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ }
+ break;
+ }
+
+ if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) {
+ yOffset = 8;
+ } else if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) {
+ yOffset = 24;
+ } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER
+ yOffset = 16;
+ }
+
+ startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, j) - CLOCK_TIME(6, 0);
+ endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, j) - CLOCK_TIME(6, 0);
+ entryRectLeft =
+ sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (startTime / CLOCK_TIME(0, 10));
+ entryRectRight =
+ sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (endTime / CLOCK_TIME(0, 10));
+ entryWidth = entryRectRight - entryRectLeft - 8;
+ if ((entryRectRight - entryRectLeft) < 8) {
+ entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8;
+ entryRectRight = entryRectLeft + 8;
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4,
+ (entryRectLeft + 6) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -2) * 4, (rectTop + yOffset + 2) * 4,
+ (entryRectRight + 2) * 4, (rectTop + yOffset + 18) * 4, 0, 0x80, 0, 1 << 10,
+ 1 << 10);
+ if (entryWidth > 0) {
+ gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 6) * 4, (rectTop + yOffset + 2) * 4,
+ (entryRectLeft + 6 + entryWidth) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ //! FAKE: the ^ 0
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft * 4) ^ 0, (rectTop + yOffset) * 4, (entryRectLeft + 4) * 4,
+ (rectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10, 1 << 10);
+ //! FAKE: the ^ 0
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -4) * 4, (rectTop + yOffset) * 4,
+ (entryRectRight * 4) ^ 0, (rectTop + yOffset + 16) * 4, 0, 0x80, 0, 1 << 10,
+ 1 << 10);
+ if (entryWidth > 0) {
+ gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 4) * 4, (rectTop + yOffset) * 4,
+ (entryRectLeft + 4 + entryWidth) * 4, (rectTop + yOffset + 16) * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ }
+
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j)])) {
+ eventIcon =
+ sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - BOMBERS_NOTEBOOK_PERSON_MAX];
+ if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[eventIcon]) {
+ iconRectLeft =
+ (((entryRectLeft - sBombersNotebookEventIconWidths[eventIcon]) + entryRectRight) - entryRectLeft) +
+ 3;
+ } else {
+ iconRectLeft = (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[eventIcon]) / 2) +
+ entryRectLeft;
+ }
+
+ if ((eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) {
+ if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) {
+ yOffset -= 12;
+ } else if (!(sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) {
+ // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER
+ yOffset -= 6;
+ }
+ }
+ gDPLoadTextureBlock(gfx++, sBombersNotebookEventIconTextures[eventIcon], G_IM_FMT_IA, G_IM_SIZ_8b,
+ sBombersNotebookEventIconWidths[eventIcon], sBombersNotebookEventIconHeights[eventIcon],
+ 0, G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
+
+ BombersNotebook_DrawScisTexRect(&gfx, (iconRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4,
+ (iconRectLeft + 2 + sBombersNotebookEventIconWidths[eventIcon]) * 4,
+ (rectTop + yOffset + 2 + sBombersNotebookEventIconHeights[eventIcon]) * 4,
+ 0, 0, 0, 1 << 10, 1 << 10);
+ if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) -
+ BOMBERS_NOTEBOOK_PERSON_MAX] ==
+ BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE) {
+ gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0],
+ sBombersNotebookEntryIconColors[eventIcon][1],
+ sBombersNotebookEntryIconColors[eventIcon][2], 255);
+ } else if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) -
+ BOMBERS_NOTEBOOK_PERSON_MAX] ==
+ BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN)) {
+ gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0],
+ sBombersNotebookEntryIconColors[eventIcon][1],
+ sBombersNotebookEntryIconColors[eventIcon][2], 255);
+ } else {
+ gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255);
+ }
+ } else {
+ if (CHECK_WEEKEVENTREG(
+ sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) -
+ BOMBERS_NOTEBOOK_PERSON_MAX])) {
+ gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0],
+ sBombersNotebookEntryIconColors[eventIcon][1],
+ sBombersNotebookEntryIconColors[eventIcon][2], 255);
+ } else {
+ gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255);
+ }
+ }
+ BombersNotebook_DrawScisTexRect(&gfx, iconRectLeft * 4, (rectTop + yOffset) * 4,
+ (iconRectLeft + sBombersNotebookEventIconWidths[eventIcon]) * 4,
+ (rectTop + yOffset + sBombersNotebookEventIconHeights[eventIcon]) * 4, 0, 0,
+ 0, 1 << 10, 1 << 10);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ } else {
+ unfinishedEvent = true;
+ }
+ j += BOMBERS_NOTEBOOK_ENTRY_SIZE;
+ }
+
+ *gfxP = gfx;
+}
+
+#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) &photo,
+
+TexturePtr sBombersNotebookPhotoTextures[] = {
+#include "tables/bombers_notebook/person_table.h"
+};
+
+#undef DEFINE_PERSON
+
+void BombersNotebook_DrawRows(BombersNotebook* this, Gfx** gfxP) {
+ static s16 sBarColorR = 0;
+ static s16 sBarColorG = 0;
+ static s16 sBarColorB = 0;
+ static s16 sBarColorTimer = 10;
+ static s16 sBarColorIndex = 0;
+ static s16 sBarColorTargetsR[] = { 100, 0 };
+ static s16 sBarColorTargetsG[] = { 80, 0 };
+ static s16 sBarColorTargetsB[] = { 255, 0 };
+ Gfx* gfx = *gfxP;
+ s32 photoWidth;
+ s32 rowEnd;
+ s32 cursorPage;
+ u32 barRectLeft;
+ f32 photoRectDs;
+ u32 photoOffset;
+ s32 i;
+ u32 rectTop;
+ s16 colorStep;
+
+ colorStep = ABS_ALT(sBarColorR - sBarColorTargetsR[sBarColorIndex]) / sBarColorTimer;
+ if (sBarColorR >= sBarColorTargetsR[sBarColorIndex]) {
+ sBarColorR -= colorStep;
+ } else {
+ sBarColorR += colorStep;
+ }
+
+ colorStep = ABS_ALT(sBarColorG - sBarColorTargetsG[sBarColorIndex]) / sBarColorTimer;
+ if (sBarColorG >= sBarColorTargetsG[sBarColorIndex]) {
+ sBarColorG -= colorStep;
+ } else {
+ sBarColorG += colorStep;
+ }
+
+ colorStep = ABS_ALT(sBarColorB - sBarColorTargetsB[sBarColorIndex]) / sBarColorTimer;
+ if (sBarColorB >= sBarColorTargetsB[sBarColorIndex]) {
+ sBarColorB -= colorStep;
+ } else {
+ sBarColorB += colorStep;
+ }
+
+ sBarColorTimer--;
+ if (sBarColorTimer == 0) {
+ sBarColorTimer = 10;
+ sBarColorR = sBarColorTargetsR[sBarColorIndex];
+ sBarColorG = sBarColorTargetsG[sBarColorIndex];
+ sBarColorB = sBarColorTargetsB[sBarColorIndex];
+ sBarColorIndex ^= 1;
+ }
+
+ rectTop = this->scrollOffset + 107;
+ if (this->cursorPage >= (BOMBERS_NOTEBOOK_PERSON_MAX - 8)) {
+ rowEnd = BOMBERS_NOTEBOOK_PERSON_MAX;
+ i = this->cursorPage;
+ } else {
+ rowEnd = this->cursorPage + 8;
+ i = rowEnd - 8;
+ }
+ cursorPage = i;
+ for (; i < rowEnd; i++, rectTop += 52) {
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) {
+ gDPLoadTextureBlock(gfx++, sBombersNotebookPhotoTextures[i], G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
+ } else {
+ gDPLoadTextureBlock(gfx++, gBombersNotebookEmptyPhotoTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
+ }
+ if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) {
+ barRectLeft = 56;
+ photoOffset = 8;
+ photoRectDs = 200.0f;
+ photoWidth = 64;
+ } else {
+ barRectLeft = 48;
+ photoOffset = 0;
+ photoRectDs = 150.0f;
+ photoWidth = 48;
+ }
+ BombersNotebook_DrawScisTexRect(&gfx, (57 - photoOffset) * 4, (rectTop - photoOffset) * 4,
+ (57 - photoOffset + photoWidth) * 4, (rectTop - photoOffset + photoWidth) * 4,
+ 0, 0, 0, 1024.0f / (photoRectDs / 100.0f), 1024.0f / (photoRectDs / 100.0f));
+
+ if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) {
+ gDPSetPrimColor(gfx++, 0, 0, sBarColorR, sBarColorG, sBarColorB, 255);
+ } else {
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 60);
+ }
+ gDPLoadTextureBlock(gfx++, gBombersNotebookBarTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 4, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft + 57) * 4, (rectTop + 22) * 4,
+ (barRectLeft - photoOffset + 527) * 4, (rectTop + 26) * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft - photoOffset + 527) * 4, (rectTop + 16) * 4,
+ (barRectLeft - photoOffset + 543) * 4, (rectTop + 32) * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) {
+ gDPPipeSync(gfx++);
+ gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+
+ BombersNotebook_DrawEntries(&gfx, i, rectTop);
+
+ gDPPipeSync(gfx++);
+ gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ }
+ }
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+TexturePtr sBombersNotebookDigitTextures[] = {
+ gBombersNotebookDigit0Tex, gBombersNotebookDigit1Tex, gBombersNotebookDigit2Tex, gBombersNotebookDigit3Tex,
+ gBombersNotebookDigit4Tex, gBombersNotebookDigit5Tex, gBombersNotebookDigit6Tex, gBombersNotebookDigit7Tex,
+ gBombersNotebookDigit8Tex, gBombersNotebookDigit9Tex,
+};
+u8 sBombersNotebookDigitRectLeftOffsets[] = { 13, 8, 12, 13, 14, 13, 12, 12, 13, 12 };
+s16 sBombersNotebookDayTexRectLeftOffsets[] = { 16, 12, 9 };
+
+#define CURRENT_DAY_CLAMP_MIN_1 ((CURRENT_DAY == 0) ? 1 : CURRENT_DAY)
+void BombersNotebook_DrawTimeOfDay(Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ u32 timeOfDayRectLeft;
+ u32 timeBoxRectLeft;
+ u32 connectorRectLeft;
+ u32 lineRectLeft;
+ u32 digitsRectLeft;
+ u16 time;
+ s32 onesDigit;
+ s32 tensDigit;
+ s32 hours;
+
+ time = (((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
+ if (CURRENT_DAY == 0) {
+ time = 0;
+ }
+ timeOfDayRectLeft = sBombersNotebookDayRectRectLeft[CURRENT_DAY] + (time / CLOCK_TIME(0, 10));
+ if ((CURRENT_DAY_CLAMP_MIN_1 == 1) ||
+ ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (((void)0, gSaveContext.save.time) < CLOCK_TIME(12, 0)))) {
+ timeOfDayRectLeft -= 32;
+ lineRectLeft = timeOfDayRectLeft + 32;
+ } else if ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time >= (CLOCK_TIME(17, 0) - CLOCK_TIME(6, 0))) &&
+ (time <= (CLOCK_TIME(19, 0) - CLOCK_TIME(6, 0)))) {
+ timeOfDayRectLeft -= 64;
+ lineRectLeft = timeOfDayRectLeft + 64;
+ } else {
+ timeOfDayRectLeft -= 96;
+ lineRectLeft = timeOfDayRectLeft + 96;
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNoteoobkTimeOfDayBoxTex, G_IM_FMT_IA, 64, 28, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, timeOfDayRectLeft * 4, 42 * 4, (timeOfDayRectLeft + 128) * 4, 70 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ BombersNotebook_DrawScisTexRect(&gfx, (timeOfDayRectLeft + 16) * 4, 47 * 4, (timeOfDayRectLeft + 112) * 4, 67 * 4,
+ 0, 0, 0, 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ if (((CURRENT_DAY_CLAMP_MIN_1 >= 3) ||
+ ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time > (CLOCK_TIME(18, 0) - CLOCK_TIME(6, 0)))))) {
+ timeBoxRectLeft = timeOfDayRectLeft - 159;
+ connectorRectLeft = timeOfDayRectLeft - 17;
+ } else {
+ timeBoxRectLeft = timeOfDayRectLeft + 130;
+ connectorRectLeft = timeOfDayRectLeft + 113;
+ }
+
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxLeftTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, timeBoxRectLeft * 4, 42 * 4, (timeBoxRectLeft + 16) * 4, 70 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxMiddleTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 16) * 4, 42 * 4, (timeBoxRectLeft + 141) * 4, 70 * 4, 0, 0,
+ 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxRightTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 141) * 4, 42 * 4, (timeBoxRectLeft + 157) * 4, 70 * 4, 0,
+ 0, 0, 1 << 10, 1 << 10);
+ gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[CURRENT_DAY_CLAMP_MIN_1 - 1], G_IM_FMT_IA, G_IM_SIZ_8b, 48,
+ 22, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(
+ &gfx, (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1]) * 4, 46 * 4,
+ (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1] + 48) * 4, 68 * 4, 0, 0,
+ 0, 1 << 10, 1 << 10);
+
+ gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 255);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 56) * 4, 48 * 4, (timeBoxRectLeft + 72) * 4, 0x100, 0, 0,
+ 0, 1 << 10, 1 << 10);
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
+
+ tensDigit = 0;
+ onesDigit = ((void)0, gSaveContext.save.time) / CLOCK_TIME_HOUR;
+ if (CURRENT_DAY == 0) {
+ onesDigit = 6;
+ }
+ hours = onesDigit;
+ do {
+ if (onesDigit >= 10) {
+ tensDigit++;
+ onesDigit -= 10;
+ }
+ } while (onesDigit >= 10);
+
+ digitsRectLeft = timeBoxRectLeft + 75;
+ gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit];
+ gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[onesDigit];
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookColonTex, G_IM_FMT_I, 16, 17, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ digitsRectLeft += 7;
+ tensDigit = 0;
+ if (CURRENT_DAY == 0) {
+ onesDigit = TIME_TO_MINUTES_ALT_F((CLOCK_TIME_F(6, 0) - (hours * CLOCK_TIME_HOUR_F)));
+ } else {
+ onesDigit = TIME_TO_MINUTES_ALT_F(((void)0, gSaveContext.save.time) - (hours * CLOCK_TIME_HOUR_F));
+ }
+ do {
+ if (onesDigit >= 10) {
+ tensDigit++;
+ onesDigit -= 10;
+ }
+ } while (onesDigit >= 10);
+
+ gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+ digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit];
+ gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 14, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, connectorRectLeft * 4, 49 * 4, (connectorRectLeft + 32) * 4, 63 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPSetPrimColor(gfx++, 0, 0, 242, 0, 14, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookLineTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 1, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, lineRectLeft * 4, 74 * 4, (lineRectLeft + 32) * 4, 490 * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255);
+ gDPSetEnvColor(gfx++, 200, 0, 0, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ BombersNotebook_DrawScisTexRect(&gfx, (lineRectLeft + -11) * 4, 70 * 4, (lineRectLeft + 13) * 4, 86 * 4, 0, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+void BombersNotebook_DrawCursor(BombersNotebook* this, Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ s32 cursorRow;
+ s32 cursorEntry;
+ s32 entryRectRight;
+ s32 entryRectLeft;
+ s32 entryIcon;
+ u32 cursorRectLeft;
+ u32 cursorRectTop;
+ u32 yOffset;
+ u16 startTime;
+ u16 endTime;
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 205, 55, 255);
+ gDPSetEnvColor(gfx++, 0, 0, 0, 255);
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_MIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD);
+
+ if (this->cursorEntry == 0) {
+ BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 97) * 4, 63 * 4,
+ (this->cursorPageRow * 52 + 113) * 4, 0, 0, 0, 1 << 10, 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 97) * 4, 114 * 4,
+ (this->cursorPageRow * 52 + 113) * 4, 0, 0x200, 0, 1 << 10, 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 147) * 4, 63 * 4,
+ (this->cursorPageRow * 52 + 163) * 4, 0, 0, 0x200, 1 << 10, 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 147) * 4, 114 * 4,
+ (this->cursorPageRow * 52 + 163) * 4, 0, 0x200, 0x200, 1 << 10, 1 << 10);
+ } else {
+ cursorRow = this->cursorPageRow + this->cursorPage;
+ cursorRectTop = (this->cursorPageRow * 52) + 107;
+ cursorEntry = this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE; // Offset from photo entry
+ if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) {
+ yOffset = 8;
+ } else if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) {
+ yOffset = 24;
+ } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER
+ yOffset = 16;
+ }
+
+ startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0);
+ endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0);
+ entryRectLeft = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] +
+ (startTime / CLOCK_TIME(0, 10));
+ entryRectRight = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] +
+ (endTime / CLOCK_TIME(0, 10));
+ if ((entryRectRight - entryRectLeft) < 8) {
+ entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8;
+ entryRectRight = entryRectLeft + 8;
+ }
+ entryIcon = sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(cursorRow, cursorEntry) -
+ BOMBERS_NOTEBOOK_PERSON_MAX];
+ if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[entryIcon]) {
+ cursorRectLeft =
+ (((entryRectLeft - sBombersNotebookEventIconWidths[entryIcon]) + entryRectRight) - entryRectLeft) + 3;
+ } else {
+ cursorRectLeft =
+ (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[entryIcon]) / 2) + entryRectLeft;
+ }
+ if (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT) {
+ cursorRectLeft -= 8;
+ cursorRectTop -= 8;
+ } else {
+ cursorRectLeft -= 9;
+ cursorRectTop -= 8;
+ }
+ if ((entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) {
+ if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) {
+ yOffset -= 12;
+ } else if (!(sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) {
+ // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER
+ yOffset -= 6;
+ }
+ }
+ BombersNotebook_DrawScisTexRect(&gfx, cursorRectLeft * 4, (cursorRectTop + yOffset) * 4,
+ (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10,
+ 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4,
+ (cursorRectTop + yOffset) * 4,
+ (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4,
+ (cursorRectTop + yOffset + 16) * 4, 0, 0x200, 0, 1 << 10, 1 << 10);
+ BombersNotebook_DrawScisTexRect(
+ &gfx, cursorRectLeft * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4,
+ (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) * 4,
+ 0, 0, 0x200, 1 << 10, 1 << 10);
+ BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4,
+ (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4,
+ (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4,
+ (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) *
+ 4,
+ 0, 0x200, 0x200, 1 << 10, 1 << 10);
+ }
+
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+void BombersNotebook_DrawArrows(BombersNotebook* this, Gfx** gfxP) {
+ static s16 sUpperArrowColorR = 0;
+ static s16 sUpperArrowColorG = 100;
+ static s16 sUpperArrowColorB = 255;
+ static s16 sLowerArrowColorR = 0;
+ static s16 sLowerArrowColorG = 100;
+ static s16 sLowerArrowColorB = 255;
+ static s16 sUpperArrowColorIndex = 0;
+ static s16 sLowerArrowColorIndex = 0;
+ static s16 sUpperArrowColorTimer = 6;
+ static s16 sLowerArrowColorTimer = 6;
+ static s16 sUpperArrowOffsetY = 0;
+ static s16 sLowerArrowOffsetY = 0;
+ static s16 sArrowColorTargetsG[] = { 175, 100 };
+ static s16 sArrowColorTargetsB[] = { 205, 255 };
+ Gfx* gfx = *gfxP;
+ u32 rectTop;
+ s16 colorStep;
+
+ gDPPipeSync(gfx++);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, 4, G_TX_NOLOD, G_TX_NOLOD);
+
+ colorStep = ABS_ALT(sUpperArrowColorG - sArrowColorTargetsG[sUpperArrowColorIndex]) / sUpperArrowColorTimer;
+ if (sUpperArrowColorG >= sArrowColorTargetsG[sUpperArrowColorIndex]) {
+ sUpperArrowColorG -= colorStep;
+ } else {
+ sUpperArrowColorG += colorStep;
+ }
+
+ colorStep = ABS_ALT(sUpperArrowColorB - sArrowColorTargetsB[sUpperArrowColorIndex]) / sUpperArrowColorTimer;
+ if (sUpperArrowColorB >= sArrowColorTargetsB[sUpperArrowColorIndex]) {
+ sUpperArrowColorB -= colorStep;
+ } else {
+ sUpperArrowColorB += colorStep;
+ }
+
+ sUpperArrowColorTimer--;
+ if (sUpperArrowColorTimer == 0) {
+ sUpperArrowOffsetY ^= 6;
+ sUpperArrowColorTimer = 6;
+ sUpperArrowColorG = sArrowColorTargetsG[sUpperArrowColorIndex];
+ sUpperArrowColorB = sArrowColorTargetsB[sUpperArrowColorIndex];
+ sUpperArrowColorIndex ^= 1;
+ }
+
+ colorStep = ABS_ALT(sLowerArrowColorG - sArrowColorTargetsG[sLowerArrowColorIndex]) / sLowerArrowColorTimer;
+ if (sLowerArrowColorG >= sArrowColorTargetsG[sLowerArrowColorIndex]) {
+ sLowerArrowColorG -= colorStep;
+ } else {
+ sLowerArrowColorG += colorStep;
+ }
+
+ colorStep = ABS_ALT(sLowerArrowColorB - sArrowColorTargetsB[sLowerArrowColorIndex]) / sLowerArrowColorTimer;
+ if (sLowerArrowColorB >= sArrowColorTargetsB[sLowerArrowColorIndex]) {
+ sLowerArrowColorB -= colorStep;
+ } else {
+ sLowerArrowColorB += colorStep;
+ }
+
+ sLowerArrowColorTimer--;
+ if (sLowerArrowColorTimer == 0) {
+ sLowerArrowOffsetY ^= 6;
+ sLowerArrowColorTimer = 6;
+ sLowerArrowColorG = sArrowColorTargetsG[sLowerArrowColorIndex];
+ sLowerArrowColorB = sArrowColorTargetsB[sLowerArrowColorIndex];
+ sLowerArrowColorIndex ^= 1;
+ }
+
+ if (this->cursorPage != 0) {
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255);
+ gDPSetEnvColor(gfx++, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255);
+ rectTop = (-sUpperArrowOffsetY + 83) * 4;
+ BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, rectTop, 70 * 4, rectTop + (16 * 4), 0, 0, 0x200, 1 << 10,
+ 1 << 10);
+ }
+
+ if (this->cursorPage < 16) {
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255);
+ gDPSetEnvColor(gfx++, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255);
+ BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, (sLowerArrowOffsetY + 319) * 4, 70 * 4,
+ (sLowerArrowOffsetY + 335) * 4, 0, 0, 0, 1 << 10, 1 << 10);
+ }
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx) {
+ Gfx* gfx;
+ s32 pad[2];
+
+ func_8012CF0C(gfxCtx, this->loadState != BOMBERS_NOTEBOOK_LOAD_STATE_DONE, false, 0, 0, 0);
+
+ OPEN_DISPS(gfxCtx);
+
+ gfx = POLY_OPA_DISP;
+
+ if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) {
+ gSPSegment(gfx++, 0x07, this->scheduleDmaSegment);
+ gSPSegment(gfx++, 0x08, this->scheduleSegment);
+ gfx = Gfx_SetupDL39(gfx);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
+ gDPSetPrimColor(gfx++, 0, 0, 255, 255, 215, 255);
+ gDPSetEnvColor(gfx++, 100, 100, 100, 255);
+ gDPLoadTextureBlock(gfx++, gBombersNotebookBackgroundTex, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
+
+ BombersNotebook_DrawScisTexRect(&gfx, 0 * 4, 0 * 4, SCREEN_WIDTH_HIRES * 4, SCREEN_HEIGHT_HIRES * 4, 0, 0, 0,
+ 0x200, 0x200);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+
+ BombersNotebook_DrawHeaders(&gfx);
+ BombersNotebook_DrawColumns(&gfx);
+
+ gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 86, 600, 450);
+ BombersNotebook_DrawRows(this, &gfx);
+
+ gDPPipeSync(gfx++);
+ gSPDisplayList(gfx++, D_0E000000.setScissor);
+
+ BombersNotebook_DrawTimeOfDay(&gfx);
+
+ if (this->scrollAmount == 0) {
+ BombersNotebook_DrawCursor(this, &gfx);
+ }
+ BombersNotebook_DrawArrows(this, &gfx);
+ }
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void BombersNotebook_LoadFiles(BombersNotebook* this, s32 flag) {
+ switch (this->loadState) {
+ case BOMBERS_NOTEBOOK_LOAD_STATE_NONE:
+ if (this->scheduleDmaSegment == NULL) {
+ break;
+ }
+ CmpDma_LoadAllFiles(this->scheduleDmaSegmentStart, this->scheduleDmaSegment, this->scheduleDmaSegmentSize);
+ osCreateMesgQueue(&this->loadQueue, this->loadMsg, ARRAY_COUNT(this->loadMsg));
+ DmaMgr_SendRequestImpl(&this->dmaRequest, this->scheduleSegment, this->scheduleSegmentStart,
+ this->scheduleSegmentSize, 0, &this->loadQueue, NULL);
+ this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_STARTED;
+ // fallthrough
+ case BOMBERS_NOTEBOOK_LOAD_STATE_STARTED:
+ if (osRecvMesg(&this->loadQueue, NULL, flag) == 0) {
+ this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_DONE;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+#define DEFINE_PERSON(_enum, _photo, description, _metEnum, _metMessage, _metFlag) description,
+#define DEFINE_EVENT(_enum, _icon, _colorFlag, description, _completedMessage, _completedFlag) description,
+
+u16 sBombersNotebookTextIds[] = {
+#include "tables/bombers_notebook/person_table.h"
+#include "tables/bombers_notebook/event_table.h"
+};
+
+#undef DEFINE_PERSON
+#undef DEFINE_EVENT
+
+void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input) {
+ static s16 sStickXRepeatTimer = 0;
+ static s16 sStickYRepeatTimer = 0;
+ static s16 sStickXRepeatState = 0;
+ static s16 sStickYRepeatState = 0;
+ s32 stickAdjX = input->rel.stick_x;
+ s32 stickAdjY = input->rel.stick_y;
+ s32 cursorEntryScan;
+
+ this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_yar);
+ this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_syms);
+ this->scheduleSegmentStart = SEGMENT_ROM_START(schedule_static);
+ this->scheduleSegmentSize = SEGMENT_ROM_SIZE(schedule_static);
+
+ if (this->scheduleDmaSegment == NULL) {
+ this->scheduleDmaSegment = ZeldaArena_Malloc(this->scheduleDmaSegmentSize);
+ }
+
+ if (this->scheduleSegment == NULL) {
+ this->scheduleSegment = ZeldaArena_Malloc(this->scheduleSegmentSize);
+ }
+
+ BombersNotebook_LoadFiles(this, OS_MESG_NOBLOCK);
+
+ if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) {
+ if (stickAdjX < -30) {
+ if (sStickXRepeatState == -1) {
+ sStickXRepeatTimer--;
+ if (sStickXRepeatTimer < 0) {
+ sStickXRepeatTimer = 2;
+ } else {
+ stickAdjX = 0;
+ }
+ } else {
+ sStickXRepeatTimer = 10;
+ sStickXRepeatState = -1;
+ }
+ } else if (stickAdjX > 30) {
+ if (sStickXRepeatState == 1) {
+ sStickXRepeatTimer--;
+ if (sStickXRepeatTimer < 0) {
+ sStickXRepeatTimer = 2;
+ } else {
+ stickAdjX = 0;
+ }
+ } else {
+ sStickXRepeatTimer = 10;
+ sStickXRepeatState = 1;
+ }
+ } else {
+ sStickXRepeatState = 0;
+ }
+
+ if (stickAdjY < -30) {
+ if (sStickYRepeatState == -1) {
+ sStickYRepeatTimer--;
+ if (sStickYRepeatTimer < 0) {
+ sStickYRepeatTimer = 2;
+ } else {
+ stickAdjY = 0;
+ }
+ } else {
+ sStickYRepeatTimer = 10;
+ sStickYRepeatState = -1;
+ }
+ } else if (stickAdjY > 30) {
+ if (sStickYRepeatState == 1) {
+ sStickYRepeatTimer--;
+ if (sStickYRepeatTimer < 0) {
+ sStickYRepeatTimer = 2;
+ } else {
+ stickAdjY = 0;
+ }
+ } else {
+ sStickYRepeatTimer = 10;
+ sStickYRepeatState = 1;
+ }
+ } else {
+ sStickYRepeatState = 0;
+ }
+
+ if (this->scrollAmount == 0) {
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[this->cursorPageRow + this->cursorPage])) {
+ cursorEntryScan = this->cursorEntry;
+ if (stickAdjX > 30) {
+ while (true) {
+ cursorEntryScan += BOMBERS_NOTEBOOK_ENTRY_SIZE;
+ if (sBombersNotebookEntries[this->cursorPageRow + this->cursorPage]
+ [cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE] ==
+ BOMBERS_NOTEBOOK_ENTRY_END) {
+ while (true) {
+ cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE;
+ if (cursorEntryScan == 0) {
+ play_sound(NA_SE_SY_ERROR);
+ break;
+ }
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
+ this->cursorPageRow + this->cursorPage,
+ cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
+ play_sound(NA_SE_SY_ERROR);
+ break;
+ }
+ }
+ break;
+ }
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
+ this->cursorPageRow + this->cursorPage,
+ cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
+ play_sound(NA_SE_SY_CURSOR);
+ break;
+ }
+ }
+ this->cursorEntry = cursorEntryScan;
+ } else if (stickAdjX < -30) {
+ if (cursorEntryScan != 0) {
+ do {
+ cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE;
+ if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
+ this->cursorPageRow + this->cursorPage,
+ cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
+ play_sound(NA_SE_SY_CURSOR);
+ break;
+ }
+ } while (cursorEntryScan != 0);
+ this->cursorEntry = cursorEntryScan;
+ }
+ }
+ if (this->cursorEntry != 0) {
+ if (play->msgCtx.currentTextId !=
+ sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
+ this->cursorPageRow + this->cursorPage, this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]) {
+ Message_ContinueTextbox(play, sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
+ this->cursorPageRow + this->cursorPage,
+ this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]);
+ }
+ } else {
+ if (play->msgCtx.currentTextId != sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]) {
+ Message_ContinueTextbox(play, sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]);
+ }
+ }
+ } else {
+ Message_CloseTextbox(play);
+ }
+
+ if (stickAdjY < -30) {
+ if (this->cursorPageRow < 3) {
+ play_sound(NA_SE_SY_CURSOR);
+ this->cursorEntry = 0;
+ this->cursorPageRow++;
+ } else if (this->cursorPage < (BOMBERS_NOTEBOOK_PERSON_MAX - 4)) {
+ if (sStickYRepeatState == -1) {
+ this->scrollAmount = -24;
+ } else {
+ this->scrollAmount = -12;
+ }
+ this->scrollOffset = 0;
+ this->cursorEntry = 0;
+ }
+ } else if (stickAdjY > 30) {
+ if (this->cursorPageRow > 0) {
+ play_sound(NA_SE_SY_CURSOR);
+ this->cursorEntry = 0;
+ this->cursorPageRow--;
+ } else if (this->cursorPage != 0) {
+ play_sound(NA_SE_SY_CURSOR);
+ this->cursorPage--;
+ if (sStickYRepeatState == 1) {
+ this->scrollAmount = 24;
+ } else {
+ this->scrollAmount = 12;
+ }
+ this->scrollOffset = -48;
+ this->cursorEntry = 0;
+ }
+ }
+ } else if (this->scrollAmount < 0) {
+ this->scrollOffset += this->scrollAmount;
+ if (ABS_ALT(this->scrollOffset) >= 48) {
+ play_sound(NA_SE_SY_CURSOR);
+ this->scrollOffset = 0;
+ this->scrollAmount = 0;
+ this->cursorPage++;
+ }
+ } else {
+ this->scrollOffset += this->scrollAmount;
+ if (this->scrollOffset == 0) {
+ this->scrollOffset = 0;
+ this->scrollAmount = 0;
+ }
+ }
+ }
+}
+
+void BombersNotebook_Init(BombersNotebook* this) {
+ bzero(this, sizeof(BombersNotebook));
+}
+
+void BombersNotebook_Destroy(BombersNotebook* this) {
+ if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_STARTED) {
+ BombersNotebook_LoadFiles(this, OS_MESG_BLOCK);
+ }
+ if (this->scheduleDmaSegment != NULL) {
+ ZeldaArena_Free(this->scheduleDmaSegment);
+ this->scheduleDmaSegment = NULL;
+ }
+ //! @bug: Does not free malloc'd memory for schedule segment
+}
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index a109dab17..6aee18baf 100644
--- a/src/code/z_player_call.c
+++ b/src/code/z_player_call.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#define FLAGS \
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index f8b33b853..2e2d2222d 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -257,7 +257,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) {
for (i = 0; i < ARRAY_COUNT(arg1->unk_04); i++, temp_v1++) {
// Can't be `temp_v1->alpha != 0`
if (temp_v1->alpha) {
- phi_a1 = temp_v1->unk_00 == 3 ? (255 / 3) : (255 / 5);
+ phi_a1 = (temp_v1->unk_00 == 3) ? (255 / 3) : (255 / 5);
if (phi_a1 >= temp_v1->alpha) {
temp_v1->alpha = 0;
} else {
@@ -270,7 +270,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) {
typedef struct {
/* 0x0 */ Color_RGB8 color;
/* 0x4 */ Gfx* dList;
-} struct_801BFDD0; // size = 0x08
+} struct_801BFDD0; // size = 0x8
struct_801BFDD0 D_801BFDD0[] = {
{ { 180, 200, 255 }, gLinkGoronCurledDL },
@@ -369,13 +369,13 @@ void func_80122F28(Player* player) {
s32 func_80122F9C(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->stateFlags2 & PLAYER_STATE2_80000) && player->unk_AE7 == 2;
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 2);
}
s32 func_80122FCC(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 1 || player->unk_AE7 == 3);
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->unk_AE7 == 1) || (player->unk_AE7 == 3));
}
void func_8012300C(PlayState* play, s32 arg1) {
@@ -472,7 +472,7 @@ void func_80123140(PlayState* play, Player* player) {
REG(39) = bootRegs[8];
REG(43) = bootRegs[9];
R_RUN_SPEED_LIMIT = bootRegs[10];
- REG(68) = bootRegs[11];
+ REG(68) = bootRegs[11]; // gravity
REG(69) = bootRegs[12];
IREG(66) = bootRegs[13];
IREG(67) = bootRegs[14];
@@ -503,7 +503,7 @@ s32 Player_InBlockingCsMode(PlayState* play, Player* player) {
s32 Player_InCsMode(PlayState* play) {
Player* player = GET_PLAYER(play);
- return Player_InBlockingCsMode(play, player) || player->unk_AA5 == 5;
+ return Player_InBlockingCsMode(play, player) || (player->unk_AA5 == PLAYER_UNKAA5_5);
}
s32 func_80123420(Player* player) {
@@ -556,8 +556,8 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) {
Player* player = GET_PLAYER(play);
if (player->stateFlags3 & PLAYER_STATE3_1000) {
- player->unk_B08[0] = arg1;
- player->unk_B08[1] += arg1 * 0.05f;
+ player->unk_B08 = arg1;
+ player->unk_B0C += arg1 * 0.05f;
player->currentYaw = arg2;
player->actor.home.rot.y = arg2;
player->actor.shape.rot.y = arg2;
@@ -659,7 +659,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED
- PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_GREAT_FAIRY
+ PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_TWO_HANDED
PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK
PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS
PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW
@@ -1316,6 +1316,7 @@ void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, Pla
player->itemAction = itemAction;
}
+// Player_Untarget / Player_StopTargeting?
void func_80123DA4(Player* player) {
player->targetedActor = NULL;
player->stateFlags2 &= ~PLAYER_STATE2_2000;
@@ -1362,12 +1363,12 @@ s32 func_80123F2C(PlayState* play, s32 ammo) {
}
s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 yRange) {
- Player* this = GET_PLAYER(play);
+ Player* player = GET_PLAYER(play);
Vec3f diff;
s32 pad;
- if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) {
- Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff);
+ if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) {
+ Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, pos, &diff);
return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
}
@@ -1445,7 +1446,7 @@ PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) {
s32 Player_IsHoldingTwoHandedWeapon(Player* player) {
// Relies on the itemActions for two-handed weapons being contiguous.
- if ((player->heldItemAction >= PLAYER_IA_SWORD_GREAT_FAIRY) && (player->heldItemAction <= PLAYER_IA_STICK)) {
+ if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_STICK)) {
return true;
}
@@ -1539,10 +1540,8 @@ void Player_UpdateBunnyEars(Player* player) {
sBunnyEarKinematics.angVel.y += -sBunnyEarKinematics.rot.y >> 2;
angle = player->actor.world.rot.y - player->actor.shape.rot.y;
- force.x =
- (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF;
- force.y =
- (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF;
+ force.x = (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF;
+ force.y = (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF;
sBunnyEarKinematics.angVel.x += force.x >> 2;
sBunnyEarKinematics.angVel.y += force.y >> 2;
@@ -1642,9 +1641,9 @@ TexturePtr sPlayerMouthTextures[PLAYER_MOUTH_MAX] = {
};
typedef struct PlayerFaceIndices {
- /* 0x00 */ u8 eyeIndex;
- /* 0x01 */ u8 mouthIndex;
-} PlayerFaceIndices; // size = 0x02
+ /* 0x0 */ u8 eyeIndex;
+ /* 0x1 */ u8 mouthIndex;
+} PlayerFaceIndices; // size = 0x2
PlayerFaceIndices sPlayerFaces[] = {
{ PLAYER_EYES_OPEN, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_0
@@ -1800,7 +1799,7 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim
temp_f20 = sp74 - SQ(sp58);
temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20);
- sp4C = func_80086B30(temp_f20, sp58);
+ sp4C = Math_FAtan2F(temp_f20, sp58);
distance = sqrtf(SQ(diffX) + SQ(yIntersect - sp90.y) + SQ(diffZ));
sp58 = (SQ(distance) + sp70) / (2.0f * distance);
sp54 = distance - sp58;
@@ -1808,8 +1807,8 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim
temp_f20 = sp74 - SQ(sp58);
temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20);
- sp48 = func_80086B30(temp_f20, sp58);
- phi_t1 = (M_PI - (func_80086B30(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI);
+ sp48 = Math_FAtan2F(temp_f20, sp58);
+ phi_t1 = (M_PI - (Math_FAtan2F(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI);
phi_t1 = -skelAnime->jointTable[shinLimbIndex].z + phi_t1;
temp_f8 = (sp48 - sp4C) * (0x8000 / M_PI);
@@ -1854,7 +1853,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis
OPEN_DISPS(play->state.gfxCtx);
- OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7);
+ OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_7);
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54);
@@ -2038,7 +2037,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
pos->x *= player->ageProperties->unk_08;
pos->z *= player->ageProperties->unk_08;
}
- if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) {
+ if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) {
pos->y *= player->ageProperties->unk_08;
}
}
@@ -2552,14 +2551,16 @@ void func_8012669C(PlayState* play, Player* player, Vec3f* arg2, Vec3f* arg3) {
Matrix_MultVec3f(arg2, &sp3C);
Matrix_MultVec3f(arg3, &sp30);
- if (player->meleeWeaponState != 0) {
+ if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) {
if (func_80126440(play, NULL, &player->meleeWeaponInfo[0], &sp3C, &sp30) &&
(player->transformation != PLAYER_FORM_GORON) && (!(player->stateFlags1 & PLAYER_STATE1_400000))) {
EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip,
&player->meleeWeaponInfo[0].base);
}
- if ((player->meleeWeaponState > 0) && ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) ||
- (player->stateFlags2 & PLAYER_STATE2_20000))) {
+
+ if ((player->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) &&
+ ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) ||
+ (player->stateFlags2 & PLAYER_STATE2_20000))) {
Matrix_MultVec3f(&arg2[1], &sp3C);
Matrix_MultVec3f(&arg3[1], &sp30);
func_80126440(play, &player->meleeWeaponQuads[0], &player->meleeWeaponInfo[1], &sp3C, &sp30);
@@ -2714,7 +2715,7 @@ void func_80126BD0(PlayState* play, Player* player, s32 arg2) {
gSPDisplayList(POLY_OPA_DISP++, D_801C0AB4[arg2]);
- if (player->meleeWeaponState != 0) {
+ if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) {
if ((((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)) && (arg2 == 0)) ||
((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) && (arg2 != 0))) {
func_8012669C(play, player, D_801C0A00, D_801C09DC);
@@ -3296,7 +3297,7 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) {
Matrix_Push();
Matrix_Translate(-428.26f, 267.2f, -33.82f, MTXMODE_APPLY);
Matrix_RotateZYX(-0x8000, 0, 0x4000, MTXMODE_APPLY);
- Matrix_Scale(1.0f, player->unk_B08[1], 1.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, player->unk_B0C, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL);
@@ -3413,7 +3414,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
3000.0f, // PLAYER_MELEEWEAPON_SWORD_KOKIRI
3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR
4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED
- 5500.0f, // PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY
+ 5500.0f, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED
-1.0f, // PLAYER_MELEEWEAPON_STICK
2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS
};
@@ -3421,19 +3422,19 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) ||
((player->transformation != PLAYER_FORM_ZORA) &&
((player->itemAction == PLAYER_IA_STICK) ||
- ((player->meleeWeaponState != 0) &&
+ ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
(player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) &&
(player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) {
if (player->itemAction == PLAYER_IA_STICK) {
- D_801C0994->x = player->unk_B08[1] * 5000.0f;
+ D_801C0994->x = player->unk_B0C * 5000.0f;
} else {
D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)];
}
func_80126B8C(play, player);
}
- Matrix_Get(&player->mf_CC4);
- Matrix_MtxFToYXZRot(&player->mf_CC4, &player->leftHandWorld.rot, false);
+ Matrix_Get(&player->leftHandMf);
+ Matrix_MtxFToYXZRot(&player->leftHandMf, &player->leftHandWorld.rot, false);
}
}
} else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) {
@@ -3458,18 +3459,18 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
Matrix_MultZero(&sp20C);
temp_fv0 = Math_Vec3f_DistXYZ(sPlayerCurBodyPartPos, &sp20C);
- player->unk_B08[0] = temp_fv0 - 3.0f;
+ player->unk_B08 = temp_fv0 - 3.0f;
if (temp_fv0 < 3.0f) {
- player->unk_B08[0] = 0.0f;
+ player->unk_B08 = 0.0f;
} else {
- player->unk_B08[0] *= 1.6f;
- if (player->unk_B08[0] > 1.0f) {
- player->unk_B08[0] = 1.0f;
+ player->unk_B08 *= 1.6f;
+ if (player->unk_B08 > 1.0f) {
+ player->unk_B08 = 1.0f;
}
}
- player->unk_B08[1] = -0.5f;
+ player->unk_B0C = -0.5f;
}
- Matrix_Scale(1.0f, player->unk_B08[0], 1.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, player->unk_B08, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -3518,7 +3519,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
Player_DrawHookshotReticle(play, player, 77600.0f);
}
}
- } else if (player->meleeWeaponState != 0) {
+ } else if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) {
if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT) {
func_80126B8C(play, player);
}
@@ -3590,6 +3591,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
for (i = 0; i < ARRAY_COUNT(sp178); i++) {
Matrix_Push();
Matrix_Scale(sp178[i].x, sp178[i].y, sp178[i].z, MTXMODE_APPLY);
+
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -3811,7 +3813,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
&player->meleeWeaponInfo[0].base);
}
} else if (limbIndex == PLAYER_LIMB_RIGHT_SHIN) {
- if (player->meleeWeaponState != 0) {
+ if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) {
if ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) ||
(player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_START) ||
(player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_FINISH)) {
@@ -3819,7 +3821,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
}
}
} else if (limbIndex == PLAYER_LIMB_WAIST) {
- if (player->meleeWeaponState != 0) {
+ if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) {
if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT) {
Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base);
func_8012669C(play, player, D_801C0A90, D_801C0A6C);
diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c
index e0381153a..097d4d946 100644
--- a/src/code/z_prenmi.c
+++ b/src/code/z_prenmi.c
@@ -1,3 +1,4 @@
+#include "global.h"
#include "z_prenmi.h"
void PreNMI_Stop(PreNMIState* this) {
@@ -9,10 +10,9 @@ void PreNMI_Update(PreNMIState* this) {
if (this->timer == 0) {
ViConfig_UpdateVi(1);
PreNMI_Stop(this);
- return;
+ } else {
+ this->timer--;
}
-
- this->timer--;
}
void PreNMI_Draw(PreNMIState* this) {
@@ -22,7 +22,7 @@ void PreNMI_Draw(PreNMIState* this) {
OPEN_DISPS(gfxCtx);
- func_8012C470(gfxCtx);
+ Gfx_SetupDL36_Opa(gfxCtx);
gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1));
gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100);
@@ -48,7 +48,7 @@ void PreNMI_Init(GameState* thisx) {
this->state.main = PreNMI_Main;
this->state.destroy = PreNMI_Destroy;
this->timer = 30;
- this->unkA8 = 10;
+ this->unk_A8 = 10;
Game_SetFramerateDivisor(&this->state, 1);
}
diff --git a/src/code/z_quake.c b/src/code/z_quake.c
index c5115375c..8225c6347 100644
--- a/src/code/z_quake.c
+++ b/src/code/z_quake.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64quake.h"
#include "z64view.h"
diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c
index ab972159c..4b5787129 100644
--- a/src/code/z_rcp.c
+++ b/src/code/z_rcp.c
@@ -1,758 +1,834 @@
#include "global.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-Gfx sSetupDL[438] = {
- /* 0x00 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, 0, 0,
- COMBINED),
- gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x01 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x02 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x03 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x04 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x05 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x06 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2),
- gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x07 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x08 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x09 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0A */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0B */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0C */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0D */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0E */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x0F */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x10 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x11 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x12 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x13 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) |
- GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x14 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x15 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x16 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x17 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x18 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x19 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1A */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1B */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1C */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1D */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1E */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x1F */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x20 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
- G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x21 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED,
- ENVIRONMENT, COMBINED, TEXEL0, COMBINED),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
- G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x22 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x23 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x24 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x25 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x26 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x27 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x28 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, COMBINED, 0,
- 0, 0, COMBINED),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x29 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2A */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2B */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2C */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2D */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2E */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x2F */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x30 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x31 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x32 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x33 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x34 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x35 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT,
- COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x36 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT,
- COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x37 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT,
- COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_CULL_BACK),
- gsSPEndDisplayList(),
-
- /* 0x38 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x39 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
- gsSPLoadGeometryMode(G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3A */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3B */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED,
- ENVIRONMENT, COMBINED, TEXEL0, COMBINED),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3C */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT,
- TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3D */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT,
- TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0),
- gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3E */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x3F */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
- GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) |
- GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x40 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
- gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x41 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
- gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x42 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x43 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x44 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) |
- GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x45 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) |
- GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x46 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
- G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x47 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
-
- /* 0x48 */
- gsDPPipeSync(),
- gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
- gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
- gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
- G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
- G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2),
- gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
- gsSPEndDisplayList(),
+Gfx gSetupDLs[SETUPDL_MAX][6] = {
+ {
+ /* SETUPDL_0 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0,
+ 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_1 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_2 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_3 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_4 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_5 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_6 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_7 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_8 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_9 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_10 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_11 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_12 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_13 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_14 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_15 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_16 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_17 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_18 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_19 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_20 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_21 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_22 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_23 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_24 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_25 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_26 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_27 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_28 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_29 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_30 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_31 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_32 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
+ G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_33 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED,
+ ENVIRONMENT, COMBINED, TEXEL0, COMBINED),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
+ G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_34 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_35 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_36 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_37 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_38 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_39 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_40 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0,
+ COMBINED, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_41 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_42 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_43 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_44 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_45 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_46 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_47 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_48 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_49 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_50 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_51 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_52 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_53 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE,
+ ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_54 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE,
+ ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_55 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE,
+ ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_56 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_57 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_58 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE,
+ 0),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_59 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED,
+ ENVIRONMENT, COMBINED, TEXEL0, COMBINED),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
+ G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_60 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT,
+ TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_61 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT,
+ TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0),
+ gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_62 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_63 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_64 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_65 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_66 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_67 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_68 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_69 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_70 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_71 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* SETUPDL_72 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
};
Gfx sFillSetupDL[] = {
@@ -814,297 +890,470 @@ Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) {
return Gfx_SetFog(gfx, r, g, b, a, n, f);
}
-Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i) {
- gSPDisplayList(gfx++, &sSetupDL[6 * i]);
+Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i) {
+ s32 dListIndex = i * ARRAY_COUNT(gSetupDLs[i]);
+
+ // Equivalent to gSPDisplayList(gfx++, gSetupDLs[i])
+ gSPDisplayList(gfx++, &((Gfx*)gSetupDLs)[dListIndex]);
return gfx;
}
-Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i) {
- return Gfx_CallSetupDLImpl(gfx, i);
+Gfx* Gfx_SetupDL(Gfx* gfx, u32 i) {
+ return Gfx_SetupDLImpl(gfx, i);
}
-void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i) {
- *gfxp = Gfx_CallSetupDL(*gfxp, i);
+void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i) {
+ *gfxp = Gfx_SetupDL(*gfxp, i);
}
-Gfx* func_8012BFC4(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]);
+Gfx* Gfx_SetupDL57(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]);
return gfx;
}
-Gfx* func_8012BFEC(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]);
+Gfx* Gfx_SetupDL57_b(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]);
return gfx;
}
-Gfx* func_8012C014(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x34]);
+Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_52]);
gDPSetColorDither(gfx++, G_CD_DISABLE);
return gfx;
}
-void func_8012C058(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3A]);
+void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_58]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C080(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x39]);
+void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_57]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C0A8(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x32]);
+void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_50]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C0D0(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x33]);
+void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_51]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C0F8(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x34]);
+void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_52]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C120(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x35]);
+void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_53]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C148(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x36]);
+void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_54]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C170(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x37]);
+void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_55]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C198(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x1A]);
+Gfx* Gfx_SetupDL26(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_26]);
return gfx;
}
-void func_8012C1C0(GraphicsContext* gfxCtx) {
- gfxCtx->polyOpa.p = func_8012C198(gfxCtx->polyOpa.p);
+void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ POLY_OPA_DISP = Gfx_SetupDL26(POLY_OPA_DISP);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C1EC(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x17]);
+Gfx* Gfx_SetupDL23(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_23]);
return gfx;
}
-void func_8012C214(GraphicsContext* gfxCtx) {
- gfxCtx->polyOpa.p = func_8012C1EC(gfxCtx->polyOpa.p);
+void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ POLY_OPA_DISP = Gfx_SetupDL23(POLY_OPA_DISP);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C240(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]);
+void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]);
+
+ CLOSE_DISPS(gfxCtx);
}
void func_8012C268(GameState* gameState) {
- func_8012C28C(gameState->gfxCtx);
+ Gfx_SetupDL25_Opa(gameState->gfxCtx);
}
-void func_8012C28C(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x19]);
+void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_25]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C2B4(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x47]);
+Gfx* Gfx_SetupDL71(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_71]);
return gfx;
}
-void func_8012C2DC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]);
+void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C304(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x48]);
+Gfx* Gfx_SetupDL72(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_72]);
return gfx;
}
-void func_8012C32C(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1F]);
+void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_31]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C354(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x20]);
+void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_32]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C37C(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x21]);
+void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_33]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C3A4(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x40]);
+Gfx* Gfx_SetupDL64(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_64]);
return gfx;
}
-Gfx* func_8012C3CC(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x22]);
+Gfx* Gfx_SetupDL34(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_34]);
return gfx;
}
-void func_8012C3F4(GraphicsContext* gfxCtx) {
- gfxCtx->polyOpa.p = func_8012C3CC(gfxCtx->polyOpa.p);
+void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ POLY_OPA_DISP = Gfx_SetupDL34(POLY_OPA_DISP);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C420(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x23]);
+void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_35]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C448(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2C]);
+void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_44]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C470(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x24]);
+void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_36]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C498(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x1C]);
+Gfx* Gfx_SetupDL28(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_28]);
return gfx;
}
-void func_8012C4C0(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1C]);
+void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_28]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C4E8(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2B]);
+void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_43]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C510(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2D]);
+void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_45]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C538(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2E]);
+void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_46]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C560(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x26]);
+void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_38]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C588(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x4]);
+void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_4]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C5B0(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x25]);
+void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_37]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C5D8(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2]);
+void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_2]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C600(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]);
+Gfx* Gfx_SetupDL39(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]);
return gfx;
}
-void func_8012C628(GraphicsContext* gfxCtx) {
- gfxCtx->polyOpa.p = func_8012C600(gfxCtx->polyOpa.p);
+void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ POLY_OPA_DISP = Gfx_SetupDL39(POLY_OPA_DISP);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C654(GraphicsContext* gfxCtx) {
- gfxCtx->overlay.p = func_8012C600(gfxCtx->overlay.p);
+void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ OVERLAY_DISP = Gfx_SetupDL39(OVERLAY_DISP);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C680(Gfx** gfxp) {
+void Gfx_SetupDL39_Ptr(Gfx** gfxp) {
Gfx* gfx = *gfxp;
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]);
+
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]);
*gfxp = gfx;
}
-void func_8012C6AC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x28]);
+void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_40]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C6D4(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x29]);
+void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_41]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C6FC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2F]);
+void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_47]);
+
+ CLOSE_DISPS(gfxCtx);
}
-Gfx* func_8012C724(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x42]);
+Gfx* Gfx_SetupDL66(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_66]);
return gfx;
}
-Gfx* func_8012C74C(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x43]);
+Gfx* Gfx_SetupDL67(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_67]);
return gfx;
}
-Gfx* func_8012C774(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x44]);
+Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_68]);
gDPSetColorDither(gfx++, G_CD_DISABLE);
return gfx;
}
-Gfx* func_8012C7B8(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x45]);
+Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_69]);
gDPSetColorDither(gfx++, G_CD_DISABLE);
return gfx;
}
-Gfx* func_8012C7FC(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x41]);
+Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_65]);
gDPSetColorDither(gfx++, G_CD_DISABLE);
return gfx;
}
-Gfx* func_8012C840(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x46]);
+Gfx* Gfx_SetupDL70(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_70]);
return gfx;
}
-Gfx* func_8012C868(Gfx* gfx) {
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x14]);
+Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx) {
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_20]);
gDPSetColorDither(gfx++, G_CD_DISABLE);
return gfx;
}
-void func_8012C8AC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2A]);
+void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_42]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C8D4(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2A]);
+void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_42]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C8FC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x30]);
+void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_48]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C924(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x31]);
+void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_49]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C94C(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x1B]);
+void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_27]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C974(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3C]);
- gDPSetColorDither(gfxCtx->polyXlu.p++, G_CD_DISABLE);
+void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_60]);
+ gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C9BC(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3D]);
+void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_61]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012C9E4(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x38]);
+void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_56]);
+
+ CLOSE_DISPS(gfxCtx);
}
-void func_8012CA0C(Gfx** gfxp) {
+void Gfx_SetupDL56_Ptr(Gfx** gfxp) {
Gfx* gfx = *gfxp;
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x38]);
+
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_56]);
*gfxp = gfx;
}
-void func_8012CA38(GraphicsContext* gfxCtx) {
- gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3B]);
+void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_59]);
+
+ CLOSE_DISPS(gfxCtx);
}
Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height) {
@@ -1210,7 +1459,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments);
gSPDisplayList(&masterGfx[1], sFillSetupDL);
- gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000);
+ gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
if (zbuffer != NULL) {
gDPSetDepthImage(&masterGfx[3], zbuffer);
} else {
@@ -1222,7 +1471,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
masterGfx = gGfxMasterDL->setScissor;
- gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, D_801FBBCC, D_801FBBCE);
+ gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, gCfbWidth, gCfbHeight);
gSPEndDisplayList(&masterGfx[1]);
// Clear Z-Buffer
@@ -1232,13 +1481,13 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
if (zbuffer == NULL) {
gSPEndDisplayList(&masterGfx[0]);
} else {
- gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, zbuffer);
+ gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, zbuffer);
gDPPipeSync(&masterGfx[1]);
gDPSetCycleType(&masterGfx[2], G_CYC_FILL);
gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0));
gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect);
- gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000);
+ gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
gSPEndDisplayList(&masterGfx[7]);
}
@@ -1246,7 +1495,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
masterGfx = gGfxMasterDL->clearFrameBuffer;
- gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000);
+ gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
gDPSetCycleType(&masterGfx[1], G_CYC_FILL);
gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1));
@@ -1256,7 +1505,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
masterGfx = gGfxMasterDL->clearFillRect;
- gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC - 1, D_801FBBCE - 1);
+ gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth - 1, gCfbHeight - 1);
gDPPipeSync(&masterGfx[1]);
gSPEndDisplayList(&masterGfx[2]);
@@ -1264,7 +1513,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
masterGfx = gGfxMasterDL->fillRect;
- gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC, D_801FBBCE);
+ gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth, gCfbHeight);
gDPPipeSync(&masterGfx[1]);
gSPEndDisplayList(&masterGfx[2]);
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 34aca7461..14d7d9404 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -25,7 +25,7 @@ void Room_DrawNormal(PlayState* play, Room* room, u32 flags) {
if (flags & ROOM_DRAW_XLU) {
func_800BCC68(&sZeroVec, play);
gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
@@ -53,10 +53,10 @@ typedef enum {
} RoomCullableDebugMode;
typedef struct RoomShapeCullableEntryLinked {
- /* 0x00 */ RoomShapeCullableEntry* entry;
- /* 0x04 */ f32 boundsNearZ;
- /* 0x08 */ struct RoomShapeCullableEntryLinked* prev;
- /* 0x0C */ struct RoomShapeCullableEntryLinked* next;
+ /* 0x0 */ RoomShapeCullableEntry* entry;
+ /* 0x4 */ f32 boundsNearZ;
+ /* 0x8 */ struct RoomShapeCullableEntryLinked* prev;
+ /* 0xC */ struct RoomShapeCullableEntryLinked* next;
} RoomShapeCullableEntryLinked; // size = 0x10
#define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 128
@@ -95,11 +95,11 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) {
if (play->roomCtx.unk74 != NULL) {
gSPSegment(POLY_XLU_DISP++, 0x06, play->roomCtx.unk74);
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
- if ((room->enablePosLights != 0) || (MREG(93) != 0)) {
+ if (room->enablePosLights || (MREG(93) != 0)) {
gSPSetGeometryMode(POLY_OPA_DISP++, G_LIGHTING_POSITIONAL);
gSPSetGeometryMode(POLY_XLU_DISP++, G_LIGHTING_POSITIONAL);
}
@@ -317,7 +317,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) {
gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
if (drawOpa) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, entry->opa);
}
@@ -347,7 +347,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) {
if (drawXlu) {
gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_XLU_DISP++, entry->xlu);
}
@@ -416,7 +416,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) {
gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
if (drawOpa) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, dListsEntry->opa);
}
@@ -445,7 +445,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) {
if (drawXlu) {
gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_XLU_DISP++, dListsEntry->xlu);
}
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index e7edaecd1..46579ae4c 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -89,7 +89,7 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) {
s32 i;
for (i = 0; i < objectCtx->num; i++) {
- if ((objectCtx->status[i].id < 0 ? -objectCtx->status[i].id : objectCtx->status[i].id) == objectId) {
+ if (ABS_ALT(objectCtx->status[i].id) == objectId) {
return i;
}
}
@@ -365,8 +365,8 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) {
// SceneTableEntry Header Command 0x11: Skybox Settings
void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) {
play->skyboxId = cmd->skyboxSettings.skyboxId & 3;
- play->envCtx.unk_17 = play->envCtx.unk_18 = cmd->skyboxSettings.unk5;
- play->envCtx.unk_1E = cmd->skyboxSettings.unk6;
+ play->envCtx.skyboxConfig = play->envCtx.changeSkyboxNextConfig = cmd->skyboxSettings.skyboxConfig;
+ play->envCtx.lightMode = cmd->skyboxSettings.envLightMode;
Scene_LoadAreaTextures(play, cmd->skyboxSettings.data1);
}
@@ -526,7 +526,7 @@ void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x1A: Material Animations
void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd) {
- play->sceneMaterialAnims = (AnimatedMaterial*)Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
+ play->sceneMaterialAnims = Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
}
/**
@@ -536,38 +536,38 @@ void Scene_SetExitFade(PlayState* play) {
play->transitionType = Entrance_GetTransitionFlags(play->nextEntrance) & 0x7F;
}
-void (*sSceneCmdHandlers[])(PlayState*, SceneCmd*) = {
- Scene_CommandSpawnList,
- Scene_CommandActorList,
- Scene_CommandActorCutsceneCamList,
- Scene_CommandCollisionHeader,
- Scene_CommandRoomList,
- Scene_CommandWindSettings,
- Scene_CommandEntranceList,
- Scene_CommandSpecialFiles,
- Scene_CommandRoomBehavior,
- Scene_Command09,
- Scene_CommandMesh,
- Scene_CommandObjectList,
- Scene_CommandLightList,
- Scene_CommandPathList,
- Scene_CommandTransiActorList,
- Scene_CommandEnvLightSettings,
- Scene_CommandTimeSettings,
- Scene_CommandSkyboxSettings,
- Scene_CommandSkyboxDisables,
- Scene_CommandExitList,
- NULL,
- Scene_CommandSoundSettings,
- Scene_CommandEchoSetting,
- Scene_CommandCutsceneScriptList,
- Scene_CommandAltHeaderList,
- Scene_CommandSetRegionVisitedFlag,
- Scene_CommandAnimatedMaterials,
- Scene_CommandCutsceneList,
- Scene_CommandMiniMap,
- Scene_Command1D,
- Scene_CommandMiniMapCompassInfo,
+void (*sSceneCmdHandlers[SCENE_CMD_MAX])(PlayState*, SceneCmd*) = {
+ Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST
+ Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST
+ Scene_CommandActorCutsceneCamList, // SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST
+ Scene_CommandCollisionHeader, // SCENE_CMD_ID_COL_HEADER
+ Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST
+ Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS
+ Scene_CommandEntranceList, // SCENE_CMD_ID_ENTRANCE_LIST
+ Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES
+ Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR
+ Scene_Command09, // SCENE_CMD_ID_UNK_09
+ Scene_CommandMesh, // SCENE_CMD_ID_ROOM_SHAPE
+ Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST
+ Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST
+ Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST
+ Scene_CommandTransiActorList, // SCENE_CMD_ID_TRANSI_ACTOR_LIST
+ Scene_CommandEnvLightSettings, // SCENE_CMD_ID_ENV_LIGHT_SETTINGS
+ Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS
+ Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS
+ Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES
+ Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST
+ NULL, // SCENE_CMD_ID_END
+ Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS
+ Scene_CommandEchoSetting, // SCENE_CMD_ID_ECHO_SETTINGS
+ Scene_CommandCutsceneScriptList, // SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST
+ Scene_CommandAltHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST
+ Scene_CommandSetRegionVisitedFlag, // SCENE_CMD_ID_SET_REGION_VISITED
+ Scene_CommandAnimatedMaterials, // SCENE_CMD_ID_ANIMATED_MATERIAL_LIST
+ Scene_CommandCutsceneList, // SCENE_CMD_ID_ACTOR_CUTSCENE_LIST
+ Scene_CommandMiniMap, // SCENE_CMD_ID_MINIMAP_INFO
+ Scene_Command1D, // SCENE_CMD_ID_UNUSED_1D
+ Scene_CommandMiniMapCompassInfo, // SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO
};
/**
diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c
index 6ec3f2b80..b4597a5c2 100644
--- a/src/code/z_scene_proc.c
+++ b/src/code/z_scene_proc.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
s32 sMatAnimStep;
@@ -401,7 +400,7 @@ void AnimatedMat_DrawMain(PlayState* play, AnimatedMaterial* matAnim, f32 alphaR
if ((matAnim != NULL) && (matAnim->segment != 0)) {
do {
segment = matAnim->segment;
- segmentAbs = ((segment < 0) ? -segment : segment) + 7;
+ segmentAbs = ABS_ALT(segment) + 7;
matAnimDrawHandlers[matAnim->type](play, segmentAbs, Lib_SegmentedToVirtual(matAnim->params));
matAnim++;
} while (segment >= 0);
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index f80ad551d..e31e4b185 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -1,127 +1,27 @@
#include "global.h"
-#define SCENE_ENTRY(name, textId, config) \
- { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0, 0 }
+#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \
+ DECLARE_ROM_SEGMENT(name)
-#define SCENE_ENTRY_NONE() \
- { { 0, 0 }, 0, 0, 0, 0, 0 }
+#define DEFINE_SCENE_UNSET(_enumValue)
-SceneTableEntry gSceneTable[] = {
- /* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x01 */ SCENE_ENTRY_NONE(),
- /* 0x02 */ SCENE_ENTRY_NONE(),
- /* 0x03 */ SCENE_ENTRY_NONE(),
- /* 0x04 */ SCENE_ENTRY_NONE(),
- /* 0x05 */ SCENE_ENTRY_NONE(),
- /* 0x06 */ SCENE_ENTRY_NONE(),
- /* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
- /* 0x09 */ SCENE_ENTRY_NONE(),
- /* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x0E */ SCENE_ENTRY_NONE(),
- /* 0x0F */ SCENE_ENTRY_NONE(),
- /* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
- /* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
- /* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
- /* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
- /* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
- /* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
- /* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x31 */ SCENE_ENTRY_NONE(),
- /* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
- /* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
- /* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
- /* 0x3A */ SCENE_ENTRY_NONE(),
- /* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
- /* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
- /* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
- /* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
- /* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
- /* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
- /* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
- /* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
- /* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
- /* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
- /* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- /* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
- /* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
- /* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
- /* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
- /* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
- /* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
- /* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
+#include "tables/scene_table.h"
+
+#undef DEFINE_SCENE
+#undef DEFINE_SCENE_UNSET
+
+#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \
+ { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, drawConfig, 0, 0 },
+
+#define DEFINE_SCENE_UNSET(_enumValue) { 0 },
+
+SceneTableEntry gSceneTable[SCENE_MAX] = {
+#include "tables/scene_table.h"
};
+#undef DEFINE_SCENE
+#undef DEFINE_SCENE_UNSET
+
static EntranceTableEntry sMayorsResidenceEntrance0[] = {
{ SCENE_SONCHONOIE, 0, 0x4102 },
};
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index 085cb4de2..79af1b73f 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#define ANIM_INTERP 1
@@ -1944,7 +1943,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) {
skelAnime->jointTable->x = skelAnime->baseTransl.x;
skelAnime->prevTransl.z = skelAnime->jointTable->z;
skelAnime->jointTable->z = skelAnime->baseTransl.z;
- if (skelAnime->moveFlags & ANIM_FLAG_UPDATEY) {
+ if (skelAnime->moveFlags & ANIM_FLAG_UPDATE_Y) {
if (skelAnime->moveFlags & ANIM_FLAG_NOMOVE) {
diff->y = 0.0f;
} else {
diff --git a/src/code/z_skin.c b/src/code/z_skin.c
index 9bfd8d566..0d3e0bf85 100644
--- a/src/code/z_skin.c
+++ b/src/code/z_skin.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64skin.h"
diff --git a/src/code/z_snap.c b/src/code/z_snap.c
index 9361cc1e0..3524fe3ab 100644
--- a/src/code/z_snap.c
+++ b/src/code/z_snap.c
@@ -42,9 +42,6 @@ s32 Snap_RecordPictographedActors(PlayState* play) {
break;
}
- //! FAKE:
- if (1) {}
-
// Actors which may be pictographed anywhere
switch (actor->id) {
case ACTOR_EN_KAKASI:
@@ -71,15 +68,20 @@ s32 Snap_RecordPictographedActors(PlayState* play) {
case ACTOR_EN_GE2:
seen |= PICTO_SEEN_ANYWHERE;
break;
+
+ default:
+ break;
+ }
+
+ if (!seen) {
+ continue;
}
// If actor is recordable, run its validity function and record if valid
- if (seen) {
- pictoActor = (PictoActor*)actor;
- if (pictoActor->validationFunc != NULL) {
- if ((pictoActor->validationFunc)(play, actor) == 0) {
- validCount++;
- }
+ pictoActor = (PictoActor*)actor;
+ if (pictoActor->validationFunc != NULL) {
+ if (pictoActor->validationFunc(play, actor) == 0) {
+ validCount++;
}
}
}
diff --git a/src/code/z_sound_source.c b/src/code/z_sound_source.c
index 15ebd018a..4962f7072 100644
--- a/src/code/z_sound_source.c
+++ b/src/code/z_sound_source.c
@@ -1,11 +1,12 @@
#include "global.h"
+#include "z64sound_source.h"
void SoundSource_InitAll(PlayState* play) {
SoundSource* sources = &play->soundSources[0];
s32 i;
// clang-format off
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) { sources[i].countdown = 0; }
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) { sources[i].countdown = 0; }
// clang-format on
}
@@ -13,7 +14,7 @@ void SoundSource_UpdateAll(PlayState* play) {
SoundSource* source = &play->soundSources[0];
s32 i;
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) {
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) {
if (source->countdown != 0) {
if (DECR(source->countdown) == 0) {
AudioSfx_StopByPos(&source->projectedPos);
@@ -37,7 +38,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId,
s32 i;
source = &play->soundSources[0];
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) {
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) {
if (source->countdown == 0) {
break;
}
@@ -52,7 +53,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId,
}
// If no sound source is available, replace the sound source with the smallest remaining countdown
- if (i >= ARRAY_COUNT(play->soundSources)) {
+ if (i >= SOUND_SOURCE_COUNT) {
source = backupSource;
AudioSfx_StopByPos(&source->projectedPos);
}
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index c10c1943e..f03d38e45 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -1,8 +1,9 @@
#include "prevent_bss_reordering.h"
#include "global.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "z64horse.h"
+#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
-void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages);
+void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages);
void func_80147314(SramContext* sramCtx, s32 fileNum);
void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2);
@@ -10,173 +11,122 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2);
((newf)[0] != 'Z' || (newf)[1] != 'E' || (newf)[2] != 'L' || (newf)[3] != 'D' || (newf)[4] != 'A' || \
(newf)[5] != '3')
-// default scene flags (?)
-// indices of subarray:
-// - 0: switch0
-// - 1: switch1
-// - 2: chest
-// - 3: collectible
-u32 D_801C5FC0[SCENE_MAX][4] = {
- { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI2
- { 0, 0, 0, 0 }, // SCENE_UNSET_1
- { 0, 0, 0, 0 }, // SCENE_UNSET_2
- { 0, 0, 0, 0 }, // SCENE_UNSET_3
- { 0, 0, 0, 0 }, // SCENE_UNSET_4
- { 0, 0, 0, 0 }, // SCENE_UNSET_5
- { 0, 0, 0, 0 }, // SCENE_UNSET_6
- { 0, 0, 0, 0xC04 }, // SCENE_KAKUSIANA
- { 0, 0, 0, 0 }, // SCENE_SPOT00
- { 0, 0, 0, 0 }, // SCENE_UNSET_9
- { 0, 0, 0, 0 }, // SCENE_WITCH_SHOP
- { 0, 0, 0, 0x80000000 }, // SCENE_LAST_BS
- { 0, 0, 0, 0x80000000 }, // SCENE_HAKASHITA
- { 0, 0, 0, 0 }, // SCENE_AYASHIISHOP
- { 0, 0, 0, 0 }, // SCENE_UNSET_E
- { 0, 0, 0, 0 }, // SCENE_UNSET_F
- { 0, 0, 0, 0 }, // SCENE_OMOYA
- { 0, 0, 0, 0 }, // SCENE_BOWLING
- { 0, 0, 0, 0 }, // SCENE_SONCHONOIE
- { 0x100000, 0, 0, 0x40000002 }, // SCENE_IKANA
- { 0, 0, 0, 0 }, // SCENE_KAIZOKU
- { 0, 0, 0, 0 }, // SCENE_MILK_BAR
- { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_N
- { 2, 0, 0, 0 }, // SCENE_TAKARAYA
- { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_R
- { 0, 0, 0, 0 }, // SCENE_OKUJOU
- { 0xF, 0, 0, 0 }, // SCENE_OPENINGDAN
- { 0x70B000, 0, 0, 0 }, // SCENE_MITURIN
- { 0, 0, 0, 0 }, // SCENE_13HUBUKINOMITI
- { 0, 0x80000000, 0, 0x400 }, // SCENE_CASTLE
- { 0, 0, 0, 0 }, // SCENE_DEKUTES
- { 0, 0, 0, 0x80000000 }, // SCENE_MITURIN_BS
- { 0, 0, 0, 0 }, // SCENE_SYATEKI_MIZU
- { 0x1A00020, 0, 0, 0 }, // SCENE_HAKUGIN
- { 0x400, 0, 0, 0 }, // SCENE_ROMANYMAE
- { 0, 0, 0, 0x1000 }, // SCENE_PIRATE
- { 0, 0, 0, 0 }, // SCENE_SYATEKI_MORI
- { 0, 0, 0, 2 }, // SCENE_SINKAI
- { 0x400, 0, 0, 0 }, // SCENE_YOUSEI_IZUMI
- { 0, 0, 0, 0 }, // SCENE_KINSTA1
- { 0, 0, 0, 0x80000000 }, // SCENE_KINDAN2
- { 0, 0, 0, 0 }, // SCENE_TENMON_DAI
- { 0, 0, 0, 2 }, // SCENE_LAST_DEKU
- { 0, 0, 0, 0x40000000 }, // SCENE_22DEKUCITY
- { 0, 0, 0, 0 }, // SCENE_KAJIYA
- { 0x10, 0, 0, 0 }, // SCENE_00KEIKOKU
- { 3, 0, 0, 0 }, // SCENE_POSTHOUSE
- { 0, 0, 0, 0 }, // SCENE_LABO
- { 0, 0, 0, 0x80000000 }, // SCENE_DANPEI2TEST
- { 0, 0, 0, 0 }, // SCENE_UNSET_31
- { 0, 0, 0, 0 }, // SCENE_16GORON_HOUSE
- { 0, 0, 0, 0 }, // SCENE_33ZORACITY
- { 0, 0, 0, 0 }, // SCENE_8ITEMSHOP
- { 0, 0, 0, 0 }, // SCENE_F01
- { 0, 0, 0, 0x80000000 }, // SCENE_INISIE_BS
- { 0x100400, 0, 0, 0x22 }, // SCENE_30GYOSON
- { 0x400, 0, 0, 0x80 }, // SCENE_31MISAKI
- { 0, 0, 0, 0 }, // SCENE_TAKARAKUJI
- { 0, 0, 0, 0 }, // SCENE_UNSET_3A
- { 0x400, 0, 0, 0 }, // SCENE_TORIDE
- { 0, 0, 0, 0 }, // SCENE_FISHERMAN
- { 0, 0, 0, 0 }, // SCENE_GORONSHOP
- { 0, 0, 0, 0 }, // SCENE_DEKU_KING
- { 0, 0, 0, 2 }, // SCENE_LAST_GORON
- { 0, 0, 0, 0x80000002 }, // SCENE_24KEMONOMITI
- { 0, 0, 0, 0 }, // SCENE_F01_B
- { 0, 0, 0, 0 }, // SCENE_F01C
- { 0, 0, 0, 0 }, // SCENE_BOTI
- { 0, 0, 0, 0x80000000 }, // SCENE_HAKUGIN_BS
- { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI
- { 0x102, 0, 0, 0x400 }, // SCENE_21MITURINMAE
- { 0, 0, 0, 2 }, // SCENE_LAST_ZORA
- { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO2
- { 0x70, 0, 0, 0 }, // SCENE_SEA
- { 0, 0, 0, 0 }, // SCENE_35TAKI
- { 0, 0, 0, 0 }, // SCENE_REDEAD
- { 0, 0, 0, 0x40000000 }, // SCENE_BANDROOM
- { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO
- { 0, 0, 0, 0 }, // SCENE_GORON_HAKA
- { 0, 0, 0, 0 }, // SCENE_SECOM
- { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA
- { 0, 0, 0, 0 }, // SCENE_TOUGITES
- { 0, 0, 0, 0 }, // SCENE_DANPEI
- { 0, 0, 0, 0 }, // SCENE_IKANAMAE
- { 0, 0, 0, 0 }, // SCENE_DOUJOU
- { 0, 0, 0, 0 }, // SCENE_MUSICHOUSE
- { 0, 0, 0, 0 }, // SCENE_IKNINSIDE
- { 0, 0, 0, 0 }, // SCENE_MAP_SHOP
- { 0x400, 0, 0, 0 }, // SCENE_F40
- { 0x400, 0, 0, 0 }, // SCENE_F41
- { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA2
- { 0, 0, 0, 0x100 }, // SCENE_14YUKIDAMANOMITI
- { 0x400, 0, 0, 0 }, // SCENE_12HAKUGINMAE
- { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN
- { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN2
- { 0, 0, 0, 0x80000000 }, // SCENE_SEA_BS
- { 0, 0, 0, 0x400 }, // SCENE_RANDOM
- { 0, 0, 0, 0 }, // SCENE_YADOYA
- { 0, 0, 0, 0 }, // SCENE_KONPEKI_ENT
- { 1, 0, 0, 0 }, // SCENE_INSIDETOWER
- { 0, 0, 0, 0 }, // SCENE_26SARUNOMORI
- { 0, 0, 0, 0 }, // SCENE_LOST_WOODS
- { 0, 0, 0, 2 }, // SCENE_LAST_LINK
- { 0, 0, 0, 0 }, // SCENE_SOUGEN
- { 0, 0, 0, 0 }, // SCENE_BOMYA
- { 0, 0, 0, 0 }, // SCENE_KYOJINNOMA
- { 0, 0, 0, 0 }, // SCENE_KOEPONARACE
- { 0, 0, 0, 0 }, // SCENE_GORONRACE
- { 1, 0, 0, 0 }, // SCENE_TOWN
- { 0, 0, 0, 0 }, // SCENE_ICHIBA
- { 0, 0, 0, 0x400 }, // SCENE_BACKTOWN
- { 0x100000, 0, 0, 0x400 }, // SCENE_CLOCKTOWER
- { 0, 0, 1, 0 }, // SCENE_ALLEY
+typedef struct PersistentCycleSceneFlags {
+ /* 0x0 */ u32 switch0;
+ /* 0x4 */ u32 switch1;
+ /* 0x8 */ u32 chest;
+ /* 0xC */ u32 collectible;
+} PersistentCycleSceneFlags; // size = 0x10
+
+#define PERSISTENT_CYCLE_FLAGS_SET(switch0, switch1, chest, collectible) { switch0, switch1, chest, collectible },
+#define PERSISTENT_CYCLE_FLAGS_NONE PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 0)
+
+#define DEFINE_SCENE(_name, _enumValue, _textId, _drawConfig, _restrictionFlags, persistentCycleFlags) \
+ persistentCycleFlags
+#define DEFINE_SCENE_UNSET(_enumValue) PERSISTENT_CYCLE_FLAGS_NONE
+
+/**
+ * Array of bitwise flags which won't be turned off on a cycle reset (will persist between cycles)
+ */
+PersistentCycleSceneFlags sPersistentCycleSceneFlags[SCENE_MAX] = {
+#include "tables/scene_table.h"
};
-// TODO: figure out a way to use the WEEKEVENTREG defines here
+#undef DEFINE_SCENE
+#undef DEFINE_SCENE_UNSET
+
+// Each flag has 2 bits to store persistence over the three-day reset cycle
+// Only 1 of these bits need to be set to persist (Values 1, 2, 3).
+// Therefore, the final game does not distinguish between these two macros in use
+#define PERSISTENT_WEEKEVENTREG(flag) (3 << (2 * BIT_FLAG_TO_SHIFT(flag)))
+#define PERSISTENT_WEEKEVENTREG_ALT(flag) (2 << (2 * BIT_FLAG_TO_SHIFT(flag)))
+
// weekEventReg flags which will be not be cleared on a cycle reset
-u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
- /* 0 */ 0xFFFC,
- /* 1 */ 0xFFFF,
- /* 2 */ 0xFFFF,
- /* 3 */ 0xFFFF,
+//! @note The index of the flag in this array must be the same to its index in the WeekeventReg array
+//! Only the mask is read from the `PERSISTENT_` macros.
+u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
+ /* 0 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_TERMINA_FIELD) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ROMANI_RANCH) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORMAN_TRACK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORON_SHRINE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD),
+ /* 1 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_DEKU_PALACE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GREAT_BAY_COAST) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CANYON),
+ /* 2 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CASTLE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE),
+ /* 3 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_THE_MOON) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_03_80),
/* 4 */ 0,
/* 5 */ 0,
/* 6 */ 0,
- /* 7 */ 0xC000,
- /* 8 */ 0xC00,
+ /* 7 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON),
+ /* 8 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE),
/* 9 */ 0,
- /* 10 */ 0xC0,
+ /* 10 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_10_08),
/* 11 */ 0,
- /* 12 */ 0x300,
- /* 13 */ 0x3000,
- /* 14 */ 0xC000,
- /* 15 */ 0xC00,
+ /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10),
+ /* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE),
+ /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_14_80),
+ /* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20),
/* 16 */ 0,
/* 17 */ 0,
/* 18 */ 0,
/* 19 */ 0,
/* 20 */ 0,
/* 21 */ 0,
- /* 22 */ 0xC00C,
- /* 23 */ 0xC00C,
- /* 24 */ 0xC008,
- /* 25 */ 3,
- /* 26 */ 0x3000,
+ /* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80),
+ /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80),
+ /* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80),
+ /* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01),
+ /* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40),
/* 27 */ 0,
/* 28 */ 0,
/* 29 */ 0,
- /* 30 */ 0xFF00,
- /* 31 */ 0xC3F,
- /* 32 */ 0x3F,
+ /* 30 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_20) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_80),
+ /* 31 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20),
+ /* 32 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04),
/* 33 */ 0,
/* 34 */ 0,
- /* 35 */ 0xCFFF,
+ /* 35 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_02) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_08) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_20) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_80),
/* 36 */ 0,
/* 37 */ 0,
- /* 38 */ 0xC00,
- /* 39 */ 0xC00,
+ /* 38 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_38_20),
+ /* 39 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_39_20),
/* 40 */ 0,
- /* 41 */ 0xC0,
+ /* 41 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_41_08),
/* 42 */ 0,
/* 43 */ 0,
/* 44 */ 0,
@@ -185,50 +135,111 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
/* 47 */ 0,
/* 48 */ 0,
/* 49 */ 0,
- /* 50 */ 0x3C,
- /* 51 */ 0x20,
+ /* 50 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_04),
+ /* 51 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_51_04),
/* 52 */ 0,
- /* 53 */ 0x300C,
- /* 54 */ 0x3000,
+ /* 53 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_40),
+ /* 54 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_54_40),
/* 55 */ 0,
- /* 56 */ 0xC,
- /* 57 */ 0xC0,
+ /* 56 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_56_02),
+ /* 57 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_57_08),
/* 58 */ 0,
- /* 59 */ 0xFF0,
- /* 60 */ 0x300,
+ /* 59 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20),
+ /* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10),
/* 61 */ 0,
/* 62 */ 0,
- /* 63 */ 0xC00,
+ /* 63 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_63_20),
/* 64 */ 0,
/* 65 */ 0,
- /* 66 */ 0xFFFF,
- /* 67 */ 0xFFFF,
- /* 68 */ 0xFFFF,
- /* 69 */ 0xFFFF,
- /* 70 */ 0xFFFF,
- /* 71 */ 0xFFFF,
- /* 72 */ 0xFFFF,
- /* 73 */ 0xC0,
+ /* 66 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA),
+ /* 67 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG),
+ /* 68 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI),
+ /* 69 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA),
+ /* 70 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP),
+ /* 71 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK),
+ /* 72 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_72_80),
+ /* 73 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_73_08),
/* 74 */ 0,
- /* 75 */ 0xC000,
+ /* 75 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_75_80),
/* 76 */ 0,
- /* 77 */ 3,
+ /* 77 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_77_01),
/* 78 */ 0,
- /* 79 */ 0xC000,
+ /* 79 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_79_80),
/* 80 */ 0,
- /* 81 */ 0xC0,
- /* 82 */ 0x300,
+ /* 81 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_81_08),
+ /* 82 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_82_10),
/* 83 */ 0,
/* 84 */ 0,
/* 85 */ 0,
- /* 86 */ 0xC000,
- /* 87 */ 0xFFF0,
+ /* 86 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_86_80),
+ /* 87 */
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_08) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_20) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_80),
/* 88 */ 0,
/* 89 */ 0,
- /* 90 */ 0x300,
+ /* 90 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_90_10),
/* 91 */ 0,
- /* 92 */ 0xC000,
- /* 93 */ 0xF0,
+ /* 92 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_92_80),
+ /* 93 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_08),
/* 94 */ 0,
/* 95 */ 0,
/* 96 */ 0,
@@ -237,9 +248,21 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
/* 99 */ 0,
};
+// Unused remnant values from OoT. Not the correct sizes in MM.
+#define OOT_SAVECONTEXT_SIZE 0x1428
+#define OOT_SLOT_SIZE (OOT_SAVECONTEXT_SIZE + 0x28)
+#define OOT_SRAM_HEADER_SIZE 0x10
+#define OOT_SLOT_OFFSET(index) (OOT_SRAM_HEADER_SIZE + 0x10 + (index * OOT_SLOT_SIZE))
+
// used in other files
-s32 D_801C6798[] = {
- 0x00000020, 0x00001470, 0x000028C0, 0x00003D10, 0x00005160, 0x000065B0,
+u32 gSramSlotOffsets[] = {
+ OOT_SLOT_OFFSET(0),
+ OOT_SLOT_OFFSET(1),
+ OOT_SLOT_OFFSET(2),
+ // the latter three saves are backup saves for the former saves (in OoT)
+ OOT_SLOT_OFFSET(3),
+ OOT_SLOT_OFFSET(4),
+ OOT_SLOT_OFFSET(5),
};
u8 gAmmoItems[] = {
@@ -269,28 +292,92 @@ u8 gAmmoItems[] = {
ITEM_NONE, // SLOT_BOTTLE_6
};
-s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380 };
-
-s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 1, 1 };
-
-s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1, 1 };
-
-s32 D_801C6840[] = { 0x100, 0x180, 0x200, 0x280 };
-
-s32 D_801C6850[] = { 0x80, 0x80, 0x80, 0x80, 0x300, 0x380, 1, 1 };
-
-s32 D_801C6870[] = {
- sizeof(Save),
- sizeof(Save),
- sizeof(Save),
- sizeof(Save),
- offsetof(SaveContext, fileNum),
- offsetof(SaveContext, fileNum),
- offsetof(SaveContext, fileNum),
- offsetof(SaveContext, fileNum),
+// Stores flash start page number
+s32 gFlashSaveStartPages[] = {
+ 0, // File 1 New Cycle Save
+ 0x40, // File 1 New Cycle Save Backup
+ 0x80, // File 2 New Cycle Save
+ 0xC0, // File 2 New Cycle Save Backup
+ 0x100, // File 1 Owl Save
+ 0x180, // File 1 Owl Save Backup
+ 0x200, // File 2 Owl Save
+ 0x280, // File 2 Owl Save Backup
+ 0x300, // Sram Header (SaveOptions)
+ 0x380, // Sram Header Backup (SaveOptions)
};
-u8 D_801C6890[8] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 };
+// Flash rom number of pages
+s32 gFlashSaveNumPages[] = {
+ 0x40, // File 1 New Cycle Save
+ 0x40, // File 1 New Cycle Save Backup
+ 0x40, // File 2 New Cycle Save
+ 0x40, // File 2 New Cycle Save Backup
+ 0x80, // File 1 Owl Save
+ 0x80, // File 1 Owl Save Backup
+ 0x80, // File 2 Owl Save
+ 0x80, // File 2 Owl Save Backup
+ 1, // Sram Header (SaveOptions)
+ 1, // Sram Header Backup (SaveOptions)
+};
+
+// Flash rom number of pages on very first time Player enters South Clock Town from the Clock Tower
+s32 gFlashSpecialSaveNumPages[] = {
+ 0x80, // File 1 New Cycle Save
+ 0x80, // File 1 New Cycle Save Backup
+ 0x80, // File 2 New Cycle Save
+ 0x80, // File 2 New Cycle Save Backup
+ 0x80, // File 1 Owl Save
+ 0x80, // File 1 Owl Save Backup
+ 0x80, // File 2 Owl Save
+ 0x80, // File 2 Owl Save Backup
+ 1, // Sram Header (SaveOptions)
+ 1, // Sram Header Backup (SaveOptions)
+};
+
+// Owl Save flash rom start page number
+s32 gFlashOwlSaveStartPages[] = {
+ 0x100, // File 1 Owl Save
+ 0x180, // File 1 Owl Save Backup
+ 0x200, // File 2 Owl Save
+ 0x280, // File 2 Owl Save Backup
+};
+
+// Owl Save flash rom number of pages
+s32 gFlashOwlSaveNumPages[] = {
+ 0x80, // File 1 Owl Save
+ 0x80, // File 1 Owl Save Backup
+ 0x80, // File 2 Owl Save
+ 0x80, // File 2 Owl Save Backup
+};
+
+// Save Options Sram Header flash rom start page number
+s32 gFlashOptionsSaveStartPages[] = {
+ 0x300, // Sram Header (SaveOptions)
+ 0x380, // Sram Header Backup (SaveOptions)
+};
+
+// Save Options Sram Header flash rom number of pages
+s32 gFlashOptionsSaveNumPages[] = {
+ 1, // Sram Header (SaveOptions)
+ 1, // Sram Header Backup (SaveOptions)
+};
+
+// Flash rom actual size needed
+s32 gFlashSaveSizes[] = {
+ sizeof(Save), // size = 0x100C - File 1 New Cycle Save
+ sizeof(Save), // size = 0x100C - File 1 New Cycle Save Backup
+ sizeof(Save), // size = 0x100C - File 2 New Cycle Save
+ sizeof(Save), // size = 0x100C - File 2 New Cycle Save Backup
+ offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save
+ offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save Backup
+ offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save
+ offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save Backup
+};
+
+// Bit Flag array in which sBitFlags8[n] is (1 << n)
+u8 sBitFlags8[] = {
+ (1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7),
+};
u16 D_801F6AF0;
u8 D_801F6AF2;
@@ -342,26 +429,29 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
- gSaveContext.save.saveInfo.playerData.deaths++;
- if (gSaveContext.save.saveInfo.playerData.deaths > 999) {
- gSaveContext.save.saveInfo.playerData.deaths = 999;
+ gSaveContext.save.saveInfo.playerData.threeDayResetCount++;
+ if (gSaveContext.save.saveInfo.playerData.threeDayResetCount > 999) {
+ gSaveContext.save.saveInfo.playerData.threeDayResetCount = 999;
}
sceneId = Play_GetOriginalSceneId(play->sceneId);
Play_SaveCycleSceneFlags(&play->state);
- play->actorCtx.sceneFlags.chest &= D_801C5FC0[sceneId][2];
- play->actorCtx.sceneFlags.switches[0] &= D_801C5FC0[sceneId][0];
- play->actorCtx.sceneFlags.switches[1] &= D_801C5FC0[sceneId][1];
- play->actorCtx.sceneFlags.collectible[0] &= D_801C5FC0[sceneId][3];
+ play->actorCtx.sceneFlags.chest &= sPersistentCycleSceneFlags[sceneId].chest;
+ play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleSceneFlags[sceneId].switch0;
+ play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleSceneFlags[sceneId].switch1;
+ play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleSceneFlags[sceneId].collectible;
play->actorCtx.sceneFlags.clearedRoom = 0;
for (i = 0; i < SCENE_MAX; i++) {
- gSaveContext.cycleSceneFlags[i].switch0 = ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & D_801C5FC0[i][0];
- gSaveContext.cycleSceneFlags[i].switch1 = ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & D_801C5FC0[i][1];
- gSaveContext.cycleSceneFlags[i].chest = ((void)0, gSaveContext.cycleSceneFlags[i].chest) & D_801C5FC0[i][2];
+ gSaveContext.cycleSceneFlags[i].switch0 =
+ ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleSceneFlags[i].switch0;
+ gSaveContext.cycleSceneFlags[i].switch1 =
+ ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleSceneFlags[i].switch1;
+ gSaveContext.cycleSceneFlags[i].chest =
+ ((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleSceneFlags[i].chest;
gSaveContext.cycleSceneFlags[i].collectible =
- ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & D_801C5FC0[i][3];
+ ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleSceneFlags[i].collectible;
gSaveContext.cycleSceneFlags[i].clearedRoom = 0;
gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0;
gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0;
@@ -383,15 +473,15 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY));
}
- for (i = 0; i < ARRAY_COUNT(D_801C66D0); i++) {
- u16 phi_v1_3 = D_801C66D0[i];
+ for (i = 0; i < ARRAY_COUNT(sPersistentCycleWeekEventRegs); i++) {
+ u16 isPersistentBits = sPersistentCycleWeekEventRegs[i];
- for (j = 0; j < ARRAY_COUNT(D_801C6890); j++) {
- if ((phi_v1_3 & 3) == 0) {
+ for (j = 0; j < ARRAY_COUNT(sBitFlags8); j++) {
+ if (!(isPersistentBits & 3)) {
gSaveContext.save.saveInfo.weekEventReg[i] =
- ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ D_801C6890[j]);
+ ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ sBitFlags8[j]);
}
- phi_v1_3 >>= 2;
+ isPersistentBits >>= 2;
}
}
@@ -399,38 +489,38 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.eventInf[i] = 0;
}
- CLEAR_EVENTINF(EVENTINF_70);
- CLEAR_EVENTINF(EVENTINF_71);
- CLEAR_EVENTINF(EVENTINF_72);
- CLEAR_EVENTINF(EVENTINF_73);
- CLEAR_EVENTINF(EVENTINF_74);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO);
if (gSaveContext.save.saveInfo.playerData.rupees != 0) {
- SET_EVENTINF(EVENTINF_70);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES);
}
if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) {
item = INV_CONTENT(ITEM_BOMB);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_71);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO);
}
}
if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) {
item = INV_CONTENT(ITEM_NUT);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_72);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO);
}
}
if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) {
item = INV_CONTENT(ITEM_STICK);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_73);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO);
}
}
if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) {
item = INV_CONTENT(ITEM_BOW);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_74);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO);
}
}
@@ -549,7 +639,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.jinxTimer = 0;
gSaveContext.rupeeAccumulator = 0;
- func_800F3B2C(play);
+ Horse_ResetHorseData(play);
}
void Sram_IncrementDay(void) {
@@ -642,7 +732,7 @@ void Sram_GenerateRandomSaveFields(void) {
do {
randBombers = Rand_S16Offset(0, 6);
- } while (randBombers <= 0 || randBombers >= 6);
+ } while ((randBombers <= 0) || (randBombers >= 6));
gSaveContext.save.saveInfo.bomberCode[0] = randBombers;
@@ -652,7 +742,7 @@ void Sram_GenerateRandomSaveFields(void) {
do {
randBombers = Rand_S16Offset(0, 6);
- } while (randBombers <= 0 || randBombers >= 6);
+ } while ((randBombers <= 0) || (randBombers >= 6));
sp2A = 0;
do {
@@ -671,7 +761,7 @@ void Sram_GenerateRandomSaveFields(void) {
SavePlayerData sSaveDefaultPlayerData = {
{ '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
- 0, // deaths
+ 0, // threeDayResetCount
{ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName " "
0x30, // healthCapacity
0x30, // health
@@ -772,7 +862,7 @@ void Sram_InitNewSave(void) {
SavePlayerData sSaveDebugPlayerData = {
{ 'Z', 'E', 'L', 'D', 'A', '3' }, // newf
- 0x0000, // deaths
+ 0, // threeDayResetCount
{ 0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName "LINK "
0x80, // healthCapacity
0x80, // health
@@ -869,7 +959,18 @@ Inventory sSaveDebugInventory = {
(1 << QUEST_SONG_SOARING) | (1 << QUEST_SONG_STORMS) | (1 << QUEST_BOMBERS_NOTEBOOK) |
(1 << QUEST_SONG_LULLABY_INTRO),
// dungeonItems
- { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 },
+ {
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP),
+ },
// dungeonKeys
{ 8, 8, 8, 8, 8, 8, 8, 8, 8 },
// defenseHearts
@@ -945,15 +1046,15 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]) !=
- 0) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1],
- D_801C67F0[gSaveContext.fileNum * 2 + 1]);
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2],
+ gFlashSaveNumPages[gSaveContext.fileNum * 2]) != 0) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1],
+ gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]);
}
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1],
- D_801C67F0[gSaveContext.fileNum * 2 + 1]);
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1],
+ gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save));
}
gSaveContext.save.cutsceneIndex = cutsceneIndex;
@@ -979,8 +1080,8 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) {
gSaveContext.timerPausedOsTimes[i] = 0;
}
- D_801BDAA0 = 1;
- D_801BDA9C = 0;
+ D_801BDAA0 = true;
+ gHorseIsMounted = false;
gSaveContext.powderKegTimer = 0;
gSaveContext.unk_1014 = 0;
gSaveContext.jinxTimer = 0;
@@ -1001,32 +1102,34 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
s32 pad1;
s32 fileNum;
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
if (gSaveContext.fileNum == 0xFF) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]);
- } else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[0], gFlashSaveNumPages[0]);
+ } else if (fileSelect->isOwlSave[gSaveContext.fileNum + 2]) {
phi_t1 = gSaveContext.fileNum + 2;
phi_t1 *= 2;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]);
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1],
+ gFlashSaveNumPages[phi_t1 + 1]);
}
} else {
phi_t1 = gSaveContext.fileNum;
phi_t1 *= 2;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]);
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1],
+ gFlashSaveNumPages[phi_t1 + 1]);
}
}
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]);
if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]);
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], gFlashSaveNumPages[phi_t1 + 1]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]);
}
}
@@ -1057,7 +1160,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
if (gSaveContext.save.isFirstCycle) {
gSaveContext.save.entrance = ENTRANCE(SOUTH_CLOCK_TOWN, 0);
gSaveContext.save.day = 0;
- gSaveContext.save.time = 0x3FFF;
+ gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
} else {
gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0);
gSaveContext.nextCutsceneIndex = 0;
@@ -1122,7 +1225,7 @@ void func_8014546C(SramContext* sramCtx) {
gSaveContext.save.saveInfo.checksum = 0;
gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
}
@@ -1145,7 +1248,7 @@ void func_80145698(SramContext* sramCtx) {
gSaveContext.save.saveInfo.checksum = 0;
gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
}
@@ -1153,31 +1256,21 @@ void func_80145698(SramContext* sramCtx) {
// Verifies save and use backup if corrupted?
#ifdef NON_EQUIVALENT
-void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
- FileSelectState* fileSelect = fileSelect2;
+void func_801457CC(GameState* gameState, SramContext* sramCtx) {
+ FileSelectState* fileSelect = (FileSelectState*)gameState;
u16 sp7A;
- // u16 sp78;
+ u16 oldCheckSum; // s2
u16 sp76;
- // u16 sp74;
- u16 sp6E; //!
- // s32 sp68;
- // u16 sp66;
- u16 phi_s2; //!
- u16 sp64;
- // s32 sp60;
- // s32 sp5C;
- // s32 sp58;
- // u32 new_var;
- u16 phi_s2_3;
- // s16 fakevar;
+ u16 sp64; // sp74?
+ u16 phi_s2;
+ u16 phi_s7;
+ u16 sp6E;
+ u16 newCheckSum; // v0
+ u16 phi_a0; // maskCount
- u16 temp_s2;
- u16 temp_v0_2;
- u16 phi_a0; // maskCount
-
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
D_801F6AF0 = gSaveContext.save.time;
- D_801F6AF2 = gSaveContext.unk_3F3F;
+ D_801F6AF2 = gSaveContext.flashSaveAvailable;
sp64 = 0;
for (sp76 = 0; sp76 < 5; sp76++, sp64 += 2) {
@@ -1185,40 +1278,65 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
phi_s2 = false;
sp6E = 0;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) {
+ // read main save from flash
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]) != 0) {
+ // main save didn't work
sp6E = 1;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
+ // read backup save from flash
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1]) != 0) {
+ // backup save didn't work
phi_s2 = true;
}
}
if (sp76 < 2) {
- fileSelect->unk_24468[sp76] = 0;
+ // Non-owl save
+ // sp76 = 0: main save
+ // sp76 = 1: backup save
+
+ fileSelect->isOwlSave[sp76] = 0;
if (phi_s2) {
+ // both main save and backup save failed
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
} else {
- // Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.saveInfo.checksum;
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+
+ // test checksum of main save
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
gSaveContext.save.saveInfo.checksum = 0;
- temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
- gSaveContext.save.saveInfo.checksum = temp_s2;
+ newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]);
+ gSaveContext.save.saveInfo.checksum = oldCheckSum;
- if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) {
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) {
+ // checksum didnt match, try backup save
sp6E = 1;
- if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {}
- phi_s2 = false;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
+ if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') &&
+ (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) {
+ phi_s2 = false;
+ }
+
+ // phi_s2 = false;
+
+ // read backup save from flash
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1]) != 0) {
+ // backup save didn't work
phi_s2 = true;
}
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.saveInfo.checksum;
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+
+ // test checksum of backup save
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
gSaveContext.save.saveInfo.checksum = 0;
+
+ //! FAKE: (s32)sp64
if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) ||
- (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) {
+ (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[(s32)sp64]))) {
+ // backup save didn't work
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
sp6E = 999;
@@ -1227,29 +1345,30 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
gSaveContext.save.saveInfo.checksum = 0;
+ // FAKE: Needed?
gSaveContext.save.saveInfo.checksum =
- Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
+ Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]);
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) {
fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A];
}
if (!CHECK_NEWF(fileSelect->newf[sp76])) {
- fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths;
+ fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount;
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) {
- fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
+ fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
}
fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity;
fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health;
- fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts;
- fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems;
- fileSelect->unk_24458[sp76] = gSaveContext.save.time;
- fileSelect->unk_24460[sp76] = gSaveContext.save.day;
- fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave;
+ fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts;
+ fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems;
+ fileSelect->time[sp76] = gSaveContext.save.time;
+ fileSelect->day[sp76] = gSaveContext.save.day;
+ fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave;
fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees;
- fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
+ fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET);
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) {
@@ -1262,90 +1381,106 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
if (sp6E == 1) {
+ // backup save
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
- func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]);
- } else if (sp6E == 0) { // TODO: == 0?
- temp_s2 = gSaveContext.save.saveInfo.checksum;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
- phi_s2_3 = 1;
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]);
+ } else if (!sp6E) {
+ // main save
+ phi_s7 = gSaveContext.save.saveInfo.checksum;
+
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1]) != 0) {
+ oldCheckSum = 1;
} else {
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
- phi_s2_3 = gSaveContext.save.saveInfo.checksum;
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
gSaveContext.save.saveInfo.checksum = 0;
sp7A = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
}
- if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) ||
- (phi_s2_3 != temp_s2)) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]);
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) ||
+ (oldCheckSum != phi_s7)) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]);
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
- func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]);
}
}
} else if (sp76 < 4) {
- fileSelect->unk_24468[sp76] = 0;
+ // Owl Save:
+ // sp76 = 3: main owl save
+ // sp76 = 4: backup owl save
+ fileSelect->isOwlSave[sp76] = 0;
- if (!CHECK_NEWF(fileSelect->newf2[(s32)sp76])) { // TODO: Needed?
+ if (!CHECK_NEWF(fileSelect->newf[sp76 - 2])) {
if (phi_s2) {
+ // both main save and backup save failed
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf,
- D_801C6870[sp64]); // TODO: Needed?
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
} else {
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.saveInfo.checksum;
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
+ // test checksum of main save
gSaveContext.save.saveInfo.checksum = 0;
- temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
- gSaveContext.save.saveInfo.checksum = temp_s2;
- if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) {
+ newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]);
+ gSaveContext.save.saveInfo.checksum = oldCheckSum;
+
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) {
+ // checksum didnt match, try backup save
sp6E = 1;
if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') &&
(gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) {
phi_s2 = false;
}
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
+ // read backup save from flash
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1])) {
+ // backup save didn't work
phi_s2 = true;
}
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.saveInfo.checksum;
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+
+ // test checksum of backup save
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
gSaveContext.save.saveInfo.checksum = 0;
+
if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) ||
- (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) {
+ (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]))) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
sp6E = 999;
}
}
}
gSaveContext.save.saveInfo.checksum = 0;
+ // FAKE: Needed?
gSaveContext.save.saveInfo.checksum =
- Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
+ Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]);
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) {
fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A];
}
if (!CHECK_NEWF(fileSelect->newf[sp76])) {
- fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths;
+ fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount;
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) {
- phi_s2 += 0; // TODO: Needed?
- fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
+ fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
}
fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity;
fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health;
- fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts;
- fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems;
- fileSelect->unk_24458[sp76] = gSaveContext.save.time;
- fileSelect->unk_24460[sp76] = gSaveContext.save.day;
- fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave;
+ fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts;
+ fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems;
+ fileSelect->time[sp76] = gSaveContext.save.time;
+ fileSelect->day[sp76] = gSaveContext.save.day;
+ fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave;
fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees;
- fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
+ fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET);
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) {
@@ -1358,39 +1493,44 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
if (sp6E == 1) {
- func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]);
- func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]);
- } else if (!sp6E) { // TODO: == 0?
- temp_s2 = gSaveContext.save.saveInfo.checksum;
- if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
- phi_s2_3 = 1;
+ // backup save
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]);
+ } else if (!sp6E) {
+ // main save
+ phi_s7 = gSaveContext.save.saveInfo.checksum;
+
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1])) {
+ oldCheckSum = 1;
} else {
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- phi_s2_3 = gSaveContext.save.saveInfo.checksum;
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+ oldCheckSum = gSaveContext.save.saveInfo.checksum;
gSaveContext.save.saveInfo.checksum = 0;
- // phi_s2_3 = gSaveContext.save.saveInfo.checksum;
- sp7A = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
+ sp7A = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]);
}
- if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) ||
- (phi_s2_3 != temp_s2)) {
- func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]);
- func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]);
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) ||
+ (oldCheckSum != phi_s7)) {
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64],
+ gFlashSaveNumPages[sp64]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1],
+ gFlashSaveNumPages[sp64 + 1]);
}
}
} else {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
- Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]);
- func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]);
+ Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]);
}
} else {
if (phi_s2) {
gSaveContext.options.optionId = 0xA51D;
gSaveContext.options.language = 1;
- gSaveContext.options.audioSetting = 0;
+ gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.languageSetting = 0;
gSaveContext.options.zTargetSetting = 0;
} else {
@@ -1398,7 +1538,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
if (gSaveContext.options.optionId != 0xA51D) {
gSaveContext.options.optionId = 0xA51D;
gSaveContext.options.language = 1;
- gSaveContext.options.audioSetting = 0;
+ gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
gSaveContext.options.languageSetting = 0;
gSaveContext.options.zTargetSetting = 0;
}
@@ -1408,7 +1548,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
gSaveContext.save.time = D_801F6AF0;
- gSaveContext.unk_3F3F = D_801F6AF2;
+ gSaveContext.flashSaveAvailable = D_801F6AF2;
}
gSaveContext.options.language = 1;
@@ -1417,50 +1557,52 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s")
#endif
-void func_80146580(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) {
+void Sram_EraseSave(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) {
FileSelectState* fileSelect = fileSelect2;
s32 pad;
- if (gSaveContext.unk_3F3F) {
- if (fileSelect->unk_2446A[fileNum]) {
+ if (gSaveContext.flashSaveAvailable) {
+ if (fileSelect->isOwlSave[fileNum + 2]) {
func_80147314(sramCtx, fileNum);
- fileSelect->unk_2446A[fileNum] = 0;
+ fileSelect->isOwlSave[fileNum + 2] = false;
}
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save));
}
gSaveContext.save.time = D_801F6AF0;
- gSaveContext.unk_3F3F = D_801F6AF2;
+ gSaveContext.flashSaveAvailable = D_801F6AF2;
}
#ifdef NON_MATCHING
// v0/v1
-void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
+void Sram_CopySave(FileSelectState* fileSelect2, SramContext* sramCtx) {
FileSelectState* fileSelect = fileSelect2;
u16 i;
s16 maskCount;
- if (gSaveContext.unk_3F3F) {
- if (fileSelect->unk_2446A[fileSelect->unk_2448E]) {
- func_80147414(sramCtx, fileSelect->unk_2448E, fileSelect->fileNum);
- fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths;
+ if (gSaveContext.flashSaveAvailable) {
+ if (fileSelect->isOwlSave[fileSelect->selectedFileIndex + 2]) {
+ func_80147414(sramCtx, fileSelect->selectedFileIndex, fileSelect->copyDestFileIndex);
+ fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex + 2] =
+ gSaveContext.save.saveInfo.playerData.threeDayResetCount;
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) {
- fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i];
+ fileSelect->fileNames[fileSelect->copyDestFileIndex + 2][i] =
+ gSaveContext.save.saveInfo.playerData.playerName[i];
}
- fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity;
- fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health;
- fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts;
- fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems;
- fileSelect->unk_2445C[fileSelect->fileNum] = gSaveContext.save.time;
- fileSelect->unk_24464[fileSelect->fileNum] = gSaveContext.save.day;
- fileSelect->unk_2446A[fileSelect->fileNum] = gSaveContext.save.isOwlSave;
- fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees;
- // = CUR_UPG_VALUE(UPG_WALLET);
- fileSelect->unk_24476[fileSelect->fileNum] =
- (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
+ fileSelect->healthCapacity[fileSelect->copyDestFileIndex + 2] =
+ gSaveContext.save.saveInfo.playerData.healthCapacity;
+ fileSelect->health[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.health;
+ fileSelect->defenseHearts[fileSelect->copyDestFileIndex + 2] =
+ gSaveContext.save.saveInfo.inventory.defenseHearts;
+ fileSelect->questItems[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.inventory.questItems;
+ fileSelect->time[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.time;
+ fileSelect->day[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.day;
+ fileSelect->isOwlSave[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.isOwlSave;
+ fileSelect->rupees[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.rupees;
+ fileSelect->walletUpgrades[fileSelect->copyDestFileIndex + 2] = CUR_UPG_VALUE(UPG_WALLET);
for (i = 0, maskCount = 0; i < 24; i++) {
if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
@@ -1468,41 +1610,42 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
}
- fileSelect->unk_2447A[fileSelect->fileNum] = maskCount;
- fileSelect->unk_2447E[fileSelect->fileNum] =
- (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
+ fileSelect->maskCount[fileSelect->copyDestFileIndex + 2] = maskCount;
+ fileSelect->heartPieceCount[fileSelect->copyDestFileIndex + 2] = GET_QUEST_HEART_PIECE_COUNT;
}
// clear buffer
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
// read to buffer
- func_80185968(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], D_801C67F0[fileSelect->unk_2448E * 2]);
-
+ SysFlashrom_ReadData(&sramCtx->saveBuf[0], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2],
+ gFlashSaveNumPages[fileSelect->selectedFileIndex * 2]);
if (1) {}
- func_80185968(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1],
- D_801C67F0[fileSelect->unk_2448E * 2 + 1]);
+
+ SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2 + 1],
+ gFlashSaveNumPages[fileSelect->selectedFileIndex * 2 + 1]);
if (1) {}
// copy buffer to save context
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
- fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths;
+ fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex] =
+ gSaveContext.save.saveInfo.playerData.threeDayResetCount;
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) {
- fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i];
+ fileSelect->fileNames[fileSelect->copyDestFileIndex][i] =
+ gSaveContext.save.saveInfo.playerData.playerName[i];
}
- fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity;
- fileSelect->health[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health;
- fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts;
- fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems;
- fileSelect->unk_24458[fileSelect->fileNum] = gSaveContext.save.time;
- fileSelect->unk_24460[fileSelect->fileNum] = gSaveContext.save.day;
- fileSelect->unk_24468[fileSelect->fileNum] = gSaveContext.save.isOwlSave;
- fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees;
- // = CUR_UPG_VALUE(UPG_WALLET);
- fileSelect->unk_24474[fileSelect->fileNum] =
- (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
+ fileSelect->healthCapacity[fileSelect->copyDestFileIndex] =
+ gSaveContext.save.saveInfo.playerData.healthCapacity;
+ fileSelect->health[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health;
+ fileSelect->defenseHearts[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts;
+ fileSelect->questItems[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.questItems;
+ fileSelect->time[fileSelect->copyDestFileIndex] = gSaveContext.save.time;
+ fileSelect->day[fileSelect->copyDestFileIndex] = gSaveContext.save.day;
+ fileSelect->isOwlSave[fileSelect->copyDestFileIndex] = gSaveContext.save.isOwlSave;
+ fileSelect->rupees[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.rupees;
+ fileSelect->walletUpgrades[fileSelect->copyDestFileIndex] = CUR_UPG_VALUE(UPG_WALLET);
for (i = 0, maskCount = 0; i < 24; i++) {
if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
@@ -1510,16 +1653,15 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
}
- fileSelect->maskCount[fileSelect->fileNum] = maskCount;
- fileSelect->heartPieceCount[fileSelect->fileNum] =
- (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
+ fileSelect->maskCount[fileSelect->copyDestFileIndex] = maskCount;
+ fileSelect->heartPieceCount[fileSelect->copyDestFileIndex] = GET_QUEST_HEART_PIECE_COUNT;
}
gSaveContext.save.time = D_801F6AF0;
- gSaveContext.unk_3F3F = D_801F6AF2;
+ gSaveContext.flashSaveAvailable = D_801F6AF2;
}
#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_80146628.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/Sram_CopySave.s")
#endif
void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
@@ -1528,15 +1670,15 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
FileSelectState* fileSelect = fileSelect2;
s16 maskCount;
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
Sram_InitNewSave();
- if (fileSelect->unk_24480 == 0) {
+ if (fileSelect->buttonIndex == 0) {
gSaveContext.save.cutsceneIndex = 0xFFF0;
}
for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); phi_v0++) {
gSaveContext.save.saveInfo.playerData.playerName[phi_v0] =
- fileSelect->unk_24414[fileSelect->unk_24480][phi_v0];
+ fileSelect->fileNames[fileSelect->buttonIndex][phi_v0];
}
gSaveContext.save.saveInfo.playerData.newf[0] = 'Z';
@@ -1552,24 +1694,25 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); i++) {
- fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.newf[i];
+ fileSelect->newf[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i];
}
- fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.deaths;
+ fileSelect->threeDayResetCount[fileSelect->buttonIndex] =
+ gSaveContext.save.saveInfo.playerData.threeDayResetCount;
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) {
- fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.playerName[i];
+ fileSelect->fileNames[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i];
}
- fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.healthCapacity;
- fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.health;
- fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.defenseHearts;
- fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.questItems;
- fileSelect->unk_24458[fileSelect->unk_24480] = gSaveContext.save.time;
- fileSelect->unk_24460[fileSelect->unk_24480] = gSaveContext.save.day;
- fileSelect->unk_24468[fileSelect->unk_24480] = gSaveContext.save.isOwlSave;
- fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.rupees;
- fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET);
+ fileSelect->healthCapacity[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity;
+ fileSelect->health[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.health;
+ fileSelect->defenseHearts[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts;
+ fileSelect->questItems[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.questItems;
+ fileSelect->time[fileSelect->buttonIndex] = gSaveContext.save.time;
+ fileSelect->day[fileSelect->buttonIndex] = gSaveContext.save.day;
+ fileSelect->isOwlSave[fileSelect->buttonIndex] = gSaveContext.save.isOwlSave;
+ fileSelect->rupees[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.rupees;
+ fileSelect->walletUpgrades[fileSelect->buttonIndex] = CUR_UPG_VALUE(UPG_WALLET);
for (i = 0, maskCount = 0; i < 24; i++) {
if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
@@ -1577,17 +1720,19 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
}
- fileSelect->maskCount[fileSelect->unk_24480] = maskCount;
- fileSelect->heartPieceCount[fileSelect->unk_24480] =
- (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
+ fileSelect->maskCount[fileSelect->buttonIndex] = maskCount;
+ fileSelect->heartPieceCount[fileSelect->buttonIndex] = GET_QUEST_HEART_PIECE_COUNT;
}
gSaveContext.save.time = D_801F6AF0;
- gSaveContext.unk_3F3F = D_801F6AF2;
+ gSaveContext.flashSaveAvailable = D_801F6AF2;
}
-void func_80146DF8(SramContext* sramCtx) {
- if (gSaveContext.unk_3F3F) {
+/**
+ * Write the SaveOptions of SaveContext to the save buffer
+ */
+void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) {
+ if (gSaveContext.flashSaveAvailable) {
// TODO: macros for languages
gSaveContext.options.language = 1;
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions));
@@ -1601,7 +1746,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
}
void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
- if (gSaveContext.unk_3F3F) {
+ if (gSaveContext.flashSaveAvailable) {
sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE);
sramCtx->status = 0;
}
@@ -1610,10 +1755,10 @@ void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
/**
* Synchronous flash write
*/
-void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages) {
+void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages) {
sramCtx->curPage = curPage;
sramCtx->numPages = numPages;
- func_80185F64(sramCtx->saveBuf, curPage, numPages);
+ SysFlashrom_WriteDataSync(sramCtx->saveBuf, curPage, numPages);
}
/**
@@ -1626,7 +1771,8 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) {
gSaveContext.save.isFirstCycle = true;
gSaveContext.save.isOwlSave = false;
func_80145698(sramCtx);
- func_80185F64(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C6818[gSaveContext.fileNum * 2]);
+ SysFlashrom_WriteDataSync(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2],
+ gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]);
}
/**
@@ -1647,27 +1793,28 @@ void Sram_SaveSpecialNewDay(PlayState* play) {
gSaveContext.save.day = day;
gSaveContext.save.time = time;
gSaveContext.save.cutsceneIndex = cutsceneIndex;
- func_80185F64(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]);
+ SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2],
+ gFlashSaveNumPages[gSaveContext.fileNum * 2]);
}
-void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) {
+void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages) {
sramCtx->curPage = curPage;
sramCtx->numPages = numPages;
sramCtx->status = 1;
}
-void func_80147020(SramContext* sramCtx) {
+void Sram_StartWriteToFlashDefault(SramContext* sramCtx) {
// async flash write
- func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
+ SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
- sramCtx->unk_18 = osGetTime();
+ sramCtx->startWriteOsTime = osGetTime();
sramCtx->status = 2;
}
-void func_80147068(SramContext* sramCtx) {
+void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx) {
if (sramCtx->status == 2) {
- if (func_80185EC4() != 0) { // if task running
- if (func_80185F04() == 0) { // wait for task done
+ if (SysFlashrom_IsBusy() != 0) { // if task running
+ if (SysFlashrom_AwaitResult() == 0) { // wait for task done
// task success
sramCtx->status = 4;
} else {
@@ -1675,50 +1822,52 @@ void func_80147068(SramContext* sramCtx) {
sramCtx->status = 4;
}
}
- } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) {
+ } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) {
+ // Finished status is hardcoded to 2 seconds instead of when the task finishes
sramCtx->status = 0;
}
}
-void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages) {
+void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages) {
sramCtx->curPage = curPage;
sramCtx->numPages = numPages;
sramCtx->status = 6;
}
-void func_80147150(SramContext* sramCtx) {
- func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
+void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx) {
+ SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
- sramCtx->unk_18 = osGetTime();
+ sramCtx->startWriteOsTime = osGetTime();
sramCtx->status = 7;
}
-void func_80147198(SramContext* sramCtx) {
+void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx) {
if (sramCtx->status == 7) {
- if (func_80185EC4() != 0) { // Is task running
- if (func_80185F04() == 0) { // Wait for task done
- func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages);
+ if (SysFlashrom_IsBusy() != 0) { // Is task running
+ if (SysFlashrom_AwaitResult() == 0) { // Wait for task done
+ SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages);
sramCtx->status = 8;
} else {
- func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages);
+ SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages);
sramCtx->status = 8;
}
}
} else if (sramCtx->status == 8) {
- if (func_80185EC4() != 0) { // Is task running
- if (func_80185F04() == 0) { // Wait for task done
+ if (SysFlashrom_IsBusy() != 0) { // Is task running
+ if (SysFlashrom_AwaitResult() == 0) { // Wait for task done
sramCtx->status = 4;
} else {
sramCtx->status = 4;
}
}
- } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) {
+ } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) {
+ // Finished status is hardcoded to 2 seconds instead of when the task finishes
sramCtx->status = 0;
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
gSaveContext.save.isOwlSave = false;
gSaveContext.save.saveInfo.checksum = 0;
// flash read to buffer then copy to save context
- func_80185968(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
+ SysFlashrom_ReadData(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum));
}
}
@@ -1739,8 +1888,9 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) {
gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum));
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum));
- func_80146EBC(sramCtx, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]);
- func_80146EBC(sramCtx, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2], gFlashOwlSaveNumPages[fileNum * 2]);
+ //! Note: should be `gFlashOwlSaveNumPages[fileNum * 2 + 1]`?
+ Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2 + 1], gFlashOwlSaveNumPages[fileNum * 2]);
gSaveContext.save.isOwlSave = true;
@@ -1752,6 +1902,7 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) {
gSaveContext.save.saveInfo.playerData.newf[5] = '3';
}
+// Used by `Sram_CopySave` with `isOwlSave` set
void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) {
s32 pad;
@@ -1759,16 +1910,18 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
// Read save file
- if (func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) {
+ if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2],
+ gFlashOwlSaveNumPages[fileNum * 2]) != 0) {
// If failed, read backup save file
- func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]);
+ SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2 + 1],
+ gFlashOwlSaveNumPages[fileNum * 2 + 1]);
}
// Copy buffer to save context
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum));
- func_80146EBC(sramCtx, D_801C6840[arg2 * 2], D_801C6850[arg2 * 2]);
- func_80146EBC(sramCtx, D_801C6840[arg2 * 2 + 1], D_801C6850[arg2 * 2]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2], gFlashOwlSaveNumPages[arg2 * 2]);
+ Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2 + 1], gFlashOwlSaveNumPages[arg2 * 2]);
}
void Sram_nop8014750C(UNK_TYPE4 arg0) {
diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c
index a4d95af64..1c3f1ae3a 100644
--- a/src/code/z_sub_s.c
+++ b/src/code/z_sub_s.c
@@ -15,7 +15,7 @@ Vec3f gOneVec3f = { 1.0f, 1.0f, 1.0f };
s32 D_801C5DBC[] = { 0, 1 }; // Unused
/**
- * Finds the first EnDoor instance with unk_1A4 == 5 and the specified switchFlag.
+ * Finds the first EnDoor instance with doorType == ENDOOR_TYPE_5 and the specified switchFlag.
*/
EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) {
Actor* actor = NULL;
@@ -29,7 +29,7 @@ EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) {
break;
}
- if ((door->unk_1A4 == 5) && (door->switchFlag == (u8)switchFlag)) {
+ if ((door->doorType == ENDOOR_TYPE_5) && (door->switchFlag == (u8)switchFlag)) {
break;
}
@@ -128,7 +128,7 @@ Gfx* SubS_DrawTransformFlex(PlayState* play, void** skeleton, Vec3s* jointTable,
newDlist = rootLimb->dList;
limbDList = rootLimb->dList;
- if (overrideLimbDraw == NULL || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) {
+ if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) {
Matrix_TranslateRotateZYX(&pos, &rot);
Matrix_Push();
@@ -188,7 +188,7 @@ s32 SubS_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 stepRo
Matrix_MultVec3f(&zeroVec, &newPos);
Matrix_Get(&curState);
- Matrix_MtxFToYXZRot(&curState, &newRot, MTXMODE_NEW);
+ Matrix_MtxFToYXZRot(&curState, &newRot, false);
*pos = newPos;
if (!stepRot && !overrideRot) {
@@ -489,9 +489,9 @@ Path* SubS_GetAdditionalPath(PlayState* play, u8 pathIndex, s32 limit) {
if (i >= limit) {
break;
}
- pathIndex = path->unk1;
+ pathIndex = path->additionalPathIndex;
i++;
- } while (pathIndex != 0xFF);
+ } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE);
return path;
}
@@ -577,7 +577,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) {
diffZ = points[index + 1].z - points[index - 1].z;
}
- func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d);
if (((px * actor->world.pos.x) + (pz * actor->world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -585,7 +585,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) {
return reached;
}
-Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex) {
+Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex) {
Path* path = NULL;
s32 found = false;
s32 time = (((s16)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60) +
@@ -593,17 +593,17 @@ Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* start
30;
s32 day = CURRENT_DAY;
- if (pathIndex == max) {
+ if (pathIndex == pathIndexNone) {
return NULL;
}
- while (pathIndex != 0xFF) {
+ while (pathIndex != ADDITIONAL_PATH_INDEX_NONE) {
path = &play->setupPathList[pathIndex];
- if (sPathDayFlags[day] & path->unk2) {
+ if (path->customValue & sPathDayFlags[day]) {
found = true;
break;
}
- pathIndex = path->unk1;
+ pathIndex = path->additionalPathIndex;
}
if (found == true) {
@@ -994,7 +994,7 @@ void SubS_DrawShadowTex(Actor* actor, GameState* gameState, u8* tex) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 100);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
Matrix_Translate(actor->world.pos.x, 0.0f, actor->world.pos.z, MTXMODE_NEW);
@@ -1098,8 +1098,8 @@ s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB) {
return (ABS_ALT(BINANG_SUB(angleB, angleA)) <= threshold) ? true : false;
}
-Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 max) {
- return (pathIndex != max) ? &play->setupPathList[pathIndex] : NULL;
+Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 pathIndexNone) {
+ return (pathIndex != pathIndexNone) ? &play->setupPathList[pathIndex] : NULL;
}
s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst) {
@@ -1179,7 +1179,7 @@ Actor* SubS_FindActor(PlayState* play, Actor* actorListStart, u8 actorCategory,
actor = play->actorCtx.actorLists[actorCategory].first;
}
- while (actor != NULL && actorId != actor->id) {
+ while ((actor != NULL) && (actorId != actor->id)) {
actor = actor->next;
}
@@ -1503,10 +1503,10 @@ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart
actorIter = play->actorCtx.actorLists[actorCategory].first;
}
- while (actorIter != NULL &&
- (actorId != actorIter->id ||
- (actorId == actorIter->id &&
- (verifyActor == NULL || (verifyActor != NULL && !verifyActor(play, actor, actorIter, verifyData)))))) {
+ while ((actorIter != NULL) &&
+ ((actorId != actorIter->id) ||
+ ((actorId == actorIter->id) &&
+ ((verifyActor == NULL) || ((verifyActor != NULL) && !verifyActor(play, actor, actorIter, verifyData)))))) {
actorIter = actorIter->next;
}
diff --git a/src/code/z_view.c b/src/code/z_view.c
index 105e6643a..4adc00b8d 100644
--- a/src/code/z_view.c
+++ b/src/code/z_view.c
@@ -18,8 +18,8 @@ void View_ViewportToVp(Vp* dest, Viewport* src) {
dest->vp.vtrans[2] = 0x01FF;
dest->vp.vtrans[3] = 0;
- if ((src->leftX == 0) && (src->rightX == SCREEN_WIDTH_HIGH_RES) && (src->topY == 0) &&
- (src->bottomY == SCREEN_HEIGHT_HIGH_RES)) {}
+ if ((src->leftX == 0) && (src->rightX == HIRES_BUFFER_WIDTH) && (src->topY == 0) &&
+ (src->bottomY == HIRES_BUFFER_HEIGHT)) {}
}
void View_Init(View* view, GraphicsContext* gfxCtx) {
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index b7d2dea64..2ddd27775 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -1,17 +1,377 @@
#include "global.h"
+#include "ultra64/viint.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140260.s")
+typedef struct {
+ /* 0x00 */ u32 burst;
+ /* 0x04 */ u32 vSync;
+ /* 0x08 */ u32 hSync;
+ /* 0x0C */ u32 leap;
+ /* 0x10 */ u32 hStart;
+ /* 0x14 */ u32 vStart;
+ /* 0x18 */ u32 vBurst;
+} ViModeStruct; // size = 0x1C
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014026C.s")
+void ViMode_LogPrint(OSViMode* osViMode) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140730.s")
+/**
+ * Configures the custom OSViMode for this ViMode
+ *
+ * @param viMode ViMode to configure the custom OSViMode for
+ * @param type Identifying type for the OSViMode
+ * @param tvType TV Type: NTSC, PAL, MPAL or FPAL
+ * @param loRes Boolean: true = low resolution, false = high resolution.
+ * Corresponds to "L" or "H" in libultra VI mode names
+ * @param antialiasOff Boolean: true = point-sampling, false = anti-aliasing.
+ * Corresponds to "P" or "A" in libultra VI mode names
+ * @param modeN Boolean: controls interlacing mode, different based on resolution.
+ * Corresponds to "N" or "F" in libultra VI mode names
+ * @param fb16Bit Bolean: true = 16-bit framebuffer, false = 32-bit framebuffer.
+ * Corresponds to "1" or "2" in libultra VI mode names
+ * @param width Screen width
+ * @param height Screen height
+ * @param leftAdjust Left edge adjustment
+ * @param rightAdjust Right edge adjustment
+ * @param upperAdjust Upper edge adjustment
+ * @param lowerAdjust Lower edge adjustment
+ */
+void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit,
+ s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust) {
+ s32 hiRes;
+ s32 antialiasOn;
+ s32 modeF;
+ s32 fb32Bit;
+ s32 hiResDeflicker; // deflickered interlacing
+ s32 hiResInterlaced;
+ s32 loResDeinterlaced;
+ s32 loResInterlaced;
+ s32 modeLAN1; // L=(lo res) A=(antialias) N=(deinterlace) 1=(16-bit)
+ s32 modeLPN2; // L=(lo res) P=(point-sampled) N=(deinterlace) 2=(32-bit)
+ s32 modeHPN2; // H=(hi res) P=(point-sampled) N=(normal interlacing) 2=(32-bit)
+ s32 yScaleLo;
+ s32 yScaleHiEvenField;
+ s32 yScaleHiOddField;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140810.s")
+ hiRes = !loRes;
+ antialiasOn = !antialiasOff;
+ modeF = !modeN;
+ fb32Bit = !fb16Bit;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140898.s")
+ hiResDeflicker = hiRes && modeF;
+ hiResInterlaced = hiRes && modeN;
+ loResDeinterlaced = loRes && modeN;
+ loResInterlaced = loRes && modeF;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140900.s")
+ modeLAN1 = loRes && antialiasOn && modeN && fb16Bit;
+ modeLPN2 = loRes && antialiasOff && modeN && fb32Bit;
+ modeHPN2 = hiRes && antialiasOff && modeN && fb32Bit;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s")
+ upperAdjust &= ~1;
+ lowerAdjust &= ~1;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s")
+ yScaleLo = (hiResDeflicker ? 2 : 1) * (((SCREEN_HEIGHT << 11) / SCREEN_HEIGHT) / (loRes ? 1 : 2));
+
+ yScaleHiEvenField = modeF ? (loResInterlaced ? 0x1000000 : 0x2000000) : 0;
+ yScaleHiOddField = modeF ? (loResInterlaced ? 0x3000000 : 0x2000000) : 0;
+
+ viMode->type = type;
+ viMode->comRegs.ctrl = OS_VI_UNK2000 | OS_VI_UNK1000 | OS_VI_GAMMA | OS_VI_GAMMA_DITHER |
+ (!loResDeinterlaced ? OS_VI_UNK40 : 0) | (antialiasOn ? OS_VI_DIVOT : 0) |
+ (fb32Bit ? OS_VI_UNK2 | OS_VI_UNK1 : OS_VI_UNK2);
+
+ if (modeLAN1) {
+ // Anti-aliased, fetch extra lines as-needed
+ viMode->comRegs.ctrl |= 0x100;
+ } else if (modeLPN2 | modeHPN2) {
+ // Point-sampled, resampling disabled
+ viMode->comRegs.ctrl |= 0x300;
+ } else {
+ if (antialiasOff) {
+ // Point-sampled, resampling enabled
+ viMode->comRegs.ctrl |= 0x200;
+ } else {
+ // Anti-aliased, always fetch extra lines
+ viMode->comRegs.ctrl |= 0;
+ }
+ }
+
+ viMode->comRegs.width = width * (hiResInterlaced ? 2 : 1);
+
+ if (tvType < 3) {
+ static const ViModeStruct D_801DF0C0[] = {
+ {
+ // OS_TV_PAL
+ BURST(58, 35, 4, 64),
+ VSYNC(624),
+ HSYNC(3177, 21),
+ LEAP(3183, 3182),
+ HSTART(128, 768),
+ START(95, 569),
+ BURST(107, 2, 9, 0),
+ },
+ {
+ // OS_TV_NTSC
+ BURST(57, 34, 5, 62),
+ VSYNC(524),
+ HSYNC(3093, 0),
+ LEAP(3093, 3093),
+ HSTART(108, 748),
+ START(37, 511),
+ BURST(4, 2, 14, 0),
+ },
+ {
+ // OS_TV_MPAL
+ BURST(57, 30, 5, 70),
+ VSYNC(524),
+ HSYNC(3088, 0),
+ LEAP(3100, 3100),
+ HSTART(108, 748),
+ START(37, 511),
+ BURST(4, 2, 14, 0),
+ },
+ };
+ const ViModeStruct* ptr = &D_801DF0C0[tvType];
+
+ viMode->comRegs.burst = ptr->burst;
+ viMode->comRegs.vSync = ptr->vSync;
+ viMode->comRegs.hSync = ptr->hSync;
+ viMode->comRegs.leap = ptr->leap;
+ viMode->comRegs.hStart = ptr->hStart;
+ viMode->fldRegs[0].vStart = ptr->vStart;
+ viMode->fldRegs[1].vStart = ptr->vStart;
+ viMode->fldRegs[0].vBurst = ptr->vBurst;
+ viMode->fldRegs[1].vBurst = ptr->vBurst;
+ } else {
+ __assert("../z_vimode.c", 216);
+ }
+
+ viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust;
+ viMode->fldRegs[0].vStart += (upperAdjust << 16) + (s16)lowerAdjust;
+ viMode->fldRegs[1].vStart += (upperAdjust << 16) + (s16)lowerAdjust;
+
+ if (loResDeinterlaced) {
+ viMode->comRegs.vSync++;
+ if (tvType == OS_TV_MPAL) {
+ viMode->comRegs.hSync += HSYNC(1, 4);
+ viMode->comRegs.leap += LEAP((u16)-4, (u16)-2);
+ }
+ } else {
+ viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2);
+ if (tvType == OS_TV_MPAL) {
+ viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1);
+ } else if (tvType == OS_TV_PAL) {
+ viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0);
+ }
+ }
+
+ viMode->comRegs.xScale = (SCREEN_WIDTH << 10) / SCREEN_WIDTH;
+ viMode->comRegs.vCurrent = 0;
+
+ viMode->fldRegs[0].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2));
+ viMode->fldRegs[1].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2) * (loRes ? 1 : 2));
+
+ viMode->fldRegs[0].yScale = yScaleLo | yScaleHiEvenField;
+ viMode->fldRegs[1].yScale = yScaleLo | yScaleHiOddField;
+
+ viMode->fldRegs[0].vIntr = 2;
+ viMode->fldRegs[1].vIntr = 2;
+}
+
+void ViMode_Save(ViMode* viMode) {
+ R_VI_MODE_EDIT_STATE = viMode->editState;
+ R_VI_MODE_EDIT_WIDTH = viMode->viWidth;
+ R_VI_MODE_EDIT_HEIGHT = viMode->viHeight;
+ R_VI_MODE_EDIT_ULY_ADJ = viMode->upperAdjust;
+ R_VI_MODE_EDIT_LRY_ADJ = viMode->lowerAdjust;
+ R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust;
+ R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust;
+
+ if (SREG(58) == 1) {
+ SREG(58) = 0;
+ switch (SREG(59)) {
+ case 1:
+ ViMode_LogPrint(&osViModePalLan1);
+ break;
+
+ case 2:
+ ViMode_LogPrint(&osViModeFpalLan1);
+ break;
+
+ default:
+ ViMode_LogPrint(&viMode->customViMode);
+ break;
+ }
+ }
+}
+
+void ViMode_Load(ViMode* viMode) {
+ //! @bug This condition always fails as the lowest bit is masked out to 0
+ if ((R_VI_MODE_EDIT_WIDTH & ~3) == 1) {
+ R_VI_MODE_EDIT_WIDTH += 4;
+ }
+
+ viMode->editState = R_VI_MODE_EDIT_STATE;
+ viMode->viWidth = R_VI_MODE_EDIT_WIDTH & ~3;
+ viMode->viHeight = R_VI_MODE_EDIT_HEIGHT;
+ viMode->upperAdjust = R_VI_MODE_EDIT_ULY_ADJ;
+ viMode->lowerAdjust = R_VI_MODE_EDIT_LRY_ADJ;
+ viMode->leftAdjust = R_VI_MODE_EDIT_ULX_ADJ;
+ viMode->rightAdjust = R_VI_MODE_EDIT_LRX_ADJ;
+}
+
+void ViMode_Init(ViMode* viMode) {
+ viMode->editState = VI_MODE_EDIT_STATE_INACTIVE;
+ viMode->viWidth = SCREEN_WIDTH;
+ viMode->viHeight = SCREEN_HEIGHT;
+ viMode->leftAdjust = 0;
+ viMode->rightAdjust = 0;
+ viMode->upperAdjust = 0;
+ viMode->lowerAdjust = 0;
+ viMode->viFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF;
+ viMode->tvType = osTvType;
+ viMode->fb16Bit = true;
+ viMode->modeN = true;
+ viMode->antialiasOff = false;
+ viMode->loRes = true;
+
+ ViMode_Save(viMode);
+}
+
+void ViMode_Destroy(ViMode* viMode) {
+}
+
+void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures) {
+ u32 ctrl = viMode->customViMode.comRegs.ctrl;
+
+ if (viFeatures & OS_VI_GAMMA_ON) {
+ ctrl |= OS_VI_GAMMA;
+ }
+ if (viFeatures & OS_VI_GAMMA_OFF) {
+ ctrl &= ~OS_VI_GAMMA;
+ }
+ if (viFeatures & OS_VI_GAMMA_DITHER_ON) {
+ ctrl |= OS_VI_GAMMA_DITHER;
+ }
+ if (viFeatures & OS_VI_GAMMA_DITHER_OFF) {
+ ctrl &= ~OS_VI_GAMMA_DITHER;
+ }
+ if (viFeatures & OS_VI_DIVOT_ON) {
+ ctrl |= OS_VI_DIVOT;
+ }
+ if (viFeatures & OS_VI_DIVOT_OFF) {
+ ctrl &= ~OS_VI_DIVOT;
+ }
+ viMode->customViMode.comRegs.ctrl = ctrl;
+}
+
+/**
+ * Updates the custom VI mode with controller input and any edits made with the REG editor
+ * (through R_VI_MODE_EDIT_* entries)
+ */
+void ViMode_Update(ViMode* viMode, Input* input) {
+ ViMode_Load(viMode);
+
+ if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) ||
+ (viMode->editState == VI_MODE_EDIT_STATE_3)) {
+ gScreenWidth = viMode->viWidth;
+ gScreenHeight = viMode->viHeight;
+
+ // Controls to reset the ViMode to defaults
+ if (CHECK_BTN_ALL(input->cur.button, BTN_START | BTN_CUP | BTN_CRIGHT)) {
+ ViMode_Init(viMode);
+ }
+
+ // Controls to adjust the screen dimensions (upper-left)
+ if (CHECK_BTN_ALL(input->cur.button, BTN_CUP)) {
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) {
+ viMode->upperAdjust--;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) {
+ viMode->upperAdjust++;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) {
+ viMode->leftAdjust--;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) {
+ viMode->leftAdjust++;
+ }
+ }
+
+ // Controls to adjust the screen dimensions (lower-right)
+ if (CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT)) {
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) {
+ viMode->lowerAdjust--;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) {
+ viMode->lowerAdjust++;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) {
+ viMode->rightAdjust--;
+ }
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) {
+ viMode->rightAdjust++;
+ }
+ }
+
+ // Controls to adjust key features
+ if (CHECK_BTN_ALL(input->cur.button, BTN_CDOWN)) {
+ if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
+ viMode->loRes = !viMode->loRes;
+ }
+ if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
+ viMode->antialiasOff = !viMode->antialiasOff;
+ }
+ if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) {
+ viMode->modeN = !viMode->modeN;
+ }
+ if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) {
+ viMode->fb16Bit = !viMode->fb16Bit;
+ }
+ }
+
+ // Clamp adjustments
+ if (viMode->editState >= VI_MODE_EDIT_STATE_2) {
+ // Allow parts of the framebuffer to possibly be offscreen by a small margin
+ if (viMode->leftAdjust < -16) {
+ viMode->leftAdjust = -16;
+ }
+ if (viMode->upperAdjust < -50) {
+ viMode->upperAdjust = -50;
+ }
+ if (viMode->rightAdjust > 16) {
+ viMode->rightAdjust = 16;
+ }
+ if (viMode->lowerAdjust > 50) {
+ viMode->lowerAdjust = 50;
+ }
+ } else {
+ // Do not allow parts of the framebuffer to end up offscreen
+ if (viMode->leftAdjust < 0) {
+ viMode->leftAdjust = 0;
+ }
+ if (viMode->upperAdjust < 0) {
+ viMode->upperAdjust = 0;
+ }
+ if (viMode->rightAdjust > 0) {
+ viMode->rightAdjust = 0;
+ }
+ if (viMode->lowerAdjust > 0) {
+ viMode->lowerAdjust = 0;
+ }
+ }
+
+ ViMode_Configure(&viMode->customViMode, OS_VI_UNK28, osTvType, viMode->loRes, viMode->antialiasOff,
+ viMode->modeN, viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust,
+ viMode->rightAdjust, viMode->upperAdjust, viMode->lowerAdjust);
+ ViMode_ConfigureFeatures(viMode, viMode->viFeatures);
+
+ if (viMode->editState == VI_MODE_EDIT_STATE_3) {
+ // Log comparison between the NTSC LAN1 mode and the custom mode
+ ViMode_LogPrint(&osViModeNtscLan1);
+ ViMode_LogPrint(&viMode->customViMode);
+ viMode->editState = VI_MODE_EDIT_STATE_2;
+ }
+ }
+
+ ViMode_Save(viMode);
+}
diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c
new file mode 100644
index 000000000..888fa19b3
--- /dev/null
+++ b/src/code/z_viscvg.c
@@ -0,0 +1,90 @@
+#include "global.h"
+
+Gfx D_801C5DD0[] = {
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | G_RM_VISCVG | G_RM_VISCVG2),
+ gsSPBranchList(D_0E000000.fillRect),
+};
+
+Gfx D_801C5DE0[] = {
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL |
+ GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM) |
+ GBL_c2(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPBranchList(D_0E000000.fillRect),
+};
+
+Gfx D_801C5DF0[] = {
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) |
+ GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPBranchList(D_0E000000.fillRect),
+};
+
+Gfx D_801C5E00[] = {
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPDisplayList(D_0E000000.fillRect),
+ gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) |
+ GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPBranchList(D_0E000000.fillRect),
+};
+
+void VisCvg_Init(struct_801F8010* this) {
+ this->type = 0;
+ this->setScissor = false;
+ this->color.r = 255;
+ this->color.g = 255;
+ this->color.b = 255;
+ this->color.a = 255;
+}
+
+void VisCvg_Destroy(struct_801F8010* this) {
+}
+
+void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) {
+ Gfx* gfx = *gfxp;
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimDepth(gfx++, -1, -1);
+
+ if (this->setScissor == true) {
+ gSPDisplayList(gfx++, D_0E000000.setScissor);
+ }
+
+ switch (this->type) {
+ case 1:
+ gSPDisplayList(gfx++, D_801C5DF0);
+ break;
+
+ case 2:
+ gDPSetColor(gfx++, G_SETPRIMCOLOR, this->color.rgba);
+ gSPDisplayList(gfx++, D_801C5E00);
+ break;
+
+ case 3:
+ gDPSetColor(gfx++, G_SETBLENDCOLOR, this->color.rgba);
+ gSPDisplayList(gfx++, D_801C5DD0);
+ break;
+
+ case 4:
+ gDPSetColor(gfx++, G_SETFOGCOLOR, this->color.rgba);
+ gSPDisplayList(gfx++, D_801C5DE0);
+ break;
+
+ default:
+ break;
+ }
+
+ gDPPipeSync(gfx++);
+ *gfxp = gfx;
+}
diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c
index 9970a1e1b..cf603f324 100644
--- a/src/code/z_viszbuf.c
+++ b/src/code/z_viszbuf.c
@@ -1,6 +1,6 @@
#include "global.h"
-#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES))
+#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES))
void VisZbuf_Init(VisZbuf* this) {
this->useRgba = false;
@@ -42,12 +42,12 @@ void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) {
gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba);
gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba);
- for (y = 0; y < (D_801FBBCE - height) + 1; y += height) {
- gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0,
+ for (y = 0; y < (gCfbHeight - height) + 1; y += height) {
+ gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, gCfbWidth, 0, 0, y, gCfbWidth - 1, (y + height) - 1, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
- gSPTextureRectangle(gfx++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10,
+ gSPTextureRectangle(gfx++, 0, y << 2, gCfbWidth << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10,
1 << 10);
}
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c
index 911e3e757..dd0785d94 100644
--- a/src/code/z_vr_box.c
+++ b/src/code/z_vr_box.c
@@ -239,7 +239,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) {
case SKYBOX_NORMAL_SKY:
osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
- if (play->envCtx.unk_10 == 0) {
+ if (play->envCtx.skybox1Index == 0) {
// Send a DMA request for the clear sky texture
size = SEGMENT_ROM_SIZE(d2_fine_static);
@@ -256,7 +256,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) {
osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
- if (play->envCtx.unk_11 == 0) {
+ if (play->envCtx.skybox2Index == 0) {
// Send a DMA request for the clear sky texture
size = SEGMENT_ROM_SIZE(d2_fine_static);
diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c
index 489f596e5..656f6cad3 100644
--- a/src/code/z_vr_box_draw.c
+++ b/src/code/z_vr_box_draw.c
@@ -23,7 +23,7 @@ void Skybox_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8
void Skybox_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z) {
OPEN_DISPS(gfxCtx);
- func_8012C6AC(gfxCtx);
+ Gfx_SetupDL40_Opa(gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->paletteStaticSegment);
gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON);
diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c
index 3ed33f45d..f8649f4fd 100644
--- a/src/libultra/flash/osFlash.c
+++ b/src/libultra/flash/osFlash.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "ultra64.h"
#include "global.h"
@@ -11,8 +10,8 @@ s32 __osFlashVersion;
UNK_TYPE1 D_801FD0FC[0x14];
typedef enum {
- FLASH_OLD,
- FLASH_NEW,
+ /* 0 */ FLASH_OLD,
+ /* 1 */ FLASH_NEW
} FlashVersion;
u32 osFlashGetAddr(u32 pageNum) {
diff --git a/src/libultra/gu/position.c b/src/libultra/gu/position.c
index 4af6dadc4..9ba9d3570 100644
--- a/src/libultra/gu/position.c
+++ b/src/libultra/gu/position.c
@@ -6,8 +6,12 @@
*/
void guPositionF(f32 mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z) {
static f32 D_80134D00 = M_PI / 180.0f;
- f32 sinr, sinp, sinh;
- f32 cosr, cosp, cosh;
+ f32 sinr;
+ f32 sinp;
+ f32 sinh;
+ f32 cosr;
+ f32 cosp;
+ f32 cosh;
rot *= D_80134D00;
pitch *= D_80134D00;
diff --git a/src/libultra/io/contpfs.c b/src/libultra/io/contpfs.c
index fd4c4e459..e6817c3d0 100644
--- a/src/libultra/io/contpfs.c
+++ b/src/libultra/io/contpfs.c
@@ -66,7 +66,8 @@ s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid) {
u8 buf[BLOCKSIZE];
u8 comp[BLOCKSIZE];
u8 mask = 0;
- s32 i, j = 0;
+ s32 i = 0;
+ s32 j = 0;
u16 index[4];
newid->repaired = 0xFFFFFFFF;
@@ -265,8 +266,6 @@ s32 __osGetId(OSPfs* pfs) {
bcopy(id, pfs->id, BLOCKSIZE);
- if (0) {}
-
pfs->version = id->version;
pfs->banks = id->banks;
diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c
index 061c01b0a..27bd0b8ed 100644
--- a/src/libultra/io/contreaddata.c
+++ b/src/libultra/io/contreaddata.c
@@ -43,11 +43,11 @@ void __osPackReadData() {
int i;
ptr = (u8*)__osContPifRam.ramarray;
- for (i = 0; i < 0xF; i++) {
+ for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) {
__osContPifRam.ramarray[i] = 0;
}
- __osContPifRam.status = 1;
+ __osContPifRam.status = CONT_CMD_READ_BUTTON;
readformat.dummy = 255;
readformat.txsize = 1;
readformat.rxsize = 4;
diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c
index 245183280..19be9281a 100644
--- a/src/libultra/io/controller.c
+++ b/src/libultra/io/controller.c
@@ -74,11 +74,11 @@ void __osPackRequestData(u8 poll) {
__OSContRequestHeader requestHeader;
s32 i;
- for (i = 0; i < 0xF; i++) {
+ for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) {
__osContPifRam.ramarray[i] = 0;
}
- __osContPifRam.status = 1;
+ __osContPifRam.status = CONT_CMD_READ_BUTTON;
ptr = (u8*)__osContPifRam.ramarray;
requestHeader.align = 255;
requestHeader.txsize = 1;
diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c
index c7c09f659..ccccf68ae 100644
--- a/src/libultra/io/osViModeMpalLan1.c
+++ b/src/libultra/io/osViModeMpalLan1.c
@@ -1,34 +1,35 @@
#include "global.h"
+#include "ultra64/viint.h"
OSViMode osViModeMpalLan1 = {
OS_VI_MPAL_LAN1, // type
{
// comRegs
- 0x311E, // ctrl
- SCREEN_WIDTH, // width
- 0x4651E39, // burst
- 0x20D, // vSync
- 0x40C11, // hSync
- 0xC190C1A, // leap
- 0x6C02EC, // hStart
- 0x200, // xScale
- 0, // vCurrent
+ 0x311E, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
- 0x280, // origin
- 0x400, // yScale
- 0x2501FF, // vStart
- 0xE0204, // vBurst
- 2, // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
},
{
// [1]
- 0x280, // origin
- 0x400, // yScale
- 0x2501FF, // vStart
- 0xE0204, // vBurst
- 2, // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
} },
};
diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c
index ac0a1fa2b..5f88f4e94 100644
--- a/src/libultra/io/osViModeNtscHpf1.c
+++ b/src/libultra/io/osViModeNtscHpf1.c
@@ -1,34 +1,35 @@
#include "global.h"
+#include "ultra64/viint.h"
OSViMode osViModeNtscHpf1 = {
OS_VI_NTSC_HPF1, // type
{
// comRegs
- 0x324E, // ctrl
- 640, // width
- 0x3E52239, // burst
- 0x20C, // vSync
- 0xC15, // hSync
- 0xC150C15, // leap
- 0x6C02EC, // hStart
- 0x400, // xScale
- 0, // vCurrent
+ 0x324E, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // 0x3E52239, // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // 0x6C02EC, // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
- 0x500, // origin
- 0x2000800, // yScale
- 0x2301FD, // vStart
- 0xE0204, // vBurst
- 2, // vIntr
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // 0x2000800, // yScale
+ START(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
},
{
// [1]
- 0xA00, // origin
- 0x2000800, // yScale
- 0x2501FF, // vStart
- 0xE0204, // vBurst
- 2 // vIntr
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // 0x2000800, // yScale
+ START(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2) // vIntr
} },
};
diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c
index 632d763f4..86eb473b7 100644
--- a/src/libultra/io/osViModeNtscLan1.c
+++ b/src/libultra/io/osViModeNtscLan1.c
@@ -1,34 +1,35 @@
#include "global.h"
+#include "ultra64/viint.h"
OSViMode osViModeNtscLan1 = {
OS_VI_NTSC_LAN1, // type
{
// comRegs
- 0x311E, // ctrl
- SCREEN_WIDTH, // width
- 0x3E52239, // burst
- 0x20D, // vSync
- 0xC15, // hSync
- 0xC150C15, // leap
- 0x6C02EC, // hStart
- 0x200, // xScale
- 0, // vCurrent
+ 0x311E, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
- 0x280, // origin
- 0x400, // yScale
- 0x2501FF, // vStart
- 0xE0204, // vBurst
- 2, // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
},
{
// [1]
- 0x280, // origin
- 0x400, // yScale
- 0x2501FF, // vStart
- 0xE0204, // vBurst
- 2, // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
} },
};
diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c
index 174cbf142..f875bb731 100644
--- a/src/libultra/io/osViModePalLan1.c
+++ b/src/libultra/io/osViModePalLan1.c
@@ -1,34 +1,35 @@
#include "global.h"
+#include "ultra64/viint.h"
OSViMode osViModePalLan1 = {
OS_VI_PAL_LAN1, // type
{
// comRegs
- 0x311E, // ctrl
- SCREEN_WIDTH, // width
- 0x4541E3A, // burst
- 0x271, // vSync
- 0x170C69, // hSync
- 0xC6F0C6D, // leap
- 0x800300, // hStart
- 0x200, // xScale
- 0, // vCurrent
+ 0x311E, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
- 0x280, // origin
- 0x400, // yScale
- 0x5F0239, // vStart
- 0x9026B, // vBurst
- 2, // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
},
{
// [1]
- 0x280, // origin
- 0x400, // yScale
- 0x5F0239, // vStart
- 0x9026B, // vBurst
- 2 // vIntr
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ START(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
} },
};
diff --git a/src/libultra/io/pfschecker.c b/src/libultra/io/pfschecker.c
index bf885a1a4..d3a635768 100644
--- a/src/libultra/io/pfschecker.c
+++ b/src/libultra/io/pfschecker.c
@@ -18,8 +18,10 @@ s32 osPfsChecker(OSPfs* pfs) {
__OSInodeUnit nextNodeInFile[16];
__OSInodeCache cache;
s32 fixed = 0;
- u8 bank, prevBank = 254;
- s32 cc, cl;
+ u8 bank = 254;
+ u8 prevBank = 254;
+ s32 cc;
+ s32 cl;
s32 offset;
ret = __osCheckId(pfs);
diff --git a/src/libultra/io/pfsfilestate.c b/src/libultra/io/pfsfilestate.c
index a555199fc..f06c8d937 100644
--- a/src/libultra/io/pfsfilestate.c
+++ b/src/libultra/io/pfsfilestate.c
@@ -34,7 +34,7 @@ s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state) {
return ret;
}
- if (dir.company_code == 0 || dir.game_code == 0) {
+ if ((dir.company_code == 0) || (dir.game_code == 0)) {
return PFS_ERR_INVALID;
}
diff --git a/src/libultra/libc/ldiv.c b/src/libultra/libc/ldiv.c
index 21fe84e80..9f9d75031 100644
--- a/src/libultra/libc/ldiv.c
+++ b/src/libultra/libc/ldiv.c
@@ -5,7 +5,7 @@ ldiv_t ldiv(long numer, long denom) {
val.quot = numer / denom;
val.rem = numer - denom * val.quot;
- if (val.quot < 0 && val.rem > 0) {
+ if ((val.quot < 0) && (val.rem > 0)) {
val.quot++;
val.rem -= denom;
}
@@ -18,7 +18,7 @@ lldiv_t lldiv(long long numer, long long denom) {
val.quot = numer / denom;
val.rem = numer - denom * val.quot;
- if (val.quot < 0 && val.rem > 0) {
+ if ((val.quot < 0) && (val.rem > 0)) {
val.quot++;
val.rem -= denom;
}
diff --git a/src/libultra/libc/ll.c b/src/libultra/libc/ll.c
index 399d2caf4..0fd42d1ed 100644
--- a/src/libultra/libc/ll.c
+++ b/src/libultra/libc/ll.c
@@ -36,7 +36,7 @@ void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder,
long long __ll_mod(long long left, long long right) {
long long rem = left % right;
- if ((rem < 0 && right > 0) || (rem > 0 && right < 0)) {
+ if (((rem < 0) && (right > 0)) || ((rem > 0) && (right < 0))) {
rem += right;
}
return rem;
diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c
index 776191227..4fabb4c4d 100644
--- a/src/libultra/os/initialize.c
+++ b/src/libultra/os/initialize.c
@@ -3,11 +3,11 @@
#define COLD_RESET 0
typedef struct {
- /* 0x0 */ u32 ins_00; // lui k0, 0x8000
- /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0
- /* 0x8 */ u32 ins_08; // jr k0 ; __osException
- /* 0xC */ u32 ins_0C; // nop
-} struct_exceptionPreamble;
+ /* 0x0 */ u32 ins_00; // lui k0, 0x8000
+ /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0
+ /* 0x8 */ u32 ins_08; // jr k0 ; __osException
+ /* 0xC */ u32 ins_0C; // nop
+} struct_exceptionPreamble; // size = 0x10
u64 osClockRate = OS_CLOCK_RATE;
s32 osViClock = VI_NTSC_CLOCK;
diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c
index 8be2ff9e2..26e837fcf 100644
--- a/src/libultra/os/seteventmesg.c
+++ b/src/libultra/os/seteventmesg.c
@@ -16,7 +16,7 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) {
es->message = m;
if (e == 14) {
- if (__osShutdown != 0 && D_80097F10 == 0) {
+ if ((__osShutdown != 0) && (D_80097F10 == 0)) {
osSendMesg(mq, m, OS_MESG_NOBLOCK);
}
D_80097F10 = 1;
diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c
index 460d0951c..66c058396 100644
--- a/src/libultra/rmon/xldtob.c
+++ b/src/libultra/rmon/xldtob.c
@@ -61,7 +61,7 @@ void _Ldtob(_Pft* args, u8 type) {
if (args->prec < 0) {
args->prec = 6;
- } else if (args->prec == 0 && (type == 'g' || type == 'G')) {
+ } else if ((args->prec == 0) && ((type == 'g') || (type == 'G'))) {
args->prec = 1;
}
err = _Ldunscale(&exp, (_Pft*)args);
@@ -101,13 +101,13 @@ void _Ldtob(_Pft* args, u8 type) {
gen = 0x13;
}
*ptr++ = '0';
- while (gen > 0 && 0 < val) {
+ while ((gen > 0) && (0 < val)) {
lo = val;
if ((gen -= 8) > 0) {
val = (val - lo) * 1.0e8;
}
ptr = ptr + 8;
- for (j = 8; lo > 0 && --j >= 0;) {
+ for (j = 8; (lo > 0) && (--j >= 0);) {
qr = ldiv(lo, 10);
*--ptr = qr.rem + '0';
lo = qr.quot;
@@ -124,12 +124,12 @@ void _Ldtob(_Pft* args, u8 type) {
--gen, --exp;
}
- nsig = ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)) + args->prec;
+ nsig = ((type == 'f') ? exp + 1 : (((type == 'e') || (type == 'E')) ? 1 : 0)) + args->prec;
if (gen < nsig) {
nsig = gen;
}
if (nsig > 0) {
- if (nsig < gen && ptr[nsig] > '4') {
+ if ((nsig < gen) && (ptr[nsig] > '4')) {
drop = '9';
} else {
drop = '0';
@@ -178,7 +178,7 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) {
p = (u8*)"0";
}
- if (code == 'f' || ((code == 'g' || code == 'G') && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */
+ if ((code == 'f') || (((code == 'g') || (code == 'G')) && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */
++xexp; /* change to leading digit count */
if (code != 'f') { /* fixup for 'g' */
if (!(px->flags & FLAGS_HASH) && nsig < px->prec) {
@@ -225,8 +225,8 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) {
px->n1 += nsig;
px->nz1 = px->prec - nsig;
}
- } else { /* 'e' format */
- if (code == 'g' || code == 'G') { /* fixup for 'g' */
+ } else { /* 'e' format */
+ if ((code == 'g') || (code == 'G')) { /* fixup for 'g' */
if (nsig < px->prec) {
px->prec = nsig;
}
diff --git a/src/libultra/rmon/xlitob.c b/src/libultra/rmon/xlitob.c
index f200e01a4..6c53ee094 100644
--- a/src/libultra/rmon/xlitob.c
+++ b/src/libultra/rmon/xlitob.c
@@ -27,13 +27,13 @@ void _Litob(_Pft* args, u8 type) {
num = -num;
}
- if (num != 0 || args->prec != 0) {
+ if ((num != 0) || (args->prec != 0)) {
buff[--idx] = numMap[num % base];
}
args->v.ll = num / base;
- while (args->v.ll > 0 && idx > 0) {
+ while ((args->v.ll > 0) && (idx > 0)) {
quotrem = lldiv(args->v.ll, base);
args->v.ll = quotrem.quot;
buff[--idx] = numMap[quotrem.rem];
@@ -47,7 +47,7 @@ void _Litob(_Pft* args, u8 type) {
args->nz0 = args->prec - args->n1;
}
- if (args->prec < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) {
+ if ((args->prec < 0) && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) {
idx = args->width - args->n0 - args->nz0 - args->n1;
if (idx > 0) {
args->nz0 += idx;
diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c
index ddb83652d..6caac436f 100644
--- a/src/libultra/rmon/xprintf.c
+++ b/src/libultra/rmon/xprintf.c
@@ -42,7 +42,7 @@ int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) {
unsigned char ac[0x20];
s = fmt;
- while ((c = *s) != 0 && c != '%') {
+ while (((c = *s) != 0) && (c != '%')) {
s++;
}
_PROUT((char*)fmt, s - fmt);
@@ -206,7 +206,7 @@ void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac) {
case 's':
px->s = va_arg(*pap, char*);
px->n1 = strlen(px->s);
- if (px->prec >= 0 && px->n1 > px->prec) {
+ if ((px->prec >= 0) && (px->n1 > px->prec)) {
px->n1 = px->prec;
}
break;
diff --git a/src/libultra/voice/voicecheckresult.c b/src/libultra/voice/voicecheckresult.c
index 44fb69be5..7d1e5c0a5 100644
--- a/src/libultra/voice/voicecheckresult.c
+++ b/src/libultra/voice/voicecheckresult.c
@@ -1,3 +1,29 @@
-#include "global.h"
+/**
+ * File: voicecheckresult.c
+ */
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecheckresult/__osVoiceCheckResult.s")
+s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status) {
+ s32 errorCode = __osVoiceGetStatus(hd->mq, hd->channel, status);
+ u8 data[2];
+
+ if (errorCode == 0) {
+ if (*status & 1) {
+ errorCode = CONT_ERR_VOICE_NO_RESPONSE;
+ } else {
+ errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data);
+ if (errorCode == 0) {
+ hd->status = data[0] & 7;
+
+ if (data[0] & 0x40) {
+ errorCode = CONT_ERR_VOICE_NO_RESPONSE;
+ } else {
+ errorCode = data[1] << 8;
+ }
+ }
+ }
+ }
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecheckword.c b/src/libultra/voice/voicecheckword.c
index 8b5ac0dfb..1a2695b51 100644
--- a/src/libultra/voice/voicecheckword.c
+++ b/src/libultra/voice/voicecheckword.c
@@ -1,3 +1,107 @@
-#include "global.h"
+/**
+ * File: voicecheckwork.c
+ *
+ * Checks whether or not a word can be registered in the dictionary
+ */
+#include "io/controller.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecheckword/osVoiceCheckWord.s")
+// TODO: SJIS support
+s32 osVoiceCheckWord(u8* word) {
+ s32 i;
+ s32 errorCode = 0;
+ u16 curSyllable;
+ u16 prevSyllable = 0;
+
+ for (i = 0; word[i] != 0; i += 2) {
+ curSyllable = (word[i] << 8) + word[i + 1];
+ if (((curSyllable != 0x815B) && (curSyllable < 0x829F)) ||
+ ((curSyllable >= 0x82F2) && (curSyllable < 0x8340)) || (curSyllable == 0x837F) || (curSyllable >= 0x8397)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if ((i == 0) && ((curSyllable == 0x815B) || (curSyllable == 0x82F1) || (curSyllable == 0x82C1) ||
+ (curSyllable == 0x82EC) || (curSyllable == 0x8393) || (curSyllable == 0x8362) ||
+ (curSyllable == 0x838E) || (curSyllable == 0x8395) || (curSyllable == 0x8396))) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x829F) || (curSyllable == 0x8340)) && (prevSyllable != 0x82D3) &&
+ (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82A1) || (curSyllable == 0x8342)) && (prevSyllable != 0x82A4) &&
+ (prevSyllable != 0x82C4) && (prevSyllable != 0x82C5) && (prevSyllable != 0x82D3) &&
+ (prevSyllable != 0x8345) && (prevSyllable != 0x8365) && (prevSyllable != 0x8366) &&
+ (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82A3) || (curSyllable == 0x8344)) && (prevSyllable != 0x82C6) &&
+ (prevSyllable != 0x82C7) && (prevSyllable != 0x82D3) && (prevSyllable != 0x8367) &&
+ (prevSyllable != 0x8368) && (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82A5) || (curSyllable == 0x8346)) && (prevSyllable != 0x82A4) &&
+ (prevSyllable != 0x82B5) && (prevSyllable != 0x82B6) && (prevSyllable != 0x82BF) &&
+ (prevSyllable != 0x82C0) && (prevSyllable != 0x82C2) && (prevSyllable != 0x82D3) &&
+ (prevSyllable != 0x8345) && (prevSyllable != 0x8356) && (prevSyllable != 0x8357) &&
+ (prevSyllable != 0x8360) && (prevSyllable != 0x8361) && (prevSyllable != 0x8363) &&
+ (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82A7) || (curSyllable == 0x8348)) && (prevSyllable != 0x82A4) &&
+ (prevSyllable != 0x82D3) && (prevSyllable != 0x8345) && (prevSyllable != 0x8374) &&
+ (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82E1) || (curSyllable == 0x82E3) || (curSyllable == 0x82E5) ||
+ (curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387)) &&
+ (prevSyllable != 0x82AB) && (prevSyllable != 0x82B5) && (prevSyllable != 0x82BF) &&
+ (prevSyllable != 0x82C9) && (prevSyllable != 0x82D0) && (prevSyllable != 0x82DD) &&
+ (prevSyllable != 0x82E8) && (prevSyllable != 0x82AC) && (prevSyllable != 0x82B6) &&
+ (prevSyllable != 0x82C0) && (prevSyllable != 0x82D1) && (prevSyllable != 0x82D2) &&
+ (prevSyllable != 0x834C) && (prevSyllable != 0x8356) && (prevSyllable != 0x8360) &&
+ (prevSyllable != 0x836A) && (prevSyllable != 0x8371) && (prevSyllable != 0x837E) &&
+ (prevSyllable != 0x838A) && (prevSyllable != 0x834D) && (prevSyllable != 0x8357) &&
+ (prevSyllable != 0x8361) && (prevSyllable != 0x8372) && (prevSyllable != 0x8373) &&
+ (prevSyllable != 0x8394)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if ((curSyllable == 0x815B) && ((prevSyllable == 0x82F1) || (prevSyllable == 0x82C1) ||
+ (prevSyllable == 0x8393) || (prevSyllable == 0x8362))) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((curSyllable == 0x82F1) || (curSyllable == 0x8393)) &&
+ ((prevSyllable == 0x82F1) || (prevSyllable == 0x8393))) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (((prevSyllable == 0x82C1) || (prevSyllable == 0x8362)) &&
+ ((curSyllable == 0x815B) || (curSyllable == 0x82A0) || (curSyllable == 0x82A2) ||
+ (curSyllable == 0x82A4) || (curSyllable == 0x82A6) || (curSyllable == 0x82A8) ||
+ (curSyllable == 0x82C8) || (curSyllable == 0x82C9) || (curSyllable == 0x82CA) ||
+ (curSyllable == 0x82CB) || (curSyllable == 0x82CC) || (curSyllable == 0x82DC) ||
+ (curSyllable == 0x82DD) || (curSyllable == 0x82DE) || (curSyllable == 0x82DF) ||
+ (curSyllable == 0x82E0) || (curSyllable == 0x82E2) || (curSyllable == 0x82E4) ||
+ (curSyllable == 0x82E6) || (curSyllable == 0x82E7) || (curSyllable == 0x82E8) ||
+ (curSyllable == 0x82E9) || (curSyllable == 0x82EA) || (curSyllable == 0x82EB) ||
+ (curSyllable == 0x82ED) || (curSyllable == 0x82EE) || (curSyllable == 0x82EF) ||
+ (curSyllable == 0x82F0) || (curSyllable == 0x82F1) || (curSyllable == 0x829F) ||
+ (curSyllable == 0x82A1) || (curSyllable == 0x82A3) || (curSyllable == 0x82A5) ||
+ (curSyllable == 0x82A7) || (curSyllable == 0x82E1) || (curSyllable == 0x82E3) ||
+ (curSyllable == 0x82E5) || (curSyllable == 0x82C1) || (curSyllable == 0x82EC) ||
+ (curSyllable == 0x8341) || (curSyllable == 0x8343) || (curSyllable == 0x8345) ||
+ (curSyllable == 0x8347) || (curSyllable == 0x8349) || (curSyllable == 0x8369) ||
+ (curSyllable == 0x836A) || (curSyllable == 0x836B) || (curSyllable == 0x836C) ||
+ (curSyllable == 0x836D) || (curSyllable == 0x837D) || (curSyllable == 0x837E) ||
+ (curSyllable == 0x8380) || (curSyllable == 0x8381) || (curSyllable == 0x8382) ||
+ (curSyllable == 0x8384) || (curSyllable == 0x8386) || (curSyllable == 0x8388) ||
+ (curSyllable == 0x8389) || (curSyllable == 0x838A) || (curSyllable == 0x838B) ||
+ (curSyllable == 0x838C) || (curSyllable == 0x838D) || (curSyllable == 0x838F) ||
+ (curSyllable == 0x8390) || (curSyllable == 0x8391) || (curSyllable == 0x8392) ||
+ (curSyllable == 0x8393) || (curSyllable == 0x8340) || (curSyllable == 0x8342) ||
+ (curSyllable == 0x8344) || (curSyllable == 0x8346) || (curSyllable == 0x8348) ||
+ (curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387) ||
+ (curSyllable == 0x8362) || (curSyllable == 0x838E))) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ }
+
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ prevSyllable = curSyllable;
+ }
+
+ if ((curSyllable == 0x82C1) || (curSyllable == 0x8362)) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecleardictionary.c b/src/libultra/voice/voicecleardictionary.c
index 29766bb2a..e474bc2fd 100644
--- a/src/libultra/voice/voicecleardictionary.c
+++ b/src/libultra/voice/voicecleardictionary.c
@@ -1,3 +1,51 @@
-#include "global.h"
+/**
+ * File: voicecleardictionary.c
+ *
+ * Initializes Voice Recognition System word registration dictionary.
+ *
+ * The dictionary is initialized so that the specified "numWords" can be
+ * registered in the dictionary. 1-255 words can be registered in the dictionary.
+ *
+ * Words cannot be registered with the osVoiceSetWord before the dictionary
+ * is initialized with the osVoiceClearDictionary function
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecleardictionary/osVoiceClearDictionary.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+
+s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords) {
+ s32 errorCode;
+ u8 status;
+ u8 data[4];
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ /**
+ * data[0] = 2
+ * data[1] = 0
+ * data[2] = numWords
+ * data[3] = 0
+ */
+ *(u32*)data = 0x2000000;
+ data[2] = numWords;
+
+ errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ errorCode = __osVoiceCheckResult(hd, &status);
+ if (errorCode & 0xFF00) {
+ errorCode = CONT_ERR_INVALID;
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c
index 38350ee5f..1477e570b 100644
--- a/src/libultra/voice/voicecontread2.c
+++ b/src/libultra/voice/voicecontread2.c
@@ -1,3 +1,74 @@
-#include "global.h"
+/**
+ * File: voicecontread2.c
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontread2/__osVoiceContRead2.s")
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "variables.h"
+
+#define READ2FORMAT(ptr) ((__OSVoiceRead2Format*)(ptr))
+
+s32 __osVoiceContRead2(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[2]) {
+ s32 errorCode;
+ u8 status;
+ u8* ptr;
+ s32 retryCount = 2;
+ s32 i;
+
+ __osSiGetAccess();
+
+ do {
+ ptr = (u8*)&__osPfsPifRam.ramarray;
+
+ if ((__osContLastPoll != CONT_CMD_READ2_VOICE) || (channel != __osPfsLastChannel)) {
+ __osContLastPoll = CONT_CMD_READ2_VOICE;
+ __osPfsLastChannel = channel;
+
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
+
+ __osPfsPifRam.status = CONT_CMD_EXE;
+
+ READ2FORMAT(ptr)->dummy = CONT_CMD_NOP;
+ READ2FORMAT(ptr)->txsize = CONT_CMD_READ2_VOICE_TX;
+ READ2FORMAT(ptr)->rxsize = CONT_CMD_READ2_VOICE_RX;
+ READ2FORMAT(ptr)->cmd = CONT_CMD_READ2_VOICE;
+ READ2FORMAT(ptr)->datacrc = 0xFF;
+
+ ptr[sizeof(__OSVoiceRead2Format)] = CONT_CMD_END;
+ } else {
+ ptr += channel;
+ }
+
+ READ2FORMAT(ptr)->addrh = address >> 3;
+ READ2FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address);
+
+ __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+ __osSiRawStartDma(OS_READ, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+
+ errorCode = CHNL_ERR(*READ2FORMAT(ptr));
+
+ if (errorCode == 0) {
+ if (__osVoiceContDataCrc(READ2FORMAT(ptr)->data, ARRAY_COUNT(READ2FORMAT(ptr)->data)) !=
+ READ2FORMAT(ptr)->datacrc) {
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ break;
+ }
+
+ errorCode = CONT_ERR_CONTRFAIL;
+ } else {
+ bcopy(READ2FORMAT(ptr)->data, dst, ARRAY_COUNT(READ2FORMAT(ptr)->data));
+ }
+ } else {
+ errorCode = CONT_ERR_NO_CONTROLLER;
+ }
+
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
+
+ __osSiRelAccess();
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c
index 38f3fe2f0..83d0fdf2e 100644
--- a/src/libultra/voice/voicecontread36.c
+++ b/src/libultra/voice/voicecontread36.c
@@ -1,3 +1,74 @@
-#include "global.h"
+/**
+ * File: voicecontread36.c
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontread36/__osVoiceContRead36.s")
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "variables.h"
+
+#define READ36FORMAT(ptr) ((__OSVoiceRead36Format*)(ptr))
+
+s32 __osVoiceContRead36(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[36]) {
+ s32 errorCode;
+ u8 status;
+ u8* ptr;
+ s32 retryCount = 2;
+ s32 i;
+
+ __osSiGetAccess();
+
+ do {
+ ptr = (u8*)&__osPfsPifRam.ramarray;
+
+ if ((__osContLastPoll != CONT_CMD_READ36_VOICE) || (channel != __osPfsLastChannel)) {
+ __osContLastPoll = CONT_CMD_READ36_VOICE;
+ __osPfsLastChannel = channel;
+
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
+
+ __osPfsPifRam.status = CONT_CMD_EXE;
+
+ READ36FORMAT(ptr)->dummy = CONT_CMD_NOP;
+ READ36FORMAT(ptr)->txsize = CONT_CMD_READ36_VOICE_TX;
+ READ36FORMAT(ptr)->rxsize = CONT_CMD_READ36_VOICE_RX;
+ READ36FORMAT(ptr)->cmd = CONT_CMD_READ36_VOICE;
+ READ36FORMAT(ptr)->datacrc = 0xFF;
+
+ ptr[sizeof(__OSVoiceRead36Format)] = CONT_CMD_END;
+ } else {
+ ptr += channel;
+ }
+
+ READ36FORMAT(ptr)->addrh = address >> 3;
+ READ36FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address);
+
+ __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+ __osSiRawStartDma(OS_READ, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+
+ errorCode = CHNL_ERR(*READ36FORMAT(ptr));
+
+ if (errorCode == 0) {
+ if (__osVoiceContDataCrc(READ36FORMAT(ptr)->data, ARRAY_COUNT(READ36FORMAT(ptr)->data)) !=
+ READ36FORMAT(ptr)->datacrc) {
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ break;
+ }
+
+ errorCode = CONT_ERR_CONTRFAIL;
+ } else {
+ bcopy(READ36FORMAT(ptr)->data, dst, ARRAY_COUNT(READ36FORMAT(ptr)->data));
+ }
+ } else {
+ errorCode = CONT_ERR_NO_CONTROLLER;
+ }
+
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
+
+ __osSiRelAccess();
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecontrolgain.c b/src/libultra/voice/voicecontrolgain.c
index d7ec8ef69..61cccde70 100644
--- a/src/libultra/voice/voicecontrolgain.c
+++ b/src/libultra/voice/voicecontrolgain.c
@@ -1,5 +1,41 @@
-#include "global.h"
+/**
+ * File: voicecontrolgain.c
+ *
+ * Adjusts the input gain of the Voice Recognition System
+ */
-u8 D_80098180[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 };
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+#include "macros.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontrolgain/osVoiceControlGain.s")
+u8 sDigitalTable[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 };
+
+s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital) {
+ s32 errorCode;
+ u8 cmd;
+
+ if (analog == 0) {
+ cmd = 0x18;
+ } else {
+ cmd = 0x98;
+ }
+
+ errorCode = __osVoiceSetADConverter(hd->mq, hd->channel, cmd);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if ((digital < ARRAY_COUNT(sDigitalTable)) && (digital >= 0)) {
+ cmd = sDigitalTable[digital] + 2;
+ } else {
+ return CONT_ERR_INVALID;
+ }
+
+ errorCode = __osVoiceSetADConverter(hd->mq, hd->channel, cmd);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c
index 5ca3560ed..cc3af385e 100644
--- a/src/libultra/voice/voicecontwrite20.c
+++ b/src/libultra/voice/voicecontwrite20.c
@@ -1,3 +1,75 @@
-#include "global.h"
+/**
+ * File: voicecontwrite20.c
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontwrite20/__osVoiceContWrite20.s")
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "variables.h"
+
+#define WRITE20FORMAT(ptr) ((__OSVoiceWrite20Format*)(ptr))
+
+s32 __osVoiceContWrite20(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[20]) {
+ s32 errorCode;
+ u8 status;
+ u8* ptr;
+ s32 retryCount = 2;
+ s32 i;
+ u8 crc;
+
+ __osSiGetAccess();
+
+ do {
+ ptr = (u8*)&__osPfsPifRam.ramarray;
+
+ if ((__osContLastPoll != CONT_CMD_WRITE20_VOICE) || (channel != __osPfsLastChannel)) {
+ __osContLastPoll = CONT_CMD_WRITE20_VOICE;
+ __osPfsLastChannel = channel;
+
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
+
+ __osPfsPifRam.status = CONT_CMD_EXE;
+
+ WRITE20FORMAT(ptr)->dummy = CONT_CMD_NOP;
+ WRITE20FORMAT(ptr)->txsize = CONT_CMD_WRITE20_VOICE_TX;
+ WRITE20FORMAT(ptr)->rxsize = CONT_CMD_WRITE20_VOICE_RX;
+ WRITE20FORMAT(ptr)->cmd = CONT_CMD_WRITE20_VOICE;
+ WRITE20FORMAT(ptr)->datacrc = 0xFF;
+
+ ptr[sizeof(__OSVoiceWrite20Format)] = CONT_CMD_END;
+ } else {
+ ptr += channel;
+ }
+
+ WRITE20FORMAT(ptr)->addrh = address >> 3;
+ WRITE20FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address);
+
+ bcopy(dst, WRITE20FORMAT(ptr)->data, ARRAY_COUNT(WRITE20FORMAT(ptr)->data));
+
+ __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
+ crc = __osVoiceContDataCrc(dst, ARRAY_COUNT(WRITE20FORMAT(ptr)->data));
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+ __osSiRawStartDma(OS_READ, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+
+ errorCode = CHNL_ERR(*WRITE20FORMAT(ptr));
+
+ if (errorCode == 0) {
+ if (crc != WRITE20FORMAT(ptr)->datacrc) {
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ break;
+ }
+
+ errorCode = CONT_ERR_CONTRFAIL;
+ }
+ } else {
+ errorCode = CONT_ERR_NO_CONTROLLER;
+ }
+
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
+
+ __osSiRelAccess();
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c
index c28e2d762..06239219a 100644
--- a/src/libultra/voice/voicecontwrite4.c
+++ b/src/libultra/voice/voicecontwrite4.c
@@ -1,3 +1,75 @@
-#include "global.h"
+/**
+ * File: voicecontwrite4.c
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontwrite4/__osVoiceContWrite4.s")
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "variables.h"
+
+#define WRITE4FORMAT(ptr) ((__OSVoiceWrite4Format*)(ptr))
+
+s32 __osVoiceContWrite4(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[4]) {
+ s32 errorCode;
+ u8 status;
+ u8* ptr;
+ s32 retryCount = 2;
+ s32 i;
+ u8 crc;
+
+ __osSiGetAccess();
+
+ do {
+ ptr = (u8*)&__osPfsPifRam.ramarray;
+
+ if ((__osContLastPoll != CONT_CMD_WRITE4_VOICE) || (channel != __osPfsLastChannel)) {
+ __osContLastPoll = CONT_CMD_WRITE4_VOICE;
+ __osPfsLastChannel = channel;
+
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
+
+ __osPfsPifRam.status = CONT_CMD_EXE;
+
+ WRITE4FORMAT(ptr)->dummy = CONT_CMD_NOP;
+ WRITE4FORMAT(ptr)->txsize = CONT_CMD_WRITE4_VOICE_TX;
+ WRITE4FORMAT(ptr)->rxsize = CONT_CMD_WRITE4_VOICE_RX;
+ WRITE4FORMAT(ptr)->cmd = CONT_CMD_WRITE4_VOICE;
+ WRITE4FORMAT(ptr)->datacrc = 0xFF;
+
+ ptr[sizeof(__OSVoiceWrite4Format)] = CONT_CMD_END;
+ } else {
+ ptr += channel;
+ }
+
+ WRITE4FORMAT(ptr)->addrh = address >> 3;
+ WRITE4FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address);
+
+ bcopy(dst, WRITE4FORMAT(ptr)->data, ARRAY_COUNT(WRITE4FORMAT(ptr)->data));
+
+ __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
+ crc = __osVoiceContDataCrc(dst, ARRAY_COUNT(WRITE4FORMAT(ptr)->data));
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+ __osSiRawStartDma(OS_READ, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+
+ errorCode = CHNL_ERR(*WRITE4FORMAT(ptr));
+
+ if (errorCode == 0) {
+ if (crc != WRITE4FORMAT(ptr)->datacrc) {
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ break;
+ }
+
+ errorCode = CONT_ERR_CONTRFAIL;
+ }
+ } else {
+ errorCode = CONT_ERR_NO_CONTROLLER;
+ }
+
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
+
+ __osSiRelAccess();
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicecrc.c b/src/libultra/voice/voicecrc.c
index 35b7b8656..36ffc4373 100644
--- a/src/libultra/voice/voicecrc.c
+++ b/src/libultra/voice/voicecrc.c
@@ -4,7 +4,7 @@
*
* For general information about CRC, see the crc.c file (that's a lot of c's!).
*/
-#include "global.h"
+#include "libc/stddef.h"
#define VOICE_CRC_LENGTH 8
#define VOICE_CRC_GENERATOR 0x85
diff --git a/src/libultra/voice/voicegetreaddata.c b/src/libultra/voice/voicegetreaddata.c
index 5940a1f8b..d271f71c7 100644
--- a/src/libultra/voice/voicegetreaddata.c
+++ b/src/libultra/voice/voicegetreaddata.c
@@ -1,3 +1,125 @@
-#include "global.h"
+/**
+ * File: voicegetreaddata.c
+ *
+ * Gets voice recognition result from the Voice Recognition System
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicegetreaddata/osVoiceGetReadData.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+
+s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result) {
+ static u8 sHandleStatus;
+ s32 errorCode;
+ s32 i;
+ u8 status;
+ u8 data[36];
+
+ switch (hd->mode) {
+ case VOICE_HANDLE_MODE_1:
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 1) {
+ return CONT_ERR_NOT_READY;
+ }
+
+ errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ sHandleStatus = data[0] & 7;
+ hd->status = sHandleStatus;
+ if ((sHandleStatus != 0) && (sHandleStatus != 7)) {
+ return CONT_ERR_NOT_READY;
+ }
+ // fallthrough
+ case VOICE_HANDLE_MODE_2:
+ hd->mode = VOICE_HANDLE_MODE_2;
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ *(u32*)data = 0x600;
+ errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+ // fallthrough
+ case VOICE_HANDLE_MODE_3:
+ hd->mode = VOICE_HANDLE_MODE_3;
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 1) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ errorCode = __osVoiceContRead36(hd->mq, hd->channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ result->warning = data[4] + (data[5] << 8);
+ result->answerNum = data[6];
+ result->voiceLevel = data[8] + (data[9] << 8);
+ result->voiceRelLevel = data[10] + (data[11] << 8);
+ result->voiceTime = data[12] + (data[13] << 8);
+
+ for (i = 0; i < 5; i++) {
+ result->answer[i] = data[14 + (i << 2)] + (data[15 + (i << 2)] << 8);
+ result->distance[i] = data[16 + (i << 2)] + (data[17 + (i << 2)] << 8);
+ }
+
+ if (result->answer[0] == 0x7FFF) {
+ result->answerNum = 0;
+ }
+
+ hd->status = data[34] & 7;
+ if ((sHandleStatus == 0) || (hd->status == 0)) {
+ break;
+ }
+ // fallthrough
+ case VOICE_HANDLE_MODE_4:
+ hd->mode = VOICE_HANDLE_MODE_4;
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 1) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ hd->status = data[0] & 7;
+ if (data[0] & 7) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ break;
+
+ default:
+ return CONT_ERR_INVALID;
+ }
+
+ hd->mode = VOICE_HANDLE_MODE_0;
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c
index a3608277f..444ae6233 100644
--- a/src/libultra/voice/voicegetstatus.c
+++ b/src/libultra/voice/voicegetstatus.c
@@ -1,56 +1,62 @@
-#include "global.h"
-#include "io/controller.h"
+/**
+ * File: voicegetstatus.c
+ */
-s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) {
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+
+s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status) {
__OSContRequestHeaderAligned header;
- s32 ret = 0;
+ s32 errorCode = 0;
s32 i;
- u8* ptr = (u8*)&__osContPifRam;
- s32 var = 2;
+ u8* ptr = (u8*)&__osContPifRam.ramarray;
+ s32 retryCount = 2;
__osSiGetAccess();
do {
- if (ret != CONT_ERR_CONTRFAIL) {
+ if (errorCode != CONT_ERR_CONTRFAIL) {
__osContPifRam.status = CONT_CMD_READ_BUTTON;
- for (i = 0; i < port; i++, *ptr++ = 0) {}
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
- *ptr++ = 1;
- *ptr++ = 3;
+ *ptr++ = CONT_CMD_REQUEST_STATUS_TX;
+ *ptr++ = CONT_CMD_REQUEST_STATUS_RX;
*ptr = CONT_CMD_REQUEST_STATUS;
ptr += 4;
*ptr = CONT_CMD_END;
__osContLastPoll = CONT_CMD_END;
- ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam);
+ errorCode = __osSiRawStartDma(OS_WRITE, &__osContPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
- ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
+ errorCode = __osSiRawStartDma(OS_READ, &__osContPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
- ptr = (u8*)&__osContPifRam + port;
+ ptr = (u8*)&__osContPifRam.ramarray + channel;
header = *((__OSContRequestHeaderAligned*)ptr);
- ret = (u8)((header.rxsize & 0xC0) >> 4);
+ errorCode = (u8)CHNL_ERR(header);
*status = header.status;
- if (ret == 0) {
- if (header.typeh == 0 && header.typel == 1) {
+ if (errorCode == 0) {
+ if ((header.typeh == 0) && (header.typel == 1)) {
if (header.status & 4) {
- ret = CONT_ERR_CONTRFAIL;
+ errorCode = CONT_ERR_CONTRFAIL;
}
} else {
- ret = CONT_ERR_DEVICE;
+ errorCode = CONT_ERR_DEVICE;
}
- } else if (ret & CONT_NO_RESPONSE_ERROR) {
- ret = CONT_ERR_NO_CONTROLLER;
+ } else if (errorCode & CONT_NO_RESPONSE_ERROR) {
+ errorCode = CONT_ERR_NO_CONTROLLER;
} else {
- ret = CONT_ERR_CONTRFAIL;
+ errorCode = CONT_ERR_CONTRFAIL;
}
- } while ((ret == CONT_ERR_CONTRFAIL) && (var-- >= 0));
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
__osSiRelAccess();
- return (ret);
+
+ return errorCode;
}
diff --git a/src/libultra/voice/voiceinit.c b/src/libultra/voice/voiceinit.c
index 920bc4818..2a777edaf 100644
--- a/src/libultra/voice/voiceinit.c
+++ b/src/libultra/voice/voiceinit.c
@@ -1,3 +1,69 @@
-#include "global.h"
+/**
+ * File: voiceinit.c
+ *
+ * Initializes Voice Recognition System control structure and hardware
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voiceinit/osVoiceInit.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "macros.h"
+
+static u8 sCmds[] = {
+ 0x1E, 0x6E, 0x08, 0x56, 0x03,
+};
+
+s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel) {
+ s32 errorCode;
+ s32 i;
+ u8 status = 0;
+ u8 data[4];
+
+ hd->channel = channel;
+ hd->mq = mq;
+ hd->mode = VOICE_HANDLE_MODE_0;
+
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (__osContChannelReset(mq, channel) != 0) {
+ return CONT_ERR_CONTRFAIL;
+ }
+
+ for (i = 0; i < ARRAY_COUNT(sCmds); i++) {
+ errorCode = __osVoiceSetADConverter(mq, channel, sCmds[i]);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+ }
+
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ /**
+ * data[0] = 0
+ * data[1] = 0
+ * data[2] = 1
+ * data[3] = 0
+ */
+ *(u32*)data = 0x100;
+ errorCode = __osVoiceContWrite4(mq, channel, 0, data);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ errorCode = __osVoiceCheckResult(hd, &status);
+ if (errorCode & 0xFF00) {
+ errorCode = CONT_ERR_INVALID;
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicemaskdictionary.c b/src/libultra/voice/voicemaskdictionary.c
index 3de841de3..a8f090329 100644
--- a/src/libultra/voice/voicemaskdictionary.c
+++ b/src/libultra/voice/voicemaskdictionary.c
@@ -1,3 +1,57 @@
-#include "global.h"
+/**
+ * File: voicemaskdictionary.c
+ *
+ * Mask words registered in the voice recognition system
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicemaskdictionary/osVoiceMaskDictionary.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "macros.h"
+
+s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size) {
+ s32 errorCode;
+ s32 i;
+ s32 j;
+ u8 status;
+ u8 data[20];
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ if (size & 1) {
+ j = size + 1;
+ } else {
+ j = size;
+ }
+
+ bzero(&data, ARRAY_COUNT(data));
+
+ data[ARRAY_COUNT(data) - 2 - j] = 4;
+
+ for (i = 0; i < j; i += 2) {
+ data[i + ARRAY_COUNT(data) - j] = maskPattern[i];
+ data[i + ARRAY_COUNT(data) - j + 1] = maskPattern[i + 1];
+ }
+
+ if (size & 1) {
+ data[ARRAY_COUNT(data) - 1] = 0;
+ }
+
+ errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, data);
+ if (errorCode == 0) {
+ errorCode = __osVoiceCheckResult(hd, &status);
+ if (errorCode & 0xFF00) {
+ errorCode = CONT_ERR_INVALID;
+ }
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c
index c1b8fa002..2a6ebfbc7 100644
--- a/src/libultra/voice/voicesetadconverter.c
+++ b/src/libultra/voice/voicesetadconverter.c
@@ -1,3 +1,70 @@
-#include "global.h"
+/**
+ * File: voicesetadconverter.c
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicesetadconverter/__osVoiceSetADConverter.s")
+#include "ultra64/controller_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "variables.h"
+
+#define SWRITEFORMAT(ptr) ((__OSVoiceSWriteFormat*)(ptr))
+
+s32 __osVoiceSetADConverter(OSMesgQueue* mq, s32 channel, u8 data) {
+ s32 errorCode;
+ s32 i;
+ u8* ptr;
+ u8 status;
+ s32 retryCount = 2;
+
+ __osSiGetAccess();
+
+ do {
+ ptr = (u8*)&__osPfsPifRam.ramarray;
+
+ if ((__osContLastPoll != CONT_CMD_SWRITE_VOICE) || (channel != __osPfsLastChannel)) {
+ __osContLastPoll = CONT_CMD_SWRITE_VOICE;
+ __osPfsLastChannel = channel;
+
+ for (i = 0; i < channel; i++, *ptr++ = 0) {}
+
+ __osPfsPifRam.status = CONT_CMD_EXE;
+
+ SWRITEFORMAT(ptr)->txsize = CONT_CMD_SWRITE_VOICE_TX;
+ SWRITEFORMAT(ptr)->rxsize = CONT_CMD_SWRITE_VOICE_RX;
+ SWRITEFORMAT(ptr)->cmd = CONT_CMD_SWRITE_VOICE;
+ SWRITEFORMAT(ptr)->datacrc = 0;
+
+ ptr[sizeof(__OSVoiceSWriteFormat)] = CONT_CMD_END;
+ } else {
+ ptr += channel;
+ }
+
+ SWRITEFORMAT(ptr)->data = data;
+ SWRITEFORMAT(ptr)->scrc = __osContAddressCrc(data << 3);
+
+ __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+ __osSiRawStartDma(OS_READ, &__osPfsPifRam);
+ osRecvMesg(mq, NULL, OS_MESG_BLOCK);
+
+ errorCode = CHNL_ERR(*SWRITEFORMAT(ptr));
+
+ if (errorCode == 0) {
+ if (SWRITEFORMAT(ptr)->datacrc & 1) {
+ errorCode = __osVoiceGetStatus(mq, channel, &status);
+ if (errorCode != 0) {
+ break;
+ }
+
+ errorCode = CONT_ERR_CONTRFAIL;
+ }
+ } else {
+ errorCode = CONT_ERR_NO_CONTROLLER;
+ }
+
+ } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0));
+
+ __osSiRelAccess();
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicesetword.c b/src/libultra/voice/voicesetword.c
index e50f26874..2dfe58b94 100644
--- a/src/libultra/voice/voicesetword.c
+++ b/src/libultra/voice/voicesetword.c
@@ -1,3 +1,69 @@
-#include "global.h"
+/**
+ * File: voicesetword.c
+ *
+ * Registers words to the Voice Recognition System dictionary
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicesetword/osVoiceSetWord.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+#include "functions.h"
+#include "macros.h"
+
+s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word) {
+ s32 i;
+ s32 k;
+ s32 errorCode;
+ u8 status;
+ u8 data[40];
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ k = 0;
+
+ while (word[k] != 0) {
+ k += 2;
+ }
+
+ bzero(data, ARRAY_COUNT(data));
+
+ for (i = 0; i < k; i += 2) {
+ data[ARRAY_COUNT(data) - 1 - k + i] = word[i];
+ data[ARRAY_COUNT(data) - 1 - k + i - 1] = word[i + 1];
+ }
+
+ data[ARRAY_COUNT(data) - 1 - i - 5] = 3;
+
+ if (k >= 15) {
+ errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, &data[0]);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+ }
+
+ errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, &data[20]);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ errorCode = __osVoiceCheckResult(hd, &status);
+
+ if (errorCode != 0) {
+ if (errorCode & 0x100) {
+ errorCode = CONT_ERR_VOICE_MEMORY;
+ } else if (errorCode & 0x200) {
+ errorCode = CONT_ERR_VOICE_WORD;
+ } else if (errorCode & 0xFF00) {
+ errorCode = CONT_ERR_INVALID;
+ }
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicestartreaddata.c b/src/libultra/voice/voicestartreaddata.c
index e7105a7d4..398d10a15 100644
--- a/src/libultra/voice/voicestartreaddata.c
+++ b/src/libultra/voice/voicestartreaddata.c
@@ -1,3 +1,49 @@
-#include "global.h"
+/**
+ * File: voicestartreaddata.c
+ *
+ * Start voice recognition by the Voice Recognition System
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicestartreaddata/osVoiceStartReadData.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+
+s32 osVoiceStartReadData(OSVoiceHandle* hd) {
+ s32 errorCode;
+ u8 status;
+ u8 data[4];
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ if (hd->mode != VOICE_HANDLE_MODE_0) {
+ return CONT_ERR_INVALID;
+ }
+
+ /**
+ * data[0] = 5
+ * data[1] = 0
+ * data[2] = 0
+ * data[3] = 0
+ */
+ *(u32*)data = 0x5000000;
+ errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data);
+
+ if (errorCode == 0) {
+ errorCode = __osVoiceCheckResult(hd, &status);
+
+ if (errorCode & 0xFF00) {
+ errorCode = CONT_ERR_INVALID;
+ } else {
+ hd->mode = VOICE_HANDLE_MODE_1;
+ }
+ }
+
+ return errorCode;
+}
diff --git a/src/libultra/voice/voicestopread.c b/src/libultra/voice/voicestopread.c
index f032fc40e..570613428 100644
--- a/src/libultra/voice/voicestopread.c
+++ b/src/libultra/voice/voicestopread.c
@@ -1,3 +1,60 @@
-#include "global.h"
+/**
+ * File: voicestopread.c
+ *
+ * Forcibly stops voice recognition processing by the Voice Recognition System
+ */
-#pragma GLOBAL_ASM("asm/non_matchings/boot/voicestopread/osVoiceStopReadData.s")
+#include "ultra64/controller_voice.h"
+#include "ultra64/os_voice.h"
+#include "io/controller.h"
+
+s32 osVoiceStopReadData(OSVoiceHandle* hd) {
+ s32 errorCode;
+ s32 i;
+ u8 status;
+ u8 data[4];
+
+ errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status);
+ if (errorCode != 0) {
+ return errorCode;
+ }
+
+ if (status & 2) {
+ return CONT_ERR_VOICE_NO_RESPONSE;
+ }
+
+ if (hd->mode == VOICE_HANDLE_MODE_0) {
+ return CONT_ERR_INVALID;
+ }
+
+ /**
+ * data[0] = 0
+ * data[1] = 0
+ * data[2] = 7
+ * data[3] = 0
+ */
+ *(u32*)data = 0x700;
+ errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data);
+
+ if (errorCode == 0) {
+ i = 0;
+ do {
+ errorCode = __osVoiceCheckResult(hd, &status);
+ if (errorCode & 0xFF00) {
+ if (((errorCode & 7) == 0) || ((errorCode & 7) == 7)) {
+ errorCode = 0;
+ hd->mode = VOICE_HANDLE_MODE_0;
+ } else {
+ errorCode = CONT_ERR_INVALID;
+ }
+ } else {
+ hd->mode = VOICE_HANDLE_MODE_0;
+ }
+ i++;
+ } while ((errorCode == CONT_ERR_VOICE_NO_RESPONSE) && (i < 20));
+ }
+
+ if (i >= 20) {}
+
+ return errorCode;
+}
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 e271449b5..c7bff97f2 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
@@ -129,7 +129,7 @@ void ArmsHook_AttachHookToActor(ArmsHook* this, Actor* actor) {
void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((this->actor.parent == NULL) || (!Player_IsHoldingHookshot(player))) {
+ if ((this->actor.parent == NULL) || !Player_IsHoldingHookshot(player)) {
ArmsHook_DetachHookFromActor(this);
Actor_Kill(&this->actor);
return;
@@ -138,9 +138,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
func_800B8F98(&player->actor, NA_SE_IT_HOOKSHOT_CHAIN - SFX_FLAG);
ArmsHook_CheckForCancel(this);
- if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) &&
+ if ((this->timer != 0) && (this->collider.base.atFlags & AT_HIT) &&
(this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) {
Actor* touchedActor = this->collider.base.at;
+
if ((touchedActor->update != NULL) && (touchedActor->flags & (ACTOR_FLAG_200 | ACTOR_FLAG_400))) {
if (this->collider.info.atHitInfo->bumperFlags & BUMP_HOOKABLE) {
ArmsHook_AttachHookToActor(this, touchedActor);
@@ -190,12 +191,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
} else {
if (this->actor.child != NULL) {
velocity = 30.0f;
+ } else if (grabbed != NULL) {
+ velocity = 50.0f;
} else {
- if (grabbed != NULL) {
- velocity = 50.0f;
- } else {
- velocity = 200.0f;
- }
+ velocity = 200.0f;
}
phi_f16 = bodyDistDiff - velocity;
if (bodyDistDiff <= velocity) {
@@ -244,7 +243,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z);
if (BgCheck_EntityLineTest1(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true,
&bgId) &&
- (func_800B90AC(play, &this->actor, poly, bgId, &posResult) == 0 ||
+ (!func_800B90AC(play, &this->actor, poly, bgId, &posResult) ||
BgCheck_ProjectileLineTest(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true,
&bgId))) {
f32 nx = COLPOLY_GET_NORMAL(poly->normal.x);
@@ -314,7 +313,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) {
Matrix_MultVec3f(&D_808C1C4C, &sp50);
}
func_80126440(play, &this->collider, &this->weaponInfo, &sp5C, &sp50);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_80122868(play, player);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
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 31b675f41..bde007da1 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
@@ -15,7 +15,7 @@ typedef struct ArmsHook {
/* 0x1EC */ Vec3f unk1EC;
/* 0x1F8 */ Actor* grabbed;
/* 0x1FC */ Vec3f unk1FC;
- /* 0x208 */ UNK_TYPE1 unk208[0x2];
+ /* 0x208 */ s8 unk_208;
/* 0x20A */ s16 timer;
/* 0x20C */ ArmsHookActionFunc actionFunc;
} ArmsHook; // size = 0x210
diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
index c356a5f17..efa7f04c4 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
@@ -249,6 +249,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) {
Actor* transform = (arrow->unk_261 & 2) ? &this->actor : &arrow->actor;
OPEN_DISPS(play->state.gfxCtx);
+
Matrix_Translate(transform->world.pos.x, transform->world.pos.y, transform->world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(transform->shape.rot.y, MTXMODE_APPLY);
Matrix_RotateXS(transform->shape.rot.x, MTXMODE_APPLY);
@@ -256,7 +257,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) {
Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
if (this->screenFillIntensity > 0.0f) {
- POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP);
+ POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 40.0f) & 0xFF, 0, 0,
(s32)(150.0f * this->screenFillIntensity) & 0xFF);
@@ -266,7 +267,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect);
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 200, 0, this->alpha);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128);
diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
index 62c97ccde..83c37fa6c 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -204,7 +204,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) {
// Draw blue effect over the screen when arrow hits
if (this->blueingEffectMagnitude > 0.0f) {
- POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP);
+ POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(this->blueingEffectMagnitude * 10.0f) & 0xFF,
(s32)(50.0f * this->blueingEffectMagnitude) & 0xFF,
(s32)(150.0f * this->blueingEffectMagnitude) & 0xFF);
@@ -214,7 +214,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) {
}
// Draw ice on the arrow
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 170, 255, 255, (s32)(this->alpha * 0.5f) & 0xFF);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 128);
Matrix_RotateZYX(0x4000, 0, 0, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
index 360afa4ac..b650533da 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
@@ -196,7 +196,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) {
Matrix_RotateZS(transform->shape.rot.z, MTXMODE_APPLY);
Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
if (this->screenFillIntensity > 0.0f) {
- POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP);
+ POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 30.0f) & 0xFF,
(s32)(40.0f * this->screenFillIntensity) & 0xFF, 0,
(s32)(150.0f * this->screenFillIntensity) & 0xFF);
@@ -205,7 +205,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect);
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 170, this->alpha);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 128);
diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c
index 59348962a..0391925ae 100644
--- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c
@@ -202,24 +202,28 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) {
Gfx* opa;
OPEN_DISPS(play->state.gfxCtx);
+
opa = POLY_OPA_DISP;
- gSPDisplayList(&opa[0], &sSetupDL[25 * 6]);
+ gSPDisplayList(&opa[0], gSetupDLs[SETUPDL_25]);
gSPMatrix(&opa[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSetGeometryMode(&opa[2], G_LIGHTING_POSITIONAL);
gSPDisplayList(&opa[3], object_astr_obj_DL_002380);
POLY_OPA_DISP = &opa[4];
+
CLOSE_DISPS(play->state.gfxCtx);
}
{
Gfx* xlu;
OPEN_DISPS(play->state.gfxCtx);
+
xlu = POLY_XLU_DISP;
- gSPDisplayList(&xlu[0], &sSetupDL[25 * 6]);
+ gSPDisplayList(&xlu[0], gSetupDLs[SETUPDL_25]);
gSPMatrix(&xlu[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSetGeometryMode(&xlu[2], G_LIGHTING_POSITIONAL);
gSPDisplayList(&xlu[3], object_astr_obj_DL_0022E0);
POLY_XLU_DISP = &xlu[4];
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c
index a5168eb24..f1394a32e 100644
--- a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c
+++ b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c
@@ -95,7 +95,7 @@ void BgBotihasira_Update(Actor* thisx, PlayState* play2) {
void BgBotihasira_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_botihasira_DL_000638);
diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
index b2e59a51b..efe92eebc 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
@@ -60,7 +60,7 @@ typedef struct {
/* 0x14 */ BgBreakwallUnkFunc unk_14;
/* 0x18 */ BgBreakwallUnkFunc2 unk_18;
/* 0x1C */ ActorFunc unk_1C;
-} BgBreakwallStruct;
+} BgBreakwallStruct; // size = 0x20
BgBreakwallStruct D_808B8140[] = {
{ OBJECT_OMOYA_OBJ, object_omoya_obj_DL_0001A0, NULL, NULL, NULL, func_808B7380, func_808B77D0, NULL },
@@ -84,8 +84,7 @@ BgBreakwallStruct D_808B8140[] = {
func_808B77D0, NULL },
{ OBJECT_IKNINSIDE_OBJ, NULL, object_ikninside_obj_DL_00AEC0, object_ikninside_obj_Matanimheader_00BCB8, NULL,
func_808B751C, func_808B7A10, func_808B7D34 },
- { OBJECT_SPOT11_OBJ, object_spot11_obj_DL_0013F0, NULL, NULL, &object_spot11_obj_Colheader_001EB8, func_808B736C,
- func_808B77D0, NULL },
+ { OBJECT_SPOT11_OBJ, gWoodStepDL, NULL, NULL, &gWoodStepCol, func_808B736C, func_808B77D0, NULL },
};
static InitChainEntry sInitChain[] = {
@@ -146,7 +145,7 @@ s32 func_808B736C(BgBreakwall* this, PlayState* play) {
}
s32 func_808B7380(BgBreakwall* this, PlayState* play) {
- if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
return true;
@@ -355,7 +354,7 @@ void func_808B7B54(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -423,14 +422,14 @@ void BgBreakwall_Draw(Actor* thisx, PlayState* play) {
}
if (temp_s2->unk_04 != NULL) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, temp_s2->unk_04);
}
if (temp_s2->unk_08 != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, temp_s2->unk_08);
diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
index bcdda2327..c332fe82c 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
@@ -12,11 +12,11 @@ typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*);
#define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF)
#define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9)
-enum {
+typedef enum {
/* 7 */ BGBREAKWALL_F_7 = 7,
/* 9 */ BGBREAKWALL_F_9 = 9,
- /* 11 */ BGBREAKWALL_F_11 = 11,
-};
+ /* 11 */ BGBREAKWALL_F_11 = 11
+} BgBreakwallParam;
typedef struct BgBreakwall {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c
index adf9b3c96..d8c39a098 100644
--- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c
+++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c
@@ -191,11 +191,13 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play) {
void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gClockTowerOrganDL);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gClockTowerOrganPipesDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h
index afea1bf0d..d59bfd3ea 100644
--- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h
+++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h
@@ -9,10 +9,10 @@ struct BgCtowerGear;
#define BGCTOWERGEAR_GET_TYPE(thisx) ((thisx)->params & 3)
typedef enum {
- /* 0x0 */ BGCTOWERGEAR_CEILING_COG,
- /* 0x1 */ BGCTOWERGEAR_CENTER_COG,
- /* 0x2 */ BGCTOWERGEAR_WATER_WHEEL,
- /* 0x3 */ BGCTOWERGEAR_ORGAN
+ /* 0 */ BGCTOWERGEAR_CEILING_COG,
+ /* 1 */ BGCTOWERGEAR_CENTER_COG,
+ /* 2 */ BGCTOWERGEAR_WATER_WHEEL,
+ /* 3 */ BGCTOWERGEAR_ORGAN
} BgCtowerGearType;
typedef struct BgCtowerGear {
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h
index 52a905ed5..a06934669 100644
--- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h
+++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h
@@ -11,7 +11,7 @@ typedef enum {
/* 0 */ BGCTOWERROT_CORRIDOR,
/* 1 */ BGCTOWERROT_STONE_DOOR_MAIN, // Main door controls cutscene flow (updating Link fields and playing sounds).
// It is the one on the left when entering from the Lost Woods
- /* 2 */ BGCTOWERROT_STONE_DOOR,
+ /* 2 */ BGCTOWERROT_STONE_DOOR
} BgCtowerRotType;
typedef struct BgCtowerRot {
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c
index 2a59a9b8f..79ed63188 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c
+++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c
@@ -663,7 +663,7 @@ void BgDblueBalance_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_XLU_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(gfx++, 0, 0, 0, this->unk_183);
gSPDisplayList(gfx++, gGreatBayTempleObjectSeesawSplashDL);
@@ -705,7 +705,7 @@ void func_80B83758(Actor* thisx, PlayState* play) {
gfx = POLY_XLU_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
for (i = 0, ptr = &this->unk_188[0]; i < ARRAY_COUNT(this->unk_188); i++, ptr++) {
if (ptr->unk_0E != 0) {
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c
index 570369f07..6d13f4ac3 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c
+++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c
@@ -34,9 +34,9 @@ void func_80A2B308(Actor* thisx, PlayState* play);
BgDblueMovebg* D_80A2BBF0;
typedef struct {
- u8 unk_00;
- u8 unk_01;
-} BgDblueMovebgUnkStruct;
+ /* 0x0 */ u8 unk_00;
+ /* 0x1 */ u8 unk_01;
+} BgDblueMovebgUnkStruct; // size = 0x2
BgDblueMovebgUnkStruct D_80A2BBF4;
@@ -752,7 +752,7 @@ void func_80A2B308(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, this->opaDList);
@@ -778,7 +778,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) {
}
if ((this->opaDList != NULL) || (this->unk_160 == 6)) {
- gfx2 = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19);
+ gfx2 = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
gSPMatrix(&gfx2[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -797,7 +797,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) {
}
if (this->xluDList != NULL) {
- gfx = func_8012C2B4(POLY_XLU_DISP);
+ gfx = Gfx_SetupDL71(POLY_XLU_DISP);
gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[1], this->xluDList);
@@ -820,7 +820,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_APPLY);
Matrix_RotateXS(this->dyna.actor.shape.rot.x, MTXMODE_APPLY);
Matrix_RotateZS(this->dyna.actor.shape.rot.z, MTXMODE_APPLY);
- gfx = func_8012C2B4(POLY_XLU_DISP);
+ gfx = Gfx_SetupDL71(POLY_XLU_DISP);
for (i = 0; i < ARRAY_COUNT(this->unk_1D8[0]); i++) {
for (j = 0; j < ARRAY_COUNT(this->unk_1D8); j++) {
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c
index 8f3de2b2e..10ad49d9b 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c
+++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c
@@ -320,9 +320,10 @@ void func_80B84610(BgDblueWaterfall* this, PlayState* play) {
player->actor.world.pos.x += sp34.x;
player->actor.world.pos.z += sp34.z;
+ //! FAKE:
if (this && this && this) {}
- player->unk_B80 = 8.0f;
- player->unk_B84 = this->actor.yawTowardsPlayer;
+ player->pushedSpeed = 8.0f;
+ player->pushedYaw = this->actor.yawTowardsPlayer;
}
static InitChainEntry sInitChain[] = {
@@ -590,7 +591,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -609,7 +610,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x9B, 255, 255, 255, this->unk_19F);
gSPDisplayList(POLY_XLU_DISP++, gGreatBayTempleObjectIceStalactiteDL);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x9B, 255, 255, 255, 255);
diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c
index e9f8916d0..70bc5931f 100644
--- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c
+++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c
@@ -200,7 +200,7 @@ void BgDkjailIvy_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0xFF, 255, 255, 255, this->alpha);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c
index be1958cb4..97ccc907a 100644
--- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c
+++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c
@@ -56,8 +56,8 @@ s32 func_80BC3980(BgF40Block* this, PlayState* play) {
this->unk_160 = 0;
this->unk_164 = 0;
- if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) {
- this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)];
+ if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)];
if (this->path != NULL) {
points = Lib_SegmentedToVirtual(this->path->points);
@@ -78,8 +78,8 @@ s32 func_80BC3A2C(BgF40Block* this, PlayState* play) {
this->unk_160 = this->path->count - 1;
this->unk_164 = this->path->count - 1;
- if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) {
- this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)];
+ if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)];
if (this->path != NULL) {
points = Lib_SegmentedToVirtual(this->path->points);
points += this->unk_164;
@@ -229,10 +229,10 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004640);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerBlockCol);
- if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) {
- this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)];
+ if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)];
} else {
this->path = NULL;
}
@@ -373,5 +373,5 @@ void BgF40Block_Update(Actor* thisx, PlayState* play) {
}
void BgF40Block_Draw(Actor* thisx, PlayState* play) {
- Gfx_DrawDListOpa(play, object_f40_obj_DL_0043D0);
+ Gfx_DrawDListOpa(play, gStoneTowerBlockDL);
}
diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h
index 37a5c360e..228fb6bfd 100644
--- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h
+++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h
@@ -7,9 +7,11 @@ struct BgF40Block;
typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*);
-#define BGF40BLOCK_GET_PATH(thisx) (((thisx)->params & 0x1FC) >> 2)
+#define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2)
#define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define BGF40BLOCK_PATH_INDEX_NONE 0x3F
+
typedef struct BgF40Block {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ Path* path;
diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c
index 075f38607..f47bf4394 100644
--- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c
+++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c
@@ -42,7 +42,7 @@ void BgF40Flift_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004240);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerTempleSquareElevatorCol);
this->dyna.actor.params = 1;
this->actionFunc = func_808D75F0;
}
@@ -64,10 +64,11 @@ void func_808D75F0(BgF40Flift* this, PlayState* play) {
}
this->timer--;
if (this->dyna.actor.params == 1) {
- this->dyna.actor.world.pos.y = (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y;
+ this->dyna.actor.world.pos.y =
+ (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y;
} else {
this->dyna.actor.world.pos.y =
- (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y);
+ (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y);
}
}
}
@@ -76,7 +77,7 @@ void func_808D7714(BgF40Flift* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
this->dyna.actor.world.pos.y =
- (((cos_rad(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) +
+ (((Math_CosF(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) +
this->dyna.actor.home.pos.y;
} else {
this->dyna.actor.params = -this->dyna.actor.params;
@@ -91,5 +92,5 @@ void BgF40Flift_Update(Actor* thisx, PlayState* play) {
}
void BgF40Flift_Draw(Actor* thisx, PlayState* play) {
- Gfx_DrawDListOpa(play, object_f40_obj_DL_004038);
+ Gfx_DrawDListOpa(play, gStoneTowerTempleSquareElevatorDL);
}
diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
index 67703f0cd..be3c9cb47 100644
--- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
+++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
@@ -53,21 +53,20 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
u32 inCsMode = Player_InCsMode(play);
for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) {
- if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != NULL) {
+ if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) &&
+ (actor->update != NULL)) {
actorAsSwitch = (BgF40Switch*)actor;
actorAsSwitch->wasPressed = actorAsSwitch->isPressed;
isPressed = DynaPolyActor_IsSwitchPressed(&actorAsSwitch->dyna);
- if (actorAsSwitch->isPressed && actorAsSwitch->actionFunc == BgF40Switch_IdlePressed) {
+ if (actorAsSwitch->isPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdlePressed)) {
// Switch is fully pressed - if there's nothing keeping it pressed, wait a short time before
// reverting to unpressed state.
if (isPressed || inCsMode) {
actorAsSwitch->switchReleaseDelay = 6;
+ } else if (actorAsSwitch->switchReleaseDelay > 0) {
+ actorAsSwitch->switchReleaseDelay--;
} else {
- if (actorAsSwitch->switchReleaseDelay > 0) {
- actorAsSwitch->switchReleaseDelay--;
- } else {
- actorAsSwitch->isPressed = isPressed;
- }
+ actorAsSwitch->isPressed = isPressed;
}
} else {
// No delay when pressing switch, or releasing from a not-fully-pressed state.
@@ -75,9 +74,9 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
}
if (actorAsSwitch->isPressed) {
switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor);
- if (switchFlag >= 0 && switchFlag < 0x80) {
+ if ((switchFlag >= 0) && (switchFlag < 0x80)) {
pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F);
- if (!actorAsSwitch->wasPressed && actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed &&
+ if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) &&
!Flags_GetSwitch(play, switchFlag)) {
actorAsSwitch->isInitiator = true;
}
@@ -86,9 +85,10 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
}
}
for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) {
- if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != 0) {
+ if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) &&
+ (actor->update != NULL)) {
switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor);
- if (switchFlag >= 0 && switchFlag < 0x80 && Flags_GetSwitch(play, switchFlag) &&
+ if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) &&
!(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) {
Flags_UnsetSwitch(play, switchFlag);
}
diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c
index 97fd3f068..039d20f3c 100644
--- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c
+++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c
@@ -5,6 +5,7 @@
*/
#include "z_bg_f40_swlift.h"
+#include "objects/object_f40_obj/object_f40_obj.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -12,11 +13,13 @@
void BgF40Swlift_Init(Actor* thisx, PlayState* play);
void BgF40Swlift_Destroy(Actor* thisx, PlayState* play);
-void BgF40Swlift_Update(Actor* thisx, PlayState* play);
+void BgF40Swlift_Update(Actor* thisx, PlayState* play2);
void BgF40Swlift_Draw(Actor* thisx, PlayState* play);
-#if 0
-ActorInit Bg_F40_Swlift_InitVars = {
+static s32 sSwitchFlags[4] = { 0xFF, 0xFF, 0xFF, 0xFF };
+static s32 sHeights[4];
+
+const ActorInit Bg_F40_Swlift_InitVars = {
ACTOR_BG_F40_SWLIFT,
ACTORCAT_BG,
FLAGS,
@@ -28,24 +31,86 @@ ActorInit Bg_F40_Swlift_InitVars = {
(ActorFunc)BgF40Swlift_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_8096F540[] = {
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneScale, 550, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-#endif
+void BgF40Swlift_Init(Actor* thisx, PlayState* play) {
+ BgF40Swlift* this = THIS;
+ s32 index;
+ s32 pad;
-extern InitChainEntry D_8096F540[];
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
+ index = BG_F40_SWLIFT_GET_INDEX(thisx);
+ if ((index < 0) || (index >= 5)) { //! @bug An index greater than 3 will cause an out of bounds array access.
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
-extern UNK_TYPE D_06003B08;
-extern UNK_TYPE D_06003E80;
+ sHeights[index] = this->dyna.actor.world.pos.y;
+ sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx);
+ if (index != 0) {
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Init.s")
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerVerticallyOscillatingPlatformCol);
+ this->dyna.actor.params = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Destroy.s")
+void BgF40Swlift_Destroy(Actor* thisx, PlayState* play) {
+ BgF40Swlift* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Update.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Draw.s")
+void BgF40Swlift_Update(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ BgF40Swlift* this = THIS;
+ s32 i;
+
+ for (i = 1; i < ARRAY_COUNT(sSwitchFlags); i++) {
+ if ((sSwitchFlags[i] == 0xFF) || !Flags_GetSwitch(play, sSwitchFlags[i])) {
+ break;
+ }
+ }
+
+ i--;
+ if (i != this->dyna.actor.params) {
+ f32 heightOffset;
+
+ this->dyna.actor.params = -1;
+ heightOffset = (sHeights[i] - this->dyna.actor.world.pos.y) * 0.1f;
+ if (heightOffset > 0.0f) {
+ heightOffset = CLAMP(heightOffset, 0.5f, 15.0f);
+ } else {
+ heightOffset = CLAMP(heightOffset, -15.0f, -0.5f);
+ }
+
+ if (Math_StepToF(&this->dyna.actor.speed, heightOffset, 1.0f) && (fabsf(heightOffset) <= 0.5f)) {
+ if (Math_StepToF(&this->dyna.actor.world.pos.y, sHeights[i], fabsf(this->dyna.actor.speed))) {
+ this->dyna.actor.params = i;
+ this->timer = 48;
+ this->dyna.actor.speed = 0.0f;
+ }
+ } else {
+ this->dyna.actor.world.pos.y += this->dyna.actor.speed;
+ }
+ } else {
+ if (this->timer == 0) {
+ this->timer = 48;
+ }
+ this->timer--;
+ this->dyna.actor.world.pos.y =
+ sHeights[this->dyna.actor.params] + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f);
+ }
+}
+
+void BgF40Swlift_Draw(Actor* thisx, PlayState* play) {
+ BgF40Swlift* this = THIS;
+
+ Gfx_DrawDListOpa(play, gStoneTowerVerticallyOscillatingPlatformDL);
+}
diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h
index a687fc642..e377b73e0 100644
--- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h
+++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h
@@ -1,13 +1,16 @@
#ifndef Z_BG_F40_SWLIFT_H
#define Z_BG_F40_SWLIFT_H
+#define BG_F40_SWLIFT_GET_SWITCHFLAG(thisx) ((thisx)->params & 0xFF)
+#define BG_F40_SWLIFT_GET_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
+
#include "global.h"
struct BgF40Swlift;
typedef struct BgF40Swlift {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x1C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ s32 timer;
} BgF40Swlift; // size = 0x160
#endif // Z_BG_F40_SWLIFT_H
diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c
index 40b8c78a7..e15c87f42 100644
--- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c
+++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c
@@ -205,7 +205,7 @@ void BgFireWall_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFlameTextures[this->texIndex]));
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x01, 255, 255, 0, 150);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 255);
diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h
index af5a29923..bf5300758 100644
--- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h
+++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h
@@ -8,9 +8,9 @@ struct BgFireWall;
typedef void (*BgFireWallActionFunc)(struct BgFireWall*, PlayState*);
typedef enum {
- /* 0 */ BGFIREWALL_PARAMS_0,
- /* 1 */ BGFIREWALL_PARAMS_1,
-} BgFireWallParams;
+ /* 0 */ BGFIREWALL_PARAM_0,
+ /* 1 */ BGFIREWALL_PARAM_1
+} BgFireWallParam;
typedef struct BgFireWall {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c
index bec649b57..7b63081c0 100644
--- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c
+++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c
@@ -77,7 +77,7 @@ void BgFuKaiten_Update(Actor* thisx, PlayState* play) {
void BgFuKaiten_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_fu_kaiten_DL_0005D0);
diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c
index 7f485be1d..9da3cc5f6 100644
--- a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c
+++ b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c
@@ -87,7 +87,7 @@ void BgFuMizu_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_fu_kaiten_DL_002FC0);
diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c
index 7d0ed6a1a..fd46e16e5 100644
--- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c
+++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c
@@ -183,10 +183,12 @@ void BgGoronOyu_Update(Actor* thisx, PlayState* play) {
void BgGoronOyu_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_oyu_Matanimheader_000968));
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000158);
gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000080);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c
index 693fff484..c226c89f3 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c
@@ -85,7 +85,7 @@ void func_80BD66AC(BgHakaTomb* this, PlayState* play) {
if (Flags_GetClear(play, this->dyna.actor.room)) {
this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
}
- if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId < 0) &&
+ if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId <= CS_ID_NONE) &&
Flags_GetClear(play, this->dyna.actor.room)) {
this->dyna.actor.flags |= ACTOR_FLAG_1;
if (this->dyna.actor.isTargeted) {
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c
index 7cd94bd86..10f045617 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c
@@ -126,7 +126,7 @@ void BgHakuginElvpole_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, object_hakugin_obj_DL_00ACB8);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c
index c784c1318..f85015ea9 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c
@@ -52,9 +52,9 @@ ActorInit Bg_Hakugin_Post_InitVars = {
};
typedef struct {
- f32 unk_00;
- u8 unk_04;
-} BgHakuginPostUnkStruct3;
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ u8 unk_04;
+} BgHakuginPostUnkStruct3; // size = 0x8
static BgHakuginPostUnkStruct3 D_80A9D880[] = {
{ 1200.0f, false }, { 600.0f, false }, { 900.0f, false }, { 870.0f, false },
@@ -829,7 +829,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) {
for (i = 0; i < D_80A9E028.count; i++) {
collider = D_80A9E028.unk_0000[i].collider;
- if ((collider != NULL) && (collider->base.acFlags & AT_HIT) && (D_80A9E028.unk_0000[i].unk_34 == 1)) {
+ if ((collider != NULL) && (collider->base.acFlags & AC_HIT) && (D_80A9E028.unk_0000[i].unk_34 == 1)) {
temp_f2 = this->unk_16C;
yDiff = ABS_ALT(BINANG_SUB(this->dyna.actor.yawTowardsPlayer, player->actor.shape.rot.y));
temp_f0 = temp_f2 + D_80A9E028.unk_0000[i].unk_14.y;
@@ -853,7 +853,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) {
for (i = 0; i < D_80A9E028.count; i++) {
collider = D_80A9E028.unk_0000[i].collider;
if (collider != NULL) {
- collider->base.acFlags &= ~AT_HIT;
+ collider->base.acFlags &= ~AC_HIT;
}
}
@@ -1012,14 +1012,14 @@ void func_80A9D61C(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
for (i = 0; i < D_80A9E028.count; i++) {
unkStruct1 = &D_80A9E028.unk_0000[i];
- if (unkStruct1->unk_34 != 5 && unkStruct1->unk_34 != 4) {
+ if ((unkStruct1->unk_34 != 5) && (unkStruct1->unk_34 != 4)) {
sp68.x = unkStruct1->unk_14.x + this->dyna.actor.home.pos.x;
sp68.y = unkStruct1->unk_14.y + this->unk_16C;
sp68.z = unkStruct1->unk_14.z + this->dyna.actor.home.pos.z;
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c
index c7fa3d69e..2d8fc2683 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c
@@ -4,6 +4,7 @@
* Description: Goron Link Switch
*/
+#include "prevent_bss_reordering.h"
#include "z_bg_hakugin_switch.h"
#include "z64rumble.h"
#include "objects/object_goronswitch/object_goronswitch.h"
@@ -77,7 +78,7 @@ typedef struct {
/* 0x0C */ f32 unk_C;
/* 0x10 */ Gfx* unk_10;
/* 0x14 */ u8 unk_14;
-} BgHakuginSwitchStruct;
+} BgHakuginSwitchStruct; // size = 0x18
BgHakuginSwitchStruct D_80B1688C[] = {
{ -156.0f, -178.0f, 6.0f, 10.0f, object_goronswitch_DL_000268, 0xB4 },
diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c
index 27e5d2fee..50e99c1aa 100644
--- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c
+++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c
@@ -96,8 +96,8 @@ void BgIcefloe_Grow(BgIcefloe* this, PlayState* play) {
Vec3f velocity;
Vec3f position;
- velocity.x = randPlusMinusPoint5Scaled(6.0f);
- velocity.z = randPlusMinusPoint5Scaled(6.0f);
+ velocity.x = Rand_CenteredFloat(6.0f);
+ velocity.z = Rand_CenteredFloat(6.0f);
velocity.y = Rand_ZeroFloat(4.0f) + 4.0f;
this->dyna.actor.scale.x += (0.65f * 0.01f);
this->dyna.actor.scale.z += (0.65f * 0.01f);
@@ -121,13 +121,13 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) {
WaterBox* water;
this->timer--;
- if (this->timer == 0 ||
+ if ((this->timer == 0) ||
!WaterBox_GetSurface1_2(play, &play->colCtx, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.z,
&this->dyna.actor.home.pos.y, &water)) {
func_80AC4CF0(this);
} else {
this->dyna.actor.world.pos.y =
- (sin_rad(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f);
+ (Math_SinF(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f);
}
}
@@ -144,8 +144,8 @@ void func_80AC4D2C(BgIcefloe* this, PlayState* play) {
Vec3f position;
velocity.y = (this->timer - 38) * (1 / 12.0f);
- velocity.x = randPlusMinusPoint5Scaled(1.5f) * velocity.y;
- velocity.z = randPlusMinusPoint5Scaled(1.5f) * velocity.y;
+ velocity.x = Rand_CenteredFloat(1.5f) * velocity.y;
+ velocity.z = Rand_CenteredFloat(1.5f) * velocity.y;
velocity.y += 0.8f;
position.x = this->dyna.actor.world.pos.x + (2.0f * velocity.x);
position.z = this->dyna.actor.world.pos.z + (2.0f * velocity.z);
diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c
index 740d807d8..a8eea2641 100644
--- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c
+++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c
@@ -109,12 +109,12 @@ void BgIcicle_Break(BgIcicle* this, PlayState* play, f32 arg2) {
for (i = 0; i < 2; i++) {
for (j = 0; j < 10; j++) {
- pos.x = this->dyna.actor.world.pos.x + randPlusMinusPoint5Scaled(8.0f);
+ pos.x = this->dyna.actor.world.pos.x + Rand_CenteredFloat(8.0f);
pos.y = this->dyna.actor.world.pos.y + (Rand_ZeroOne() * arg2) + (i * arg2);
- pos.z = this->dyna.actor.world.pos.z + randPlusMinusPoint5Scaled(8.0f);
+ pos.z = this->dyna.actor.world.pos.z + Rand_CenteredFloat(8.0f);
- velocity.x = randPlusMinusPoint5Scaled(7.0f);
- velocity.z = randPlusMinusPoint5Scaled(7.0f);
+ velocity.x = Rand_CenteredFloat(7.0f);
+ velocity.z = Rand_CenteredFloat(7.0f);
velocity.y = (Rand_ZeroOne() * 4.0f) + 8.0f;
EffectSsEnIce_Spawn(play, &pos, (Rand_ZeroOne() * 0.2f) + 0.1f, &velocity, &accel, &primColor, &envColor,
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c
index 401d3543e..93d605320 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c
@@ -375,7 +375,7 @@ void func_80B7F564(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
AnimatedMat_DrawStep(play, this->unk_15C, 0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c
index f853fdfc5..4646b8d45 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c
@@ -151,7 +151,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
}
- if (wasHit && sFirstHitBgIkanaDharma == NULL) {
+ if (wasHit && (sFirstHitBgIkanaDharma == NULL)) {
sFirstHitBgIkanaDharma = this2;
Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor));
tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000);
@@ -160,8 +160,8 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
this->dyna.actor.speed = 20.0f;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DARUMA_VANISH);
BgIkanaDharma_SetupStartCutscene(this);
- } else if ((this->dyna.actor.flags & ACTOR_FLAG_40) == ACTOR_FLAG_40 && sFirstHitBgIkanaDharma == NULL &&
- this->dyna.actor.xzDistToPlayer < 420.0f) {
+ } else if (CHECK_FLAG_ALL(this->dyna.actor.flags, ACTOR_FLAG_40) && (sFirstHitBgIkanaDharma == NULL) &&
+ (this->dyna.actor.xzDistToPlayer < 420.0f)) {
tempAngle1 = BINANG_SUB(this->dyna.actor.yawTowardsPlayer, player->actor.shape.rot.y);
tempAngle1 = ABS_ALT(tempAngle1);
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c
index 5fc28c5a5..02ba3b1f4 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c
@@ -380,8 +380,9 @@ void BgIkanaMirror_Draw(Actor* thisx, PlayState* play) {
BgIkanaMirror* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gStoneTowerTempleMirrorDL);
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c
index 8a90a6809..ad2d9fbdd 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c
@@ -116,9 +116,9 @@ Vec3f D_80B8216C = { 225.0f, -280.0f, -210.0f };
Vec3f D_80B82178 = { -255.0f, -280.0f, 210.0f };
typedef struct {
- /* 0x00 */ s8 unk_00;
- /* 0x01 */ s8 unk_01;
- /* 0x04 */ Vec3f unk_04;
+ /* 0x0 */ s8 unk_00;
+ /* 0x1 */ s8 unk_01;
+ /* 0x4 */ Vec3f unk_04;
} BgIkanaRotaryroomStruct4; // size = 0x10
BgIkanaRotaryroomStruct4 D_80B82184[2][2] = {
diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c
index 48045527f..6ce5f7d81 100644
--- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c
+++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c
@@ -93,7 +93,10 @@ s32 func_80C0A95C(BgIkninSusceil* this, PlayState* play) {
f32 new_var;
Player* player = GET_PLAYER(play);
Vec3f offset;
- f32 temp1, temp2, temp3, temp4;
+ f32 temp1;
+ f32 temp2;
+ f32 temp3;
+ f32 temp4;
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos);
for (i = 0; i < 7; i++) {
diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
index 36f8e94fc..07968e801 100644
--- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
+++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
@@ -150,7 +150,7 @@ void BgIkninside_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, object_ikninside_obj_DL_00CC78);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c
index 2c24a5580..84bdc4169 100644
--- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c
+++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c
@@ -172,8 +172,8 @@ void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_00DDD8);
@@ -205,9 +205,9 @@ void func_80BD7538(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C304(POLY_XLU_DISP++);
+ Gfx_SetupDL72(POLY_XLU_DISP++);
Scene_SetRenderModeXlu(play, 1, 2);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(255.0f * sp54));
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DDD8);
@@ -226,7 +226,7 @@ void func_80BD7768(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_010D98);
@@ -243,7 +243,7 @@ void func_80BD7820(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_012700);
@@ -261,7 +261,7 @@ void func_80BD78C4(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, (s32)(140.0f * sp30));
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h
index beeeb0b81..643be076c 100644
--- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h
+++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h
@@ -9,11 +9,11 @@ typedef void (*BgIknvDoukutuActionFunc)(struct BgIknvDoukutu*, PlayState*);
#define BGIKNVDOUKUTU_GET_F(thisx) ((thisx)->params & 0xF)
-enum {
- BGIKNVDOUKUTU_F_0,
- BGIKNVDOUKUTU_F_1,
- BGIKNVDOUKUTU_F_2,
-};
+typedef enum {
+ /* 0 */ BGIKNVDOUKUTU_F_0,
+ /* 1 */ BGIKNVDOUKUTU_F_1,
+ /* 2 */ BGIKNVDOUKUTU_F_2
+} BgIknvDoukutuParam;
typedef struct BgIknvDoukutu {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c
index cca6b17ee..de6be9266 100644
--- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c
+++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c
@@ -211,8 +211,10 @@ void BgIknvObj_Draw(Actor* thisx, PlayState* play) {
BgIknvObj* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
+
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->displayListPtr);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h
index a5c01165d..266ec81f2 100644
--- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h
+++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h
@@ -19,7 +19,7 @@ typedef struct BgIknvObj {
typedef enum {
/* 0 */ IKNV_OBJ_WATERWHEEL,
/* 1 */ IKNV_OBJ_RAISED_DOOR, // defunct door covering entrance to Stone Tower
- /* 2 */ IKNV_OBJ_SAKON_DOOR, // door to Sakon's Hideout
+ /* 2 */ IKNV_OBJ_SAKON_DOOR // door to Sakon's Hideout
} BgIknvObjType;
#endif // Z_BG_IKNV_OBJ_H
diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
index 502b29086..2796aed7e 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
@@ -190,7 +190,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) {
if (this->unk160 & 2) {
- if (this->timePath->unk1 != 0xFF) {
+ if (this->timePath->additionalPathIndex != ADDITIONAL_PATH_INDEX_NONE) {
func_80953E38(play);
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
this->dyna.actor.textId = 0x9E4;
@@ -259,10 +259,10 @@ void func_809542A0(BgIngate* this, PlayState* play) {
}
void func_80954340(BgIngate* this, PlayState* play) {
- if (!DECR(this->unk16A)) {
+ if (DECR(this->unk16A) == 0) {
if (this->timePath != NULL) {
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
- this->timePath = &play->setupPathList[this->timePath->unk1];
+ this->timePath = &play->setupPathList[this->timePath->additionalPathIndex];
func_80953F14(this, play);
Environment_StopTime();
}
@@ -287,7 +287,7 @@ void func_809543D4(BgIngate* this, PlayState* play) {
func_8019F208();
} else {
if (this->timePath != NULL) {
- this->timePath = &play->setupPathList[this->timePath->unk1];
+ this->timePath = &play->setupPathList[this->timePath->additionalPathIndex];
}
func_80953F14(this, play);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
@@ -328,7 +328,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
this->unk160 |= 0x8;
this->unk160 |= 0x10;
Actor_SetScale(&this->dyna.actor, 1.0f);
- this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0);
+ this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0);
this->dyna.actor.room = -1;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
@@ -350,7 +350,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
this->actionFunc = func_80953F8C;
}
}
- this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), phi_a2);
+ this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), phi_a2);
if (this->timePath != NULL) {
sp38 = Lib_SegmentedToVirtual(this->timePath->points);
Math_Vec3s_ToVec3f(&sp2C, &sp38[0]);
@@ -361,7 +361,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
this->dyna.actor.world.pos.y = -15.0f;
this->dyna.actor.world.pos.z = sp2C.z;
}
- this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0);
+ this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0);
} else {
Actor_Kill(&this->dyna.actor);
}
@@ -384,7 +384,7 @@ void BgIngate_Update(Actor* thisx, PlayState* play) {
void BgIngate_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSichitaiBoat);
diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
index 6046fc31e..bf272f342 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
@@ -7,7 +7,7 @@ struct BgIngate;
typedef void (*BgIngateActionFunc)(struct BgIngate*, PlayState*);
-#define BGINGATE_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define BGINGATE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
typedef struct BgIngate {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c
index 282a43925..ff0227f70 100644
--- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c
+++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c
@@ -94,7 +94,7 @@ void BgKeikokuSaku_Update(Actor* thisx, PlayState* play) {
void BgKeikokuSaku_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_001640);
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
index 8246a0298..ac9d089a4 100644
--- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
+++ b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
@@ -1,3 +1,9 @@
+/*
+ * File: z_bg_keikoku_spr.c
+ * Overlay: ovl_Bg_Keikoku_Spr
+ * Description: Termina Field Fountain Water
+ */
+
#include "z_bg_keikoku_spr.h"
#include "objects/object_keikoku_obj/object_keikoku_obj.h"
@@ -10,7 +16,6 @@ void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play);
void BgKeikokuSpr_Update(Actor* thisx, PlayState* play);
void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play);
-/*
const ActorInit Bg_Keikoku_Spr_InitVars = {
ACTOR_BG_KEIKOKU_SPR,
ACTORCAT_PROP,
@@ -20,14 +25,42 @@ const ActorInit Bg_Keikoku_Spr_InitVars = {
(ActorFunc)BgKeikokuSpr_Init,
(ActorFunc)BgKeikokuSpr_Destroy,
(ActorFunc)BgKeikokuSpr_Update,
- (ActorFunc)BgKeikokuSpr_Draw
+ (ActorFunc)BgKeikokuSpr_Draw,
};
-*/
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Init.s")
+static InitChainEntry sInitChain[] = {
+ ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_CONTINUE),
+ ICHAIN_VEC3F_DIV1000(scale, 20, ICHAIN_STOP),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Destroy.s")
+void BgKeikokuSpr_Init(Actor* thisx, PlayState* play) {
+ BgKeikokuSpr* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Update.s")
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Draw.s")
+void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play) {
+}
+
+void BgKeikokuSpr_Update(Actor* thisx, PlayState* play) {
+}
+
+void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0001F8));
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000100);
+
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0003F8));
+ gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000300);
+
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0005F8));
+ gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000500);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
index 208babf77..63e7b5974 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
@@ -143,7 +143,7 @@ void BgLadder_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_XLU_DISP;
}
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 0x19]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha);
gSPMatrix(&gfx[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(&gfx[3], sLadderDLists[this->dyna.actor.params]);
diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
index e4cd15c15..f920c18eb 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
@@ -21,7 +21,7 @@ typedef enum {
/* 0 */ LADDER_SIZE_12RUNG,
/* 1 */ LADDER_SIZE_16RUNG,
/* 2 */ LADDER_SIZE_20RUNG,
- /* 3 */ LADDER_SIZE_24RUNG,
+ /* 3 */ LADDER_SIZE_24RUNG
} BgLadderSize;
#endif // Z_BG_LADDER_H
diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c
index 6085a93a2..a09c0fb02 100644
--- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c
+++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c
@@ -225,8 +225,8 @@ void func_80C187E4(BgLastBwall* this) {
}
void func_80C187F8(BgLastBwall* this, PlayState* play) {
- if (this->colliderTris.base.acFlags & 2) {
- this->colliderTris.base.acFlags &= ~2;
+ if (this->colliderTris.base.acFlags & AC_HIT) {
+ this->colliderTris.base.acFlags &= ~AC_HIT;
Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor));
func_80C1886C(this, play);
} else {
diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h
index e6d752c28..cae36be27 100644
--- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h
+++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h
@@ -12,8 +12,8 @@ typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*);
#define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF)
typedef enum {
- BGLASTBWALL_TYPE_0 = 0,
- BGLASTBWALL_TYPE_1 = 1,
+ /* 0 */ BGLASTBWALL_TYPE_0,
+ /* 1 */ BGLASTBWALL_TYPE_1
} BgLastBwallType;
typedef struct BgLastBwall {
diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c
index 3a11a2fdf..2e924efd3 100644
--- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c
+++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c
@@ -383,7 +383,7 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gWoodenFlowerStalkDL);
diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h
index 0e377f539..d9f4a1ece 100644
--- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h
+++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h
@@ -9,7 +9,7 @@
typedef enum {
/* 0 */ BG_NUMA_HANA_TYPE_NORMAL,
- /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION,
+ /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION
} BgNumaHanaType;
struct BgNumaHana;
diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
index a7ea2e6ea..0503517a4 100644
--- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
@@ -23,8 +23,8 @@ void func_80ACAE5C(BgOpenShutter* this, PlayState* play);
void func_80ACAEF0(BgOpenShutter* this, PlayState* play);
typedef enum {
- /* 0x1 */ BGOPENSHUTTER_DOOR_OPEN = 1,
- /* 0x2 */ BGOPENSHUTTER_DOOR_CLOSED,
+ /* 1 */ BGOPENSHUTTER_DOOR_OPEN = 1,
+ /* 2 */ BGOPENSHUTTER_DOOR_CLOSED
} BGOpenShutterDoorState;
ActorInit Bg_Open_Shutter_InitVars = {
@@ -68,10 +68,10 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) {
f32 temp_fv0;
s16 temp_v0;
- if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer < 100.0f)) {
- temp_fv0 = func_80ACAB10(play, &this->dyna.actor, 0.0f, 65.0f, 15.0f);
+ if (!Player_InCsMode(play) && (this->slidingDoor.dyna.actor.xzDistToPlayer < 100.0f)) {
+ temp_fv0 = func_80ACAB10(play, &this->slidingDoor.dyna.actor, 0.0f, 65.0f, 15.0f);
if (fabsf(temp_fv0) < 50.0f) {
- temp_v0 = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
+ temp_v0 = player->actor.shape.rot.y - this->slidingDoor.dyna.actor.shape.rot.y;
if (temp_fv0 > 0.0f) {
temp_v0 = (0x8000 - temp_v0);
}
@@ -91,31 +91,32 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) {
void BgOpenShutter_Init(Actor* thisx, PlayState* play) {
BgOpenShutter* this = THIS;
- Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_open_obj_Colheader_001640);
+ Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->slidingDoor.dyna, DYNA_TRANSFORM_POS);
+ DynaPolyActor_LoadMesh(play, &this->slidingDoor.dyna, &object_open_obj_Colheader_001640);
this->actionFunc = func_80ACAD88;
}
void BgOpenShutter_Destroy(Actor* thisx, PlayState* play) {
BgOpenShutter* this = THIS;
- s32 params = BGOPENSHUTTER_GET_A(thisx);
+ s32 transition = DOOR_GET_TRANSITION_ID(thisx);
- play->transitionActors.list[params].id = -play->transitionActors.list[params].id;
- DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ play->transitionActors.list[transition].id = -play->transitionActors.list[transition].id;
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->slidingDoor.dyna.bgId);
}
void func_80ACAD88(BgOpenShutter* this, PlayState* play) {
s32 doorDirection;
- if (this->unk_15C != 0) {
+ if (this->slidingDoor.unk_15C != 0) {
Player* player = GET_PLAYER(play);
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
- Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->dyna.actor, player->unk_3BA, 0.0f, 12, 15, 10);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex, 0.0f,
+ 12, 15, 10);
this->unk_164 = 0;
this->actionFunc = func_80ACAE5C;
- this->dyna.actor.velocity.y = 0.0f;
+ this->slidingDoor.dyna.actor.velocity.y = 0.0f;
} else {
Player* player = GET_PLAYER(play);
@@ -123,20 +124,20 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) {
if (doorDirection > 0) {
player->doorType = PLAYER_DOORTYPE_SLIDING;
player->doorDirection = doorDirection;
- player->doorActor = &this->dyna.actor;
+ player->doorActor = &this->slidingDoor.dyna.actor;
func_80122F28(player);
}
}
}
void func_80ACAE5C(BgOpenShutter* this, PlayState* play) {
- Math_StepToF(&this->dyna.actor.velocity.y, 15.0f, 3.0f);
- if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 120.0f,
- this->dyna.actor.velocity.y)) {
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f);
+ if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 120.0f,
+ this->slidingDoor.dyna.actor.velocity.y)) {
this->unk_164++;
}
if (this->unk_164 >= 10) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
this->actionFunc = func_80ACAEF0;
}
}
@@ -145,20 +146,22 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) {
s32 pad;
s16 quakeIndex;
- Math_StepToF(&this->dyna.actor.velocity.y, 20.0f, 8.0f);
- if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, this->dyna.actor.velocity.y)) {
- this->dyna.actor.floorHeight = this->dyna.actor.home.pos.y;
- Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 60.0f, 10, 8.0f, 500, 10, true);
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f);
+ if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y,
+ this->slidingDoor.dyna.actor.velocity.y)) {
+ this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y;
+ Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos, 60.0f,
+ 10, 8.0f, 500, 10, true);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND);
quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3);
Quake_SetSpeed(quakeIndex, -32536);
Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0);
Quake_SetDuration(quakeIndex, 10);
- Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 180, 20, 100);
+ Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100);
- this->unk_15C = 0;
+ this->slidingDoor.unk_15C = 0;
this->actionFunc = func_80ACAD88;
}
}
@@ -172,14 +175,14 @@ void BgOpenShutter_Update(Actor* thisx, PlayState* play2) {
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_124);
if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_OPEN) {
if (this->actionFunc == func_80ACAD88) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
this->actionFunc = func_80ACAE5C;
- this->dyna.actor.velocity.y = 0.0f;
+ this->slidingDoor.dyna.actor.velocity.y = 0.0f;
}
this->unk_164 = 0;
} else if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_CLOSED) {
if (this->actionFunc == func_80ACAE5C) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
this->actionFunc = func_80ACAEF0;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h
index f6c6067d4..c035606b1 100644
--- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h
+++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h
@@ -2,16 +2,14 @@
#define Z_BG_OPEN_SHUTTER_H
#include "global.h"
-
-#define BGOPENSHUTTER_GET_A(thisx) ((u16)((thisx)->params) >> 0xA)
+#include "z64door.h"
struct BgOpenShutter;
typedef void (*BgOpenShutterActionFunc)(struct BgOpenShutter*, PlayState*);
typedef struct BgOpenShutter {
- /* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ s16 unk_15C;
+ /* 0x000 */ SlidingDoorActor slidingDoor;
/* 0x160 */ BgOpenShutterActionFunc actionFunc;
/* 0x164 */ s32 unk_164;
} BgOpenShutter; // size = 0x168
diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c
index 275b1b565..b5eb3130a 100644
--- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c
+++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c
@@ -64,9 +64,10 @@ void BgOpenSpot_Draw(Actor* thisx, PlayState* play) {
BgOpenSpot* this = (BgOpenSpot*)thisx;
AnimatedMat_Draw(play, this->texScrolls);
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER);
gSPDisplayList(POLY_XLU_DISP++, gSpotlightLeftDL);
diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
index 0ebae5c1e..c11df8af1 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
@@ -240,7 +240,7 @@ void func_809CE234(BgSpdweb* this, PlayState* play) {
spA8.y = this->dyna.actor.world.pos.y;
for (i = 0; i < 6; i++) {
- temp_s0 = (s32)randPlusMinusPoint5Scaled(10240.0f) + phi_s2;
+ temp_s0 = (s32)Rand_CenteredFloat(0x2800) + phi_s2;
temp_f24 = Math_SinS(temp_s0);
temp_f22 = Math_CosS(temp_s0);
@@ -323,7 +323,8 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
this->unk_162--;
}
- this->dyna.actor.world.pos.y = (sin_rad(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y;
+ this->dyna.actor.world.pos.y =
+ (Math_SinF(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y;
Math_ApproachZeroF(&this->unk_164, 1.0f, 0.8f);
if (this->unk_162 == 4) {
@@ -388,7 +389,7 @@ void func_809CE830(BgSpdweb* this, PlayState* play) {
spC4.z = this->dyna.actor.world.pos.z + 90.0f * sinQ * cosF1;
for (i = 0; i < 6; i++) {
- temp_s0 = (s32)randPlusMinusPoint5Scaled(0x2800) + temp_s3;
+ temp_s0 = (s32)Rand_CenteredFloat(0x2800) + temp_s3;
sinF2 = Math_SinS(temp_s0);
cosF2 = Math_CosS(temp_s0);
@@ -496,7 +497,7 @@ void BgSpdweb_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
if (thisx->params == BGSPDWEB_FF_1) {
gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c
index fdf56d87c..9349b8188 100644
--- a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c
+++ b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c
@@ -189,7 +189,7 @@ void BgSpoutFire_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- gfx = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
+ gfx = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
POLY_XLU_DISP = gfx;
gSPSegment(&gfx[0], 0x08, sFlameTextures[this->flameTexIndex]);
gDPSetPrimColor(&gfx[1], 0, 1, 255, 255, 0, 150);
diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
index 17722bda2..5302c6a90 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
@@ -16,7 +16,6 @@ void BgTobira01_Destroy(Actor* thisx, PlayState* play);
void BgTobira01_Update(Actor* thisx, PlayState* play);
void BgTobira01_Draw(Actor* thisx, PlayState* play);
-/*
const ActorInit Bg_Tobira01_InitVars = {
ACTOR_BG_TOBIRA01,
ACTORCAT_PROP,
@@ -28,14 +27,80 @@ const ActorInit Bg_Tobira01_InitVars = {
(ActorFunc)BgTobira01_Update,
(ActorFunc)BgTobira01_Draw,
};
-*/
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/func_80B12430.s")
+void BgTobira01_Action(BgTobira01* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s16 csId = this->dyna.actor.csId;
+ s16 prevPosYTick;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Init.s")
+ if (this->cutsceneRequested) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
+ this->cutsceneRequested = false;
+ } else {
+ CutsceneManager_Queue(csId);
+ }
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (this->posYTick == 0) &&
+ (play->actorCtx.playerImpact.timer != 0) &&
+ (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) &&
+ (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) {
+ this->cutsceneRequested = true;
+ this->unk16C = 0;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Destroy.s")
+ prevPosYTick = this->posYTick;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE)) {
+ this->posYTick++;
+ } else {
+ this->posYTick--;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Update.s")
+ this->posYTick = CLAMP(this->posYTick, 0, 60);
+ if (prevPosYTick != this->posYTick) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG);
+ this->dyna.actor.world.pos.y = this->posY = (this->posYTick * (5.0f / 3.0f)) + this->dyna.actor.home.pos.y;
+ this->timer = 180;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Draw.s")
+ if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) &&
+ (DECR(this->timer) == 0)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
+ }
+}
+
+void BgTobira01_Init(Actor* thisx, PlayState* play) {
+ BgTobira01* this = THIS;
+
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
+ Actor_SetScale(&this->dyna.actor, 1.0f);
+ this->timer = gSaveContext.save.isNight;
+ this->posYTick = 0;
+ this->actionFunc = BgTobira01_Action;
+}
+
+void BgTobira01_Destroy(Actor* thisx, PlayState* play) {
+ BgTobira01* this = THIS;
+
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+}
+
+void BgTobira01_Update(Actor* thisx, PlayState* play) {
+ BgTobira01* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+void BgTobira01_Draw(Actor* thisx, PlayState* play) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gGoronDoorDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
index 9ddd0233d..b53c2302e 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
@@ -5,9 +5,16 @@
struct BgTobira01;
+typedef void (*BgTobira01ActionFunc)(struct BgTobira01*, PlayState*);
+
typedef struct BgTobira01 {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x2C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ BgTobira01ActionFunc actionFunc;
+ /* 0x160 */ s16 posYTick;
+ /* 0x162 */ s16 timer;
+ /* 0x164 */ f32 posY;
+ /* 0x168 */ s32 cutsceneRequested;
+ /* 0x16C */ s32 unk16C;
} BgTobira01; // size = 0x170
#endif // Z_BG_TOBIRA01_H
diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
index d4d2c7274..132f8f13f 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
@@ -89,13 +89,12 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
- this->objectIndex = BG_UMAJUMP_GET_OBJECT_INDEX(thisx);
- thisx->params = BG_UMAJUMP_GET_FF(thisx);
+ this->pathIndex = BG_UMAJUMP_GET_PATH_INDEX(thisx);
+ thisx->params = BG_UMAJUMP_GET_TYPE(thisx);
- if ((thisx->params == BG_UMAJUMP_TYPE_2)) {
- if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) &&
- !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) &&
- (thisx->csId != CS_ID_NONE)) {
+ if (thisx->params == BG_UMAJUMP_TYPE_2) {
+ if ((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20) &&
+ !CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && (thisx->csId != CS_ID_NONE)) {
this->actionFunc = BgUmajump_CheckDistance;
thisx->update = func_8091A5A0;
thisx->flags |= ACTOR_FLAG_10;
@@ -134,11 +133,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) {
Actor_SetObjectDependency(play, &this->dyna.actor);
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
}
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
}
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_4) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_3)) {
@@ -155,11 +154,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) {
this->dyna.actor.update = func_8091A5A0;
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) {
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
- if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
}
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) &&
- (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) ||
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) ||
((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) &&
((gSaveContext.save.time >= CLOCK_TIME(5, 30)) &&
(gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) {
@@ -191,18 +190,18 @@ void func_8091A5A0(Actor* thisx, PlayState* play) {
}
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
- if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
- } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) {
if ((this->dyna.bgId == BGACTOR_NEG_ONE) &&
- (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) ||
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) ||
((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) &&
(gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0))))) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
- } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) &&
+ } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) &&
((gSaveContext.save.day != 2) || (gSaveContext.save.isNight != true) ||
(gSaveContext.save.time < CLOCK_TIME(5, 30)) || (gSaveContext.save.time > CLOCK_TIME(6, 0)))) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
index 62aaf6cb7..ae35ac98c 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
@@ -3,16 +3,16 @@
#include "global.h"
-#define BG_UMAJUMP_GET_OBJECT_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
-#define BG_UMAJUMP_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define BG_UMAJUMP_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
+#define BG_UMAJUMP_GET_TYPE(thisx) ((thisx)->params & 0xFF)
typedef enum {
- BG_UMAJUMP_TYPE_1 = 1,
- BG_UMAJUMP_TYPE_2,
- BG_UMAJUMP_TYPE_3,
- BG_UMAJUMP_TYPE_4,
- BG_UMAJUMP_TYPE_5,
- BG_UMAJUMP_TYPE_6,
+ /* 1 */ BG_UMAJUMP_TYPE_1 = 1,
+ /* 2 */ BG_UMAJUMP_TYPE_2,
+ /* 3 */ BG_UMAJUMP_TYPE_3,
+ /* 4 */ BG_UMAJUMP_TYPE_4,
+ /* 5 */ BG_UMAJUMP_TYPE_5,
+ /* 6 */ BG_UMAJUMP_TYPE_6
} BgUmaJumpType;
struct BgUmajump;
@@ -24,7 +24,8 @@ typedef struct BgUmajump {
/* 0x15C */ BgUmajumpActionFunc actionFunc;
/* 0x160 */ union {
s32 objectIndex;
- s32 rotationTimer; // y rotation
+ s32 rotationTimer; // y rotation
+ s32 pathIndex;
};
/* 0x164 */ s32 hasSoundPlayed;
/* 0x168 */ Actor* horse;
diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c
index eae9fe0b3..5b19594fb 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c
@@ -485,9 +485,9 @@ void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) {
if (effects->type == TWINMOLD_EFFECT_NONE) {
effects->type = TWINMOLD_EFFECT_SAND;
effects->pos = *pos;
- effects->velocity.x = randPlusMinusPoint5Scaled(30.0f);
+ effects->velocity.x = Rand_CenteredFloat(30.0f);
effects->velocity.y = Rand_ZeroFloat(7.0f) + 7.0f;
- effects->velocity.z = randPlusMinusPoint5Scaled(30.0f);
+ effects->velocity.z = Rand_CenteredFloat(30.0f);
effects->accel.y = -0.3f;
effects->scale = scale;
effects->alpha = 255;
@@ -507,9 +507,9 @@ void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) {
effects->type = TWINMOLD_EFFECT_FRAGMENT;
effects->pos = *pos;
effects->timer = Rand_ZeroFloat(20.0f);
- effects->velocity.x = randPlusMinusPoint5Scaled(50.0f);
- effects->velocity.y = randPlusMinusPoint5Scaled(50.0f);
- effects->velocity.z = randPlusMinusPoint5Scaled(50.0f);
+ effects->velocity.x = Rand_CenteredFloat(50.0f);
+ effects->velocity.y = Rand_CenteredFloat(50.0f);
+ effects->velocity.z = Rand_CenteredFloat(50.0f);
effects->accel.z = 0.0f;
effects->accel.x = 0.0f;
effects->accel.y = -1.5f;
@@ -553,7 +553,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->actor.params == TWINMOLD_RED)) {
sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f,
0.0f, 0, 0, 0, 1);
- Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, BHEART_PARAM_NORMAL);
}
this->actor.targetMode = 10;
@@ -774,8 +774,8 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->actor.world.pos.z = player->actor.world.pos.z;
this->actor.world.pos.y = player->actor.world.pos.y - (600.0f * D_809DF5B0);
} else {
- this->actor.world.pos.x = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0);
- this->actor.world.pos.z = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0);
+ this->actor.world.pos.x = Rand_CenteredFloat(5000.0f * D_809DF5B0);
+ this->actor.world.pos.z = Rand_CenteredFloat(5000.0f * D_809DF5B0);
this->actor.world.pos.y = -500.0f * D_809DF5B0;
if (sIsInGiantMode) {
this->actor.world.pos.y += 3150.0f;
@@ -802,8 +802,8 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_0146[0] = 150;
} else {
this->unk_0144 = 2;
- this->unk_01B0.x = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0);
- this->unk_01B0.z = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0);
+ this->unk_01B0.x = Rand_CenteredFloat(3000.0f * D_809DF5B0);
+ this->unk_01B0.z = Rand_CenteredFloat(3000.0f * D_809DF5B0);
if ((fabsf(this->unk_01B0.x) < (500.0f * D_809DF5B0)) &&
(fabsf(this->unk_01B0.z) < (500.0f * D_809DF5B0))) {
this->unk_01B0.x = 500.0f;
@@ -847,12 +847,12 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_01B0.z = player->actor.world.pos.z;
if (this->unk_0146[0] == 0) {
this->unk_0144 = 3;
- this->unk_01B0.x = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.x;
+ this->unk_01B0.x = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.x;
this->unk_01B0.y = -3000.0f * D_809DF5B0;
if (sIsInGiantMode) {
this->unk_01B0.y += 3150.0f;
}
- this->unk_01B0.z = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.z;
+ this->unk_01B0.z = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.z;
this->unk_0146[0] = 150;
this->unk_0164 = 0.0f;
}
@@ -917,7 +917,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
Matrix_MultVecZ(1500.0f * D_809DF5B0, &spA4);
this->unk_0146[0] = 50;
this->unk_01B0.x = player->actor.world.pos.x + spA4.x;
- this->unk_01B0.y = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0);
+ this->unk_01B0.y = Rand_CenteredFloat(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0);
if (sIsInGiantMode) {
this->unk_01B0.y += 3150.0f;
}
@@ -963,7 +963,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->actor.gravity = -1.0f * D_809DF5B0;
this->actor.velocity.y = 0.0f;
this->actor.terminalVelocity = -1000.0f * D_809DF5B0;
- this->unk_0164 = randPlusMinusPoint5Scaled(0.05f);
+ this->unk_0164 = Rand_CenteredFloat(0.05f);
spCC = player->actor.world.pos.x - this->actor.world.pos.x;
spC4 = player->actor.world.pos.z - this->actor.world.pos.z;
@@ -1205,16 +1205,16 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_SAND_OLD - SFX_FLAG);
if (this->unk_0144 > 20) {
- sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x;
- sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y;
- sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z;
+ sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x;
+ sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y;
+ sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z;
Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f);
}
if ((this->unk_014C % 2) == 0) {
- sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x;
- sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y;
- sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z;
+ sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x;
+ sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y;
+ sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z;
Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f);
}
}
@@ -1349,7 +1349,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->actor.params == 0) {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldRedSkinTex));
@@ -1521,8 +1521,8 @@ void Boss02_DrawEffects(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) {
if (effect->type == TWINMOLD_EFFECT_SAND) {
@@ -1971,7 +1971,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
temp_a0_5->scale.z *= phi_f0_2;
if (temp_a0_5->id == ACTOR_ITEM_B_HEART) {
- ((ItemBHeart*)temp_a0_5)->unk_168 *= phi_f0_2;
+ ((ItemBHeart*)temp_a0_5)->baseScale *= phi_f0_2;
}
}
temp_a0_5 = temp_a0_5->next;
@@ -2210,10 +2210,12 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
this->unk_1D7E = 0;
if (!sIsInGiantMode) {
- Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0,
+ BHEART_PARAM_NORMAL);
phi_f0 = 60.0f;
} else {
- Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, 35);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0,
+ BHEART_PARAM_SMALL);
phi_f0 = 3155.0f;
}
sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1,
diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.h b/src/overlays/actors/ovl_Boss_02/z_boss_02.h
index e7efc1199..4fbd8b471 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h
@@ -27,15 +27,15 @@ typedef enum {
/* 1 */ TWINMOLD_EFFECT_SAND, // The sand kicked up when Twinmold touches the ground
/* 2 */ TWINMOLD_EFFECT_BLACK_DUST, // Unused
/* 3 */ TWINMOLD_EFFECT_FRAGMENT, // The fragments that fly off when the parts of Twinmold explode
- /* 4 */ TWINMOLD_EFFECT_FLASH, // The flashes of light that appear when the parts of Twinmold explode
+ /* 4 */ TWINMOLD_EFFECT_FLASH // The flashes of light that appear when the parts of Twinmold explode
} TwinmoldEffectType;
typedef enum {
/* 0 */ TWINMOLD_RED,
/* 35 */ TWINMOLD_BLUE = 35,
/* 100 */ TWINMOLD_TAIL = 100,
- /* 200 */ TWINMOLD_STATIC = 200,
-} TwinmoldParams;
+ /* 200 */ TWINMOLD_STATIC = 200
+} TwinmoldParam;
typedef struct Boss02 {
/* 0x0000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c
index 054b612bc..d44c961e9 100644
--- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c
+++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c
@@ -51,6 +51,7 @@
#include "z_boss_03.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h"
+#include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_water_effect/object_water_effect.h"
@@ -161,8 +162,8 @@ void Boss03_SpawnEffectDroplet(PlayState* play, Vec3f* pos) {
eff->unk_34.y = 0.0f;
eff->unk_34.z = Rand_ZeroFloat(2 * M_PI);
eff->unk_02 = Rand_ZeroFloat(100.0f);
- eff->velocity.x = randPlusMinusPoint5Scaled(25.0f);
- eff->velocity.z = randPlusMinusPoint5Scaled(25.0f);
+ eff->velocity.x = Rand_CenteredFloat(25.0f);
+ eff->velocity.z = Rand_CenteredFloat(25.0f);
return;
}
@@ -424,17 +425,17 @@ void Boss03_SpawnDust(Boss03* this, PlayState* play) {
Vec3f accel;
for (i = 0; i < 5; i++) {
- velocity.x = randPlusMinusPoint5Scaled(10.0f);
+ velocity.x = Rand_CenteredFloat(10.0f);
velocity.y = Rand_ZeroFloat(2.0f) + 2.0f;
- velocity.z = randPlusMinusPoint5Scaled(10.0f);
+ velocity.z = Rand_CenteredFloat(10.0f);
accel.y = -0.075f;
accel.z = 0.0f;
accel.x = 0.0f;
pos.y = Rand_ZeroFloat(20.0f) + 5.0f;
- pos.z = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.z;
- pos.x = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.x;
+ pos.z = Rand_CenteredFloat(150.0f) + this->insideJawPos.z;
+ pos.x = Rand_CenteredFloat(150.0f) + this->insideJawPos.x;
func_800B0EB0(play, &pos, &velocity, &accel, &sGyorgDustPrimColor, &sGyorgDustEnvColor,
Rand_ZeroFloat(200.0f) + 400.0f, 10, Rand_ZeroFloat(10.0f) + 25.0f);
@@ -451,7 +452,8 @@ void Boss03_Init(Actor* thisx, PlayState* play2) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0,
0, ENDOORWARP1_FF_1);
- Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, 0);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0,
+ BHEART_PARAM_NORMAL);
Actor_Kill(&this->actor);
return;
}
@@ -595,9 +597,9 @@ void func_809E34B8(Boss03* this, PlayState* play) {
if (this->workTimer[WORK_TIMER_UNK2_A] == 0) {
if ((sqrtf(SQ(xDiff) + SQ(zDiff)) < 100.0f) || (this->workTimer[WORK_TIMER_UNK0_A] == 0)) {
for (i = 0; i < 200; i++) {
- this->unk_268.x = randPlusMinusPoint5Scaled(2500.0f);
+ this->unk_268.x = Rand_CenteredFloat(2500.0f);
this->unk_268.y = Rand_ZeroFloat(100.0f) + 150.0f;
- this->unk_268.z = randPlusMinusPoint5Scaled(2500.0f);
+ this->unk_268.z = Rand_CenteredFloat(2500.0f);
xDiff = this->unk_268.x - this->actor.world.pos.x;
zDiff = this->unk_268.z - this->actor.world.pos.z;
@@ -1098,9 +1100,9 @@ void Boss03_JumpOverPlatform(Boss03* this, PlayState* play) {
Vec3f sp30;
for (i = 0; i < 3; i++) {
- sp30.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(150.0f);
+ sp30.x = this->actor.world.pos.x + Rand_CenteredFloat(150.0f);
sp30.y = this->actor.world.pos.y;
- sp30.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(150.0f);
+ sp30.z = this->actor.world.pos.z + Rand_CenteredFloat(150.0f);
Boss03_SpawnEffectDroplet(play, &sp30);
}
}
@@ -1335,9 +1337,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
if (1) {}
for (i = 0; i < 3; i++) {
- effectPos.x = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.x;
+ effectPos.x = Rand_CenteredFloat(150.0f) + this->actor.world.pos.x;
effectPos.y = this->actor.world.pos.y;
- effectPos.z = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.z;
+ effectPos.z = Rand_CenteredFloat(150.0f) + this->actor.world.pos.z;
Boss03_SpawnEffectDroplet(play, &effectPos);
}
@@ -1397,9 +1399,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
this->subCamEye = this->actor.world.pos;
for (i = 0; i < bubblesToSpawnNum; i++) {
- effectPos.x = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.x;
- effectPos.y = (randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.y) - 150.0f;
- effectPos.z = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.z;
+ effectPos.x = Rand_CenteredFloat(100.0f) + this->subCamAt.x;
+ effectPos.y = (Rand_CenteredFloat(100.0f) + this->subCamAt.y) - 150.0f;
+ effectPos.z = Rand_CenteredFloat(100.0f) + this->subCamAt.z;
Boss03_SpawnEffectBubble(play, &effectPos);
}
@@ -1571,17 +1573,15 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
this->actor.speed = ((Rand_ZeroFloat(5.0f) + 2.5f) * sp64) + 2.5f;
if (Rand_ZeroOne() < 0.5f) {
- this->shapeRotTargetX =
- ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetX) + 0x8000;
+ this->shapeRotTargetX = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetX) + 0x8000;
}
if (Rand_ZeroOne() < 0.5f) {
- this->shapeRotTargetZ =
- ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetZ) + 0x8000;
+ this->shapeRotTargetZ = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetZ) + 0x8000;
}
if (Rand_ZeroOne() < 0.5f) {
- this->shapeRotTargetY = Rand_ZeroFloat(65536.0f);
+ this->shapeRotTargetY = Rand_ZeroFloat(0x10000);
}
this->actor.world.rot.y = Math_Atan2S_XY(-this->actor.world.pos.z, -this->actor.world.pos.x);
@@ -1598,9 +1598,9 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
sp4C = 150.0f * sp64;
for (i = 0; i < 1; i++) {
- sp78.x = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.x;
+ sp78.x = Rand_CenteredFloat(sp4C) + this->actor.world.pos.x;
sp78.y = this->actor.world.pos.y;
- sp78.z = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.z;
+ sp78.z = Rand_CenteredFloat(sp4C) + this->actor.world.pos.z;
Boss03_SpawnEffectDroplet(play, &sp78);
}
@@ -1610,7 +1610,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f,
0, 0, 0, ENDOORWARP1_FF_1);
Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, this->actor.focus.pos.x, PLATFORM_HEIGHT,
- this->actor.focus.pos.z, 0, 0, 0, 0);
+ this->actor.focus.pos.z, 0, 0, 0, BHEART_PARAM_NORMAL);
this->csTimer = 0;
Actor_SetScale(&this->actor, 0.0f);
AudioSfx_StopByPos(&this->actor.projectedPos);
@@ -1842,16 +1842,16 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(sHeadJntSphElementsInit); i++) {
if (this->headCollider.elements[i].info.toucherFlags & TOUCH_HIT) {
this->headCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT;
- player->unk_B84 = this->actor.shape.rot.y;
- player->unk_B80 = 20.0f;
+ player->pushedYaw = this->actor.shape.rot.y;
+ player->pushedSpeed = 20.0f;
}
}
for (i = 0; i < ARRAY_COUNT(sBodyJntSphElementsInit); i++) {
if (this->bodyCollider.elements[i].info.toucherFlags & TOUCH_HIT) {
this->bodyCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT;
- player->unk_B84 = this->actor.shape.rot.y;
- player->unk_B80 = 20.0f;
+ player->pushedYaw = this->actor.shape.rot.y;
+ player->pushedSpeed = 20.0f;
}
}
}
@@ -2071,9 +2071,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
if ((this->unk_240 % 2) == 0) {
for (i = 0; i < this->bubbleEffectSpawnCount; i++) {
- bubblePos.x = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.x;
- bubblePos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.y;
- bubblePos.z = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.z;
+ bubblePos.x = Rand_CenteredFloat(100.0f) + this->actor.world.pos.x;
+ bubblePos.y = Rand_CenteredFloat(100.0f) + this->actor.world.pos.y;
+ bubblePos.z = Rand_CenteredFloat(100.0f) + this->actor.world.pos.z;
Boss03_SpawnEffectBubble(play, &bubblePos);
}
@@ -2104,9 +2104,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
if (this->wetSpotEffectSpawnCount != 0) {
this->wetSpotEffectSpawnCount--;
- wetSpotPos.x = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.x;
+ wetSpotPos.x = Rand_CenteredFloat(50.0f) + player->actor.world.pos.x;
wetSpotPos.y = PLATFORM_HEIGHT;
- wetSpotPos.z = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.z;
+ wetSpotPos.z = Rand_CenteredFloat(50.0f) + player->actor.world.pos.z;
Boss03_SpawnEffectWetSpot(play, &wetSpotPos);
}
}
@@ -2129,9 +2129,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
for (j = 0, i = 0; i < 20; j++) {
Matrix_RotateYF(yRot, MTXMODE_NEW);
Matrix_MultVecZ(Rand_ZeroFloat(60.000004f) + 312.0f, &dropletPos);
- dropletPos.x += this->unk_284 + randPlusMinusPoint5Scaled(40.0f);
+ dropletPos.x += this->unk_284 + Rand_CenteredFloat(40.0f);
dropletPos.y = PLATFORM_HEIGHT;
- dropletPos.z += this->unk_28C + randPlusMinusPoint5Scaled(40.0f);
+ dropletPos.z += this->unk_28C + Rand_CenteredFloat(40.0f);
if (sqrtf(SQ(dropletPos.x) + SQ(dropletPos.z)) < 355.0f) {
Boss03_SpawnEffectDroplet(play, &dropletPos);
@@ -2263,7 +2263,7 @@ void Boss03_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (!this->unk_2D5) {
if ((this->unk_25E % 2) != 0) {
@@ -2394,8 +2394,8 @@ void Boss03_DrawEffects(PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) {
if (eff->type == GYORG_EFFECT_BUBBLE) {
@@ -2426,7 +2426,7 @@ void Boss03_DrawEffects(PlayState* play) {
if ((eff->type == GYORG_EFFECT_DROPLET) || (eff->type == GYORG_EFFECT_SPLASH)) {
if (!flag) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex));
gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260);
@@ -2460,7 +2460,7 @@ void Boss03_DrawEffects(PlayState* play) {
for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) {
if (eff->type == GYORG_EFFECT_WET_SPOT) {
if (!flag) {
- func_8012C448(gfxCtx);
+ Gfx_SetupDL44_Xlu(gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex));
gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0);
@@ -2597,7 +2597,7 @@ void Boss03_SeaweedDraw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x0D, mtx);
diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.h b/src/overlays/actors/ovl_Boss_03/z_boss_03.h
index a00dbacff..236606369 100644
--- a/src/overlays/actors/ovl_Boss_03/z_boss_03.h
+++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.h
@@ -31,7 +31,7 @@ typedef enum {
/* 1 */ GYORG_EFFECT_BUBBLE,
/* 2 */ GYORG_EFFECT_DROPLET,
/* 3 */ GYORG_EFFECT_SPLASH,
- /* 4 */ GYORG_EFFECT_WET_SPOT,
+ /* 4 */ GYORG_EFFECT_WET_SPOT
} GyorgEffectType;
typedef struct Boss03 {
diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c
index 80fc52a22..4e22822a4 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c
@@ -439,8 +439,8 @@ void func_809ECD18(Boss04* this, PlayState* play) {
if (Rand_ZeroOne() < 0.1f) {
Math_Vec3f_Copy(&this->unk_6C8, &player->actor.world.pos);
} else {
- this->unk_6C8.x = randPlusMinusPoint5Scaled(600.0f) + this->unk_6E8;
- this->unk_6C8.z = randPlusMinusPoint5Scaled(600.0f) + this->unk_6F0;
+ this->unk_6C8.x = Rand_CenteredFloat(600.0f) + this->unk_6E8;
+ this->unk_6C8.z = Rand_CenteredFloat(600.0f) + this->unk_6F0;
}
}
@@ -818,7 +818,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_200 & 1) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099);
@@ -832,7 +832,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) {
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
if (this->actionFunc != func_809EC568) {
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL);
diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c
index 3d8beb79d..aa2929f28 100644
--- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c
+++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c
@@ -4,7 +4,6 @@
* Description: Igos du Ikana window - curtains and ray effects
*/
-#include "prevent_bss_reordering.h"
#include "z_boss_06.h"
#include "z64shrink_window.h"
#include "overlays/actors/ovl_En_Knight/z_en_knight.h"
@@ -516,8 +515,8 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
temp_v0 = gSaveContext.save.time;
if (temp_v0 > CLOCK_TIME(12, 0)) {
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
index cb34f8ff8..cba240947 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -258,7 +258,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255);
@@ -284,7 +284,7 @@ void func_808CDFF8(Actor* thisx, PlayState* play) {
OPEN_DISPS(gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 25);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25);
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
SkelCurve_Draw(&this->actor, play, &this->skelCurve, func_808CDE78, NULL, 1, &this->actor);
@@ -299,7 +299,7 @@ void func_808CE078(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255);
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
index 629f49398..1ee2b1c9d 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -506,7 +506,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) {
if (!(play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER)) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL);
@@ -598,7 +598,8 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
OPEN_DISPS(gfxCtx);
- func_8012C2DC(gfxCtx);
+
+ Gfx_SetupDL25_Xlu(gfxCtx);
for (i = 0; i < play->envCtx.unk_F2[3]; i++) {
worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x;
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
index 971adb3bd..cbee0a148 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
@@ -38,14 +38,14 @@ typedef struct DemoKankyo {
typedef enum {
/* 0 */ DEMO_KANKYO_TYPE_LOSTWOODS,
/* 1 */ DEMO_KANKYO_TYPE_GIANTS,
- /* 2 */ DEMO_KANKYO_TYPE_MOON,
+ /* 2 */ DEMO_KANKYO_TYPE_MOON
} DemoKankyoType;
typedef enum {
/* 0 */ DEMO_KANKYO_STATE_INIT,
/* 1 */ DEMO_KANKYO_STATE_SINGLE,
/* 2 */ DEMO_KANKYO_STATE_SKYFISH,
- /* 3 */ DEMO_KANKYO_STATE_DISABLED,
+ /* 3 */ DEMO_KANKYO_STATE_DISABLED
} DemoKankyoStateType;
#endif // Z_DEMO_KANKYO_H
diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c
index 76a4230f5..ec33a8a94 100644
--- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c
+++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c
@@ -15,8 +15,12 @@ void DemoMoonend_Destroy(Actor* thisx, PlayState* play);
void DemoMoonend_Update(Actor* thisx, PlayState* play);
void DemoMoonend_Draw(Actor* thisx, PlayState* play);
-#if 0
-ActorInit Demo_Moonend_InitVars = {
+void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play);
+void func_80C17B60(DemoMoonend* this, PlayState* play);
+void func_80C17C48(DemoMoonend* this, PlayState* play);
+void func_80C17FCC(Actor* thisx, PlayState* play);
+
+const ActorInit Demo_Moonend_InitVars = {
ACTOR_DEMO_MOONEND,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -28,28 +32,185 @@ ActorInit Demo_Moonend_InitVars = {
(ActorFunc)DemoMoonend_Draw,
};
-#endif
+void DemoMoonend_Init(Actor* thisx, PlayState* play) {
+ DemoMoonend* this = THIS;
-extern UNK_TYPE D_06001214;
-extern UNK_TYPE D_0600B540;
-extern UNK_TYPE D_060129F0;
+ Actor_SetScale(&this->actor, 0.1f);
+ this->actionFunc = DemoMoonend_DoNothing;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Init.s")
+ if (DEMOMOONEND_GET_PARAM_F(thisx) == 1) {
+ Actor_SetScale(&this->actor, 0.05f);
+ Actor_SetScale(&this->actor, 6.0f);
+ this->actor.draw = NULL;
+ this->cueType = CS_CMD_ACTOR_CUE_558;
+ this->actionFunc = func_80C17B60;
+ } else {
+ Actor_SetScale(&this->actor, 0.095f);
+ func_80183430(&this->skeletonInfo, &object_moonend_Blob_00B5A0, &object_moonend_Blob_001214, this->jointTable,
+ this->morphTable, NULL);
+ func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214);
+ this->cueType = CS_CMD_ACTOR_CUE_560;
+ this->actionFunc = func_80C17C48;
+ this->actor.home.rot.z = 0;
+ this->actor.draw = NULL;
+ this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Destroy.s")
+void DemoMoonend_Destroy(Actor* thisx, PlayState* play) {
+ DemoMoonend* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B50.s")
+ if (DEMOMOONEND_GET_PARAM_F(thisx) != 1) {
+ func_8018349C(&this->skeletonInfo);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B60.s")
+void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17C48.s")
+void func_80C17B60(DemoMoonend* this, PlayState* play) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Update.s")
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (this->cueId) {
+ case 1:
+ this->actor.draw = NULL;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17E70.s")
+ case 2:
+ this->actor.draw = func_80C17FCC;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17EE0.s")
+ default:
+ break;
+ }
+ }
+ if (this->cueId == 2) {
+ func_800B9010(&this->actor, NA_SE_EV_RAINBOW - SFX_FLAG);
+ }
+ } else {
+ this->actor.draw = NULL;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Draw.s")
+void func_80C17C48(DemoMoonend* this, PlayState* play) {
+ if (func_80183DE0(&this->skeletonInfo)) {
+ this->actor.home.rot.z = 0;
+ }
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17FCC.s")
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (this->cueId) {
+ case 1:
+ this->actor.draw = DemoMoonend_Draw;
+ func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214);
+ this->skeletonInfo.frameCtrl.unk_C = 0.0f;
+ break;
+
+ case 2:
+ this->actor.draw = DemoMoonend_Draw;
+ func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214);
+ this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_EXPLOSION);
+ this->actor.home.rot.z = 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+ if (this->actor.home.rot.z != 0) {
+ func_800B9010(&this->actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
+ }
+ } else {
+ this->actor.draw = NULL;
+ }
+ if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 8) && (play->csCtx.scriptIndex == 0)) {
+ switch (play->csCtx.curFrame) {
+ case 5:
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1);
+ break;
+
+ case 50:
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2);
+ break;
+
+ case 100:
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM3);
+ break;
+
+ case 150:
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2);
+ break;
+
+ case 200:
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM4);
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+void DemoMoonend_Update(Actor* thisx, PlayState* play) {
+ DemoMoonend* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+s32 func_80C17E70(PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx,
+ Vec3f* scale, Vec3s* rot, Vec3f* pos) {
+ DemoMoonend* this = THIS;
+
+ if (limbIndex == 2) {
+ Matrix_Push();
+ Matrix_RotateYS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000, MTXMODE_APPLY);
+ }
+
+ return true;
+}
+
+s32 func_80C17EE0(PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx,
+ Vec3f* scale, Vec3s* rot, Vec3f* pos) {
+ DemoMoonend* this = THIS;
+
+ if (limbIndex == 8) {
+ Matrix_Pop();
+ }
+
+ return true;
+}
+
+void DemoMoonend_Draw(Actor* thisx, PlayState* play) {
+ DemoMoonend* this = THIS;
+ Mtx* mtx;
+
+ AnimatedMat_Draw(play, (AnimatedMaterial*)Lib_SegmentedToVirtual(object_moonend_Matanimheader_00B540));
+
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
+
+ if (mtx != NULL) {
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ func_8018450C(play, &this->skeletonInfo, mtx, func_80C17E70, func_80C17EE0, &this->actor);
+ }
+}
+
+void func_80C17FCC(Actor* thisx, PlayState* play) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_moonend_Matanimheader_0129F0));
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, object_moonend_DL_010C40);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h
index d36dcb284..b56c60a9b 100644
--- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h
+++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h
@@ -2,14 +2,21 @@
#define Z_DEMO_MOONEND_H
#include "global.h"
+#include "objects/object_moonend/object_moonend.h"
struct DemoMoonend;
typedef void (*DemoMoonendActionFunc)(struct DemoMoonend*, PlayState*);
+#define DEMOMOONEND_GET_PARAM_F(thisx) (((thisx)->params) & 0xF)
+
typedef struct DemoMoonend {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x19C];
+ /* 0x144 */ SkeletonInfo skeletonInfo;
+ /* 0x174 */ Vec3s jointTable[30];
+ /* 0x228 */ Vec3s morphTable[30];
+ /* 0x2DC */ u16 cueType;
+ /* 0x2DE */ u16 cueId;
/* 0x2E0 */ DemoMoonendActionFunc actionFunc;
} DemoMoonend; // size = 0x2E4
diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
index 111ce284f..2d0aa27cd 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
@@ -487,7 +487,7 @@ void func_80C173B4(Actor* thisx, PlayState* play) {
mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_144.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
func_8018450C(play, &this->unk_144, mtx, (void*)func_80C170F8, 0, &this->actor);
}
@@ -514,7 +514,7 @@ void DemoSyoten_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->unk_3E4 & 4) {
Matrix_RotateZS(-this->actor.shape.rot.z, MTXMODE_APPLY);
@@ -553,7 +553,7 @@ void func_80C17690(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY);
if (this->unk_3E4 & 8) {
diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
index 1997a2bc5..19f99bf2f 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
@@ -12,13 +12,13 @@ typedef void (*DemoSyotenActionFunc)(struct DemoSyoten*, PlayState*);
#define DEMOSYOTEN_7E00_3F 0x3F
-enum {
+typedef enum {
/* 0 */ DEMOSYOTEN_F_0,
/* 1 */ DEMOSYOTEN_F_1,
/* 2 */ DEMOSYOTEN_F_2,
/* 3 */ DEMOSYOTEN_F_3,
/* 4 */ DEMOSYOTEN_F_4
-};
+} DemoSyotenParam;
typedef struct DemoSyoten {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
index b2b8e0077..2db282367 100644
--- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
+++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
@@ -24,11 +24,11 @@ void DemoTreLgt_SetupAnimate(DemoTreLgt* this, PlayState* play, f32 frame);
void DemoTreLgt_Animate(DemoTreLgt* this, PlayState* play);
typedef struct {
- f32 unk0;
- f32 unk4;
- f32 unk8;
- f32 unkC;
-} DemoTreLgtInfo;
+ /* 0x0 */ f32 unk0;
+ /* 0x4 */ f32 unk4;
+ /* 0x8 */ f32 unk8;
+ /* 0xC */ f32 unkC;
+} DemoTreLgtInfo; // size = 0x10
static DemoTreLgtInfo D_808E1490[2] = {
{ 1.0f, 136.0f, 190.0f, 40.0f },
@@ -53,8 +53,8 @@ static TransformUpdateIndex* sBoxLightAnimations[] = {
};
typedef enum {
- /* 0x00 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed
- /* 0x01 */ DEMO_TRE_LGT_ACTION_ANIMATE
+ /* 0 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed
+ /* 1 */ DEMO_TRE_LGT_ACTION_ANIMATE
} DemoTreLgtAction;
static DemoTreLgtActionFunc sActionFuncs[] = {
@@ -168,10 +168,12 @@ void DemoTreLgt_Draw(Actor* thisx, PlayState* play) {
DemoTreLgt* this = THIS;
OPEN_DISPS(gfxCtx);
+
if (this->action == DEMO_TRE_LGT_ACTION_ANIMATE) {
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 0, 0);
SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoTreLgt_OverrideLimbDraw, NULL, 1, &this->actor);
}
+
CLOSE_DISPS(gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c
index 12815a044..ddd012426 100644
--- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c
+++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c
@@ -113,7 +113,7 @@ Actor* func_80C1D78C(PlayState* play) {
}
tempActor = foundActor->next;
- if (tempActor == NULL || false) {
+ if ((tempActor == NULL) || false) {
foundActor = NULL;
break;
}
@@ -245,7 +245,7 @@ void DmAh_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1DE28[this->unk_284]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1DE20[0]));
diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c
index 43ca006f2..a7e3e4993 100644
--- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c
+++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c
@@ -152,7 +152,7 @@ void DmAl_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, DmAl_OverrideLimbDraw, DmAl_PostLimbDraw,
DmAl_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
index 4114b9f9c..3c77ed6c3 100644
--- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
+++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
@@ -22,8 +22,8 @@ typedef struct DmAl {
} DmAl; // size = 0x460
typedef enum {
- /* 0x0 */ MADAME_AROMA_ANIMATION_0,
- /* 0x1 */ MADAME_AROMA_ANIMATION_1
+ /* 0 */ MADAME_AROMA_ANIMATION_0,
+ /* 1 */ MADAME_AROMA_ANIMATION_1
} DmAlAnimations;
#endif // Z_DM_AL_H
diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c
index 2d474d111..86d57660f 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c
@@ -160,7 +160,7 @@ Actor* func_80C1C8E8(PlayState* play) {
}
tempActor = foundActor->next;
- if (tempActor == NULL || false) {
+ if ((tempActor == NULL) || false) {
foundActor = NULL;
break;
}
@@ -229,6 +229,9 @@ void func_80C1CAB0(DmAn* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
@@ -356,7 +359,7 @@ void func_80C1D0B0(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1D2F4[this->unk_2B8]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1D2E8[0]));
diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c
index 9e5ffed89..c6d93945b 100644
--- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c
+++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c
@@ -195,9 +195,11 @@ void DmBal_Draw(Actor* thisx, PlayState* play) {
DmBal* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
DmBal_OverrideLimbDraw, DmBal_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
index 8657a9dc9..fe4a83a91 100644
--- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
+++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
@@ -922,7 +922,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C94C(play->state.gfxCtx);
+ Gfx_SetupDL27_Xlu(play->state.gfxCtx);
do {
phi_a0 = (this->unk_262 * 50) & 511;
diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
index 7b700f4eb..33c6eed8f 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
@@ -74,8 +74,8 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
}
if (gSaveContext.sceneLayer == 0) {
- play->envCtx.unk_1F = 5;
- play->envCtx.unk_20 = 5;
+ play->envCtx.lightConfig = 5;
+ play->envCtx.changeLightNextConfig = 5;
}
this->unk_348 = 255.0f;
@@ -423,7 +423,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if ((u8)this->unk_348 == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
gDPPipeSync(POLY_OPA_DISP++);
@@ -435,7 +435,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gWoodfallSceneryDynamicPoisonWaterDL);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
gDPPipeSync(POLY_XLU_DISP++);
@@ -482,7 +482,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)this->unk_348);
diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h
index 6f29531a0..7ce8df7d2 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h
@@ -9,12 +9,12 @@ typedef void (*DmChar01ActionFunc)(struct DmChar01*, PlayState*);
#define DMCHAR01_GET(thisx) ((thisx)->params)
-enum {
+typedef enum {
/* 0 */ DMCHAR01_0,
/* 1 */ DMCHAR01_1,
/* 2 */ DMCHAR01_2,
- /* 3 */ DMCHAR01_3,
-};
+ /* 3 */ DMCHAR01_3
+} DmChar01Param;
typedef struct DmChar01 {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c
index ec1e12a8f..2f933c751 100644
--- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c
+++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c
@@ -35,7 +35,7 @@ typedef enum {
/* 0 */ DMCHAR02_ANIM_HIT_GROUND,
/* 1 */ DMCHAR02_ANIM_TURN_AROUND,
/* 2 */ DMCHAR02_ANIM_JUGGLE,
- /* 3 */ DMCHAR02_ANIM_FALL,
+ /* 3 */ DMCHAR02_ANIM_FALL
} DmChar02Animation;
static AnimationInfo sAnimationInfo[] = {
@@ -185,7 +185,7 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) {
}
if (shouldDraw) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, DmChar02_OverrideLimbDraw, DmChar02_PostLimbDraw,
DmChar02_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
index 21b9f94df..cb71b8515 100644
--- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
+++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
@@ -131,8 +131,8 @@ void func_80AAB710(DmChar03* this, PlayState* play) {
void func_80AAB838(DmChar03* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0);
- } else if ((Animation_OnFrame(&this->skelAnime, 10.0f)) || (Animation_OnFrame(&this->skelAnime, 18.0f)) ||
- (Animation_OnFrame(&this->skelAnime, 30.0f)) || (Animation_OnFrame(&this->skelAnime, 38.0f))) {
+ } else if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 18.0f) ||
+ Animation_OnFrame(&this->skelAnime, 30.0f) || Animation_OnFrame(&this->skelAnime, 38.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1);
}
}
@@ -163,9 +163,9 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) {
DmChar03* this = THIS;
if (!this->unk_18E) {
- if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) &&
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, DmChar03_OverrideLimbDraw, DmChar03_PostLimbDraw,
DmChar03_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c
index ac479344d..3375b522d 100644
--- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c
+++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c
@@ -136,7 +136,7 @@ void DmChar04_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C94C(play->state.gfxCtx);
+ Gfx_SetupDL27_Xlu(play->state.gfxCtx);
alpha = (this->timer * 50) & 0x1FF;
if (alpha > 255) {
alpha = 511 - alpha;
diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
index 6b85df5d3..e3dcec911 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
@@ -611,7 +611,7 @@ void func_80AAD998(Actor* thisx, PlayState* play) {
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id != 1)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, this->unk_19C, this->unk_1A0, this->unk_1A4, this->unk_1A8,
this->unk_1AC, this->unk_1B0);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw,
@@ -630,7 +630,7 @@ void func_80AADA90(Actor* thisx, PlayState* play) {
if (this->unk_18E == 0) {
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id != 1)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw,
DmChar05_PostLimbDraw, &this->actor);
}
@@ -645,7 +645,7 @@ void func_80AADB4C(Actor* thisx, PlayState* play) {
if (this->unk_18E == 0) {
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) &&
(play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id != 1)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, NULL, &this->actor);
}
@@ -663,7 +663,7 @@ void func_80AADC00(Actor* thisx, PlayState* play) {
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559);
if ((play->csCtx.actorCues[cueChannel]->id != 1) && (play->csCtx.actorCues[cueChannel]->id != 4)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw,
DmChar05_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
index 3bff39f6a..84f7c3e3e 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
@@ -9,7 +9,7 @@ typedef void (*DmChar05ActionFunc)(struct DmChar05*, PlayState*);
#define DMCHAR05_GET(thisx) ((thisx)->params)
-enum {
+typedef enum {
/* 0 */ DMCHAR05_0,
/* 1 */ DMCHAR05_1,
/* 2 */ DMCHAR05_2,
@@ -22,8 +22,8 @@ enum {
/* 9 */ DMCHAR05_9,
/* 10 */ DMCHAR05_10,
/* 11 */ DMCHAR05_11,
- /* 12 */ DMCHAR05_12,
-};
+ /* 12 */ DMCHAR05_12
+} DmChar05Param;
typedef struct DmChar05 {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c
index 747b2e0c9..591249c77 100644
--- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c
+++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c
@@ -78,7 +78,7 @@ void DmChar06_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Scene_SetRenderModeXlu(play, 1, 2);
gDPPipeSync(POLY_XLU_DISP++);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c
index 844be223e..c5c06958e 100644
--- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c
+++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c
@@ -75,7 +75,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
switch (this->dyna.actor.params) {
case DMCHAR07_STAGE:
@@ -112,7 +112,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
break;
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
switch (this->dyna.actor.params) {
case DMCHAR07_STAGE:
diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
index 35611375b..9f5d18967 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
@@ -38,8 +38,8 @@ typedef enum {
/* 2 */ TURTLE_EYEMODE_CLOSED,
/* 3 */ TURTLE_EYEMODE_LOOK_STRAIGHT,
/* 4 */ TURTLE_EYEMODE_UNUSED,
- /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT,
-} EyeMode;
+ /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT
+} TurtleEyeMode;
typedef enum {
/* 0 */ TURTLE_ANIM_IDLE,
@@ -48,7 +48,7 @@ typedef enum {
/* 3 */ TURTLE_ANIM_SPEAK1,
/* 4 */ TURTLE_ANIM_COUGH,
/* 5 */ TURTLE_ANIM_SPEAK2,
- /* 6 */ TURTLE_ANIM_YAWN,
+ /* 6 */ TURTLE_ANIM_YAWN
} TurtleAnimation;
ActorInit Dm_Char08_InitVars = {
@@ -1093,7 +1093,8 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) {
DmChar08* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex]));
@@ -1113,11 +1114,12 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gTurtleAsleepDL);
} else if (this->unk_1FF == 1) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Scene_SetRenderModeXlu(play, 2, 2);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gTurtleAsleepDL);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c
index 93fa0e94c..587ca059d 100644
--- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c
+++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c
@@ -129,7 +129,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
s32 i;
s32 cueChannel;
s32 max = 0;
- s32 pathnum;
+ s32 pathIndex;
u8 temp = false;
if (!DMCHAR09_GET_F(&this->actor)) {
@@ -160,12 +160,12 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
}
if (play->csCtx.actorCues[cueChannel]->id >= 2) {
- pathnum = DMCHAR09_GET_PATH(&this->actor);
- path = &play->setupPathList[pathnum];
+ pathIndex = DMCHAR09_GET_PATH_INDEX(&this->actor);
+ path = &play->setupPathList[pathIndex];
for (i = 0; i < max; i++) {
- pathnum = path->unk1;
- path = &play->setupPathList[pathnum];
+ pathIndex = path->additionalPathIndex;
+ path = &play->setupPathList[pathIndex];
}
this->unk_224 = Lib_SegmentedToVirtual(path->points);
@@ -175,7 +175,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
this->unk_220 = 1;
this->unk_22E = true;
- this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * 0.00390625f;
+ this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * (1.0f / 256.0f);
this->actionFunc = func_80AB1FDC;
} else {
this->unk_22E = false;
@@ -218,8 +218,8 @@ void DmChar09_Draw(Actor* thisx, PlayState* play) {
DmChar09* this = THIS;
if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E) {
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar09_OverrideLimbDraw, NULL,
&this->actor);
}
diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
index cfb3523e6..cca08d079 100644
--- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
+++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
@@ -4,7 +4,7 @@
#include "global.h"
#include "objects/object_bee/object_bee.h"
-#define DMCHAR09_GET_PATH(thisx) (((thisx)->params >> 4) & 0xF)
+#define DMCHAR09_GET_PATH_INDEX(thisx) (((thisx)->params >> 4) & 0xF)
#define DMCHAR09_GET_100(thisx) ((thisx)->params & 0x100)
#define DMCHAR09_GET_F(thisx) ((thisx)->params & 0xF)
diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
index 2cdddbf19..139d80bc3 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
@@ -160,7 +160,7 @@ Actor* func_80C24838(PlayState* play) {
}
tempActor = foundActor->next;
- if (tempActor == NULL || false) {
+ if ((tempActor == NULL) || false) {
foundActor = NULL;
break;
}
@@ -229,6 +229,9 @@ void func_80C24A00(DmGm* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
@@ -356,7 +359,7 @@ void func_80C25000(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C25244[this->unk_2B8]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C25238[0]));
diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c
index c42ad3c2b..0eb622b49 100644
--- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c
+++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c
@@ -96,7 +96,7 @@ void DmNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
void DmNb_Draw(Actor* thisx, PlayState* play) {
DmNb* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, NULL, DmNb_TransformLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
index 03fd093f3..964965cae 100644
--- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
+++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
@@ -14,7 +14,7 @@ typedef enum {
/* 0 */ DMOPSTAGE_TYPE_GROUND,
/* 1 */ DMOPSTAGE_TYPE_ROOT_TREE,
/* 2 */ DMOPSTAGE_TYPE_CUT_TREE,
- /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE,
+ /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE
} DmOpStageTypes;
typedef struct DmOpstage {
diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h
index 01b9b52af..fbc5fcb8b 100644
--- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h
+++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h
@@ -10,7 +10,7 @@ typedef void (*DmRavineActionFunc)(struct DmRavine*, PlayState*);
typedef enum {
/* 0 */ DM_RAVINE_STATE_INITIALIZED,
/* 1 */ DM_RAVINE_STATE_ACTIVE,
- /* 2 */ DM_RAVINE_STATE_PENDING_DEATH,
+ /* 2 */ DM_RAVINE_STATE_PENDING_DEATH
} DmRavineState;
typedef struct DmRavine {
diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c
index dc6d8bcef..83f635777 100644
--- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c
+++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c
@@ -108,7 +108,7 @@ void DmSa_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->alpha < 0xFF) {
gSPSegment(POLY_OPA_DISP++, 0x0C, func_80A2EB58(play->state.gfxCtx, this->alpha));
diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
index 9a9e14dbc..1787bcf6f 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
@@ -108,7 +108,7 @@ typedef enum {
/* 68 */ SK_ANIM_LOOK_LEFT_START,
/* 69 */ SK_ANIM_LOOK_LEFT_LOOP,
/* 70 */ SK_ANIM_SNIFF,
- /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF,
+ /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF
} SkullKidAnimation;
typedef enum {
@@ -116,7 +116,7 @@ typedef enum {
/* 1 */ SK_MASK_TYPE_NORMAL,
/* 2 */ SK_MASK_TYPE_GLOWING_EYES,
/* 3 */ SK_MASK_TYPE_FADING_OUT,
- /* 9 */ SK_MASK_TYPE_RAISED = 9,
+ /* 9 */ SK_MASK_TYPE_RAISED = 9
} SkullKidMaskType;
typedef enum {
@@ -127,19 +127,19 @@ typedef enum {
/* 4 */ SK_HAND_TYPE_JUGGLING_OR_DROPPING_OCARINA,
/* 5 */ SK_HAND_TYPE_HOLDING_MAJORAS_MASK_AND_FLUTE,
/* 6 */ SK_HAND_TYPE_HOLDING_FLUTE,
- /* 9 */ SK_HAND_TYPE_DEFAULT = 9,
+ /* 9 */ SK_HAND_TYPE_DEFAULT = 9
} SkullKidHandType;
typedef enum {
/* 0 */ SK_FADE_IN_STATE_NONE,
/* 1 */ SK_FADE_IN_STATE_START,
/* 2 */ SK_FADE_IN_STATE_INCREASE_FOG,
- /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA,
+ /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA
} SkullKidFadeInState;
typedef enum {
/* 0 */ SK_FADE_OUT_STATE_NONE,
- /* 1 */ SK_FADE_OUT_STATE_FADING_OUT,
+ /* 1 */ SK_FADE_OUT_STATE_FADING_OUT
} SkullKidFadeOutState;
typedef enum {
@@ -843,9 +843,10 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
case 594:
Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL24_SCREAM2);
break;
- }
- if (1) {}
+ default:
+ break;
+ }
if ((play->csCtx.curFrame >= 62) && (play->csCtx.curFrame < 273)) {
if ((Rand_ZeroOne() < 0.75f) && ((play->state.frames % 2) != 0)) {
@@ -1128,8 +1129,8 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) {
- play->envCtx.unk_17 = 15;
- play->envCtx.unk_18 = 15;
+ play->envCtx.skyboxConfig = 15;
+ play->envCtx.changeSkyboxNextConfig = 15;
}
}
@@ -1825,8 +1826,8 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
}
if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) {
- play->envCtx.unk_17 = 15;
- play->envCtx.unk_18 = 15;
+ play->envCtx.skyboxConfig = 15;
+ play->envCtx.changeSkyboxNextConfig = 15;
}
}
@@ -2033,10 +2034,10 @@ void DmStk_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
this->alpha = this->alpha;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->alpha < 255) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Scene_SetRenderModeXlu(play, 1, 2);
gDPPipeSync(POLY_XLU_DISP++);
diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
index 0f58c534d..cc7ac89ea 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
@@ -12,7 +12,7 @@ typedef void (*DmStkActionFunc)(struct DmStk*, PlayState*);
typedef enum {
/* 0 */ DM_STK_TYPE_SKULL_KID,
- /* 1 */ DM_STK_TYPE_MAJORAS_MASK,
+ /* 1 */ DM_STK_TYPE_MAJORAS_MASK
} DmStkType;
typedef struct DmStk {
diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
index 4d2b4a54a..30d1cb3ef 100644
--- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
+++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
@@ -47,7 +47,7 @@ typedef enum {
/* 4 */ ZELDA_ANIM_GIVING_OCARINA,
/* 5 */ ZELDA_ANIM_PLAYING_OCARINA_START,
/* 6 */ ZELDA_ANIM_PLAYING_OCARINA,
- /* 7 */ ZELDA_ANIM_MAX,
+ /* 7 */ ZELDA_ANIM_MAX
} DmZlAnimation;
static TexturePtr sMouthTextures[] = {
@@ -61,7 +61,7 @@ typedef enum {
/* 0 */ ZELDA_MOUTH_NEUTRAL,
/* 1 */ ZELDA_MOUTH_SMILING,
/* 2 */ ZELDA_MOUTH_FROWNING,
- /* 3 */ ZELDA_MOUTH_OPEN,
+ /* 3 */ ZELDA_MOUTH_OPEN
} DmZlMouthTextures;
static TexturePtr sEyeTextures[] = {
@@ -81,7 +81,7 @@ typedef enum {
/* 3 */ ZELDA_EYE_WIDE,
/* 4 */ ZELDA_EYE_HAPPY,
/* 5 */ ZELDA_EYE_OPEN_LOOKING_LEFT,
- /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT,
+ /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT
} DmZlEyeTextures;
// Unused in MM
@@ -92,7 +92,7 @@ typedef enum {
/* 3 */ ZELDA_EYE_STATE_LOOKING_RIGHT,
/* 4 */ ZELDA_EYE_STATE_WIDE,
/* 5 */ ZELDA_EYE_STATE_HAPPY,
- /* 6 */ ZELDA_EYE_STATE_CLOSED2,
+ /* 6 */ ZELDA_EYE_STATE_CLOSED2
} DmZlEyeStates;
/**
@@ -289,7 +289,7 @@ void DmZl_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTextureIndex]));
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
DmZl_OverrideLimbDraw, DmZl_PostLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index fe27f2d94..3a64f9763 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -101,8 +101,8 @@ static InitChainEntry sInitChain[] = {
};
typedef struct {
- /* 0x00 */ s16 sceneId;
- /* 0x02 */ u8 index;
+ /* 0x0 */ s16 sceneId;
+ /* 0x2 */ u8 index;
} ShutterSceneInfo; // size = 0x4
ShutterSceneInfo D_808A2258[] = {
@@ -115,9 +115,9 @@ ShutterSceneInfo D_808A2258[] = {
};
typedef struct {
- /* 0x00 */ s16 dungeonSceneId;
- /* 0x02 */ s16 bossSceneId;
- /* 0x04 */ u8 index;
+ /* 0x0 */ s16 dungeonSceneId;
+ /* 0x2 */ s16 bossSceneId;
+ /* 0x4 */ u8 index;
} BossDoorInfo; // size = 0x6
BossDoorInfo D_808A22A0[] = {
@@ -139,15 +139,17 @@ void DoorShutter_SetupAction(DoorShutter* this, DoorShutterActionFunc actionFunc
}
s32 func_808A0900(DoorShutter* this, PlayState* play) {
- TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)];
+ TransitionActorEntry* transitionEntry =
+ &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)];
s8 frontRoom = transitionEntry->sides[0].room;
if (frontRoom == transitionEntry->sides[1].room) {
- if (ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, this->actor.yawTowardsPlayer)) < 0x4000) {
+ if (ABS_ALT(BINANG_SUB(this->slidingDoor.dyna.actor.shape.rot.y,
+ this->slidingDoor.dyna.actor.yawTowardsPlayer)) < 0x4000) {
frontRoom = -1;
}
}
- return frontRoom == this->actor.room;
+ return frontRoom == this->slidingDoor.dyna.actor.room;
}
s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) {
@@ -173,13 +175,13 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) {
}
if (doorType == 1) {
- if (!Flags_GetClear(play, this->actor.room)) {
+ if (!Flags_GetClear(play, this->slidingDoor.dyna.actor.room)) {
DoorShutter_SetupAction(this, func_808A0F88);
this->unk_168 = 1.0f;
return true;
}
} else if ((doorType == 2) || (doorType == 7)) {
- if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) {
+ if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
DoorShutter_SetupAction(this, func_808A1548);
this->unk_168 = 1.0f;
return true;
@@ -201,8 +203,8 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
s32 sp24;
s32 i;
- Actor_ProcessInitChain(&this->actor, sInitChain);
- this->doorType = DOORSHUTTER_GET_380(&this->actor);
+ Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain);
+ this->doorType = DOORSHUTTER_GET_380(&this->slidingDoor.dyna.actor);
sp24 = D_808A2240[this->doorType];
if (sp24 < 0) {
@@ -216,7 +218,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
sp24 = shutterSceneInfo->index;
if (sp24 == 6) {
- this->actor.flags |= ACTOR_FLAG_10000000;
+ this->slidingDoor.dyna.actor.flags |= ACTOR_FLAG_10000000;
}
} else if (sp24 == 0) {
BossDoorInfo* bossDoorInfo = &D_808A22A0[0];
@@ -227,13 +229,13 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
}
}
- this->unk_15E = bossDoorInfo->index;
+ this->slidingDoor.unk_15E = bossDoorInfo->index;
} else {
- this->actor.room = -1;
+ this->slidingDoor.dyna.actor.room = -1;
}
if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) {
- Actor_Kill(&this->actor);
+ Actor_Kill(&this->slidingDoor.dyna.actor);
return;
}
@@ -241,19 +243,19 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
this->unk_163 = sp24;
if ((this->doorType == 4) || (this->doorType == 5)) {
- if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) {
+ if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
this->unk_166 = 10;
}
}
- Actor_SetFocus(&this->actor, 60.0f);
+ Actor_SetFocus(&this->slidingDoor.dyna.actor, 60.0f);
}
void DoorShutter_Destroy(Actor* thisx, PlayState* play) {
DoorShutter* this = THIS;
- if (this->actor.room >= 0) {
- s32 transitionActorId = DOORSHUTTER_GET_FC00(&this->actor);
+ if (this->slidingDoor.dyna.actor.room >= 0) {
+ s32 transitionActorId = DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor);
play->transitionActors.list[transitionActorId].id = -play->transitionActors.list[transitionActorId].id;
}
@@ -262,8 +264,8 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) {
void DoorShutter_SetupType(DoorShutter* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) &&
(!R_PLAY_FILL_SCREEN_ON || (R_PLAY_FILL_SCREEN_ALPHA == 0))) {
- this->actor.objBankIndex = this->requiredObjBankIndex;
- this->actor.draw = DoorShutter_Draw;
+ this->slidingDoor.dyna.actor.objBankIndex = this->requiredObjBankIndex;
+ this->slidingDoor.dyna.actor.draw = DoorShutter_Draw;
DoorShutter_SetupDoor(this, play);
}
}
@@ -277,7 +279,7 @@ f32 func_808A0D90(PlayState* play, DoorShutter* this, f32 arg2, f32 arg3, f32 ar
sp28.y = player->actor.world.pos.y + arg2;
sp28.z = player->actor.world.pos.z;
- Actor_OffsetOfPointInActorCoords(&this->actor, &sp1C, &sp28);
+ Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp1C, &sp28);
if ((arg3 < fabsf(sp1C.x)) || (arg4 < fabsf(sp1C.y))) {
return FLT_MAX;
@@ -293,7 +295,7 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) {
f32 temp_f0 = func_808A0D90(play, this, 0.0f, shutterInfo->unk_0A, shutterInfo->unk_0B);
if (fabsf(temp_f0) < 50.0f) {
- s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y);
+ s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->slidingDoor.dyna.actor.shape.rot.y);
if (temp_f0 > 0.0f) {
temp_v0_2 = 0x8000 - temp_v0_2;
@@ -308,8 +310,9 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) {
}
void func_808A0F88(DoorShutter* this, PlayState* play) {
- if (Flags_GetClear(play, this->actor.room) || Flags_GetClearTemp(play, this->actor.room)) {
- this->csId = this->actor.csId;
+ if (Flags_GetClear(play, this->slidingDoor.dyna.actor.room) ||
+ Flags_GetClearTemp(play, this->slidingDoor.dyna.actor.room)) {
+ this->csId = this->slidingDoor.dyna.actor.csId;
if (this->doorType == 7) {
if (this->csId != CS_ID_NONE) {
this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
@@ -317,8 +320,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) {
}
if (CutsceneManager_IsNext(this->csId)) {
- CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
- Flags_SetClear(play, this->actor.room);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor);
+ Flags_SetClear(play, this->slidingDoor.dyna.actor.room);
DoorShutter_SetupAction(this, func_808A1784);
this->unk_167 = -1;
} else {
@@ -328,8 +331,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->doorType = PLAYER_DOORTYPE_TALKING;
- player->doorActor = &this->actor;
- this->actor.textId = 0x1801;
+ player->doorActor = &this->slidingDoor.dyna.actor;
+ this->slidingDoor.dyna.actor.textId = 0x1801;
func_80122F28(player);
}
}
@@ -338,16 +341,16 @@ void func_808A1080(DoorShutter* this, PlayState* play) {
}
void func_808A1090(DoorShutter* this, PlayState* play) {
- if (this->unk_15C != 0) {
+ if (this->slidingDoor.unk_15C != 0) {
DoorShutter_SetupAction(this, func_808A1684);
- this->actor.velocity.y = 0.0f;
+ this->slidingDoor.dyna.actor.velocity.y = 0.0f;
if (this->unk_166 != 0) {
- Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->actor));
+ Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor));
if (this->doorType != 5) {
- gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--;
- Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
+ DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1;
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else {
- Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
}
}
} else {
@@ -358,7 +361,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
player->doorType = PLAYER_DOORTYPE_SLIDING;
player->doorDirection = doorDirection;
- player->doorActor = &this->actor;
+ player->doorActor = &this->slidingDoor.dyna.actor;
if (this->unk_163 == 7) {
player->doorTimer = 12;
@@ -367,20 +370,21 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
}
if (this->doorType == 6) {
- if (gSaveContext.save.saveInfo.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) {
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity <
+ (DOORSHUTTER_GET_1F(&this->slidingDoor.dyna.actor) * 0x10)) {
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->actor.textId = 0x14FC;
+ this->slidingDoor.dyna.actor.textId = 0x14FC;
}
} else if (this->unk_166 != 0) {
if (this->doorType == 5) {
if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) {
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->actor.textId = 0x1803;
+ this->slidingDoor.dyna.actor.textId = 0x1803;
}
player->doorTimer += 10;
} else if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) {
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->actor.textId = 0x1802;
+ this->slidingDoor.dyna.actor.textId = 0x1802;
} else {
player->doorTimer += 10;
}
@@ -391,7 +395,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
}
void func_808A1288(DoorShutter* this, PlayState* play) {
- if (this->actor.category == ACTORCAT_DOOR) {
+ if (this->slidingDoor.dyna.actor.category == ACTORCAT_DOOR) {
Player* player = GET_PLAYER(play);
s32 sp38 = this->unk_164;
s32 sp34 = 0xF;
@@ -405,17 +409,18 @@ void func_808A1288(DoorShutter* this, PlayState* play) {
this->unk_164 = sp38;
this->unk_168 = 0.0f;
- Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->actor, player->unk_3BA, this->unk_168, 12, sp34, 10);
+ Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex,
+ this->unk_168, 12, sp34, 10);
}
}
s32 func_808A1340(DoorShutter* this, PlayState* play) {
Vec3f sp2C;
- if (this->actor.velocity.y == 0.0f) {
+ if (this->slidingDoor.dyna.actor.velocity.y == 0.0f) {
func_808A1288(this, play);
if (this->unk_163 != 7) {
- Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
}
}
@@ -423,20 +428,22 @@ s32 func_808A1340(DoorShutter* this, PlayState* play) {
s32 pad;
if (this->unk_163 == 7) {
- func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG);
+ func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG);
}
- Lib_Vec3f_TranslateAndRotateY(&this->actor.home.pos, this->actor.shape.rot.y,
+ Lib_Vec3f_TranslateAndRotateY(&this->slidingDoor.dyna.actor.home.pos, this->slidingDoor.dyna.actor.shape.rot.y,
(this->unk_163 == 7) ? &D_808A22C4 : &D_808A22D0, &sp2C);
- Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f);
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f);
- if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &sp2C, this->actor.velocity.y) == 0.0f) {
+ if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &sp2C,
+ this->slidingDoor.dyna.actor.velocity.y) == 0.0f) {
return true;
}
} else {
- Math_StepToF(&this->actor.velocity.y, 15.0f, 3.0f);
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f);
- if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 200.0f, this->actor.velocity.y)) {
+ if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 200.0f,
+ this->slidingDoor.dyna.actor.velocity.y)) {
return true;
}
}
@@ -448,13 +455,13 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) {
if (temp == this->unk_168) {
if (arg2 == 1.0f) {
- Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_CLOSE);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_CLOSE);
} else {
- Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_OPEN);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_OPEN);
}
if ((this->csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId)) {
- func_800B724C(play, &this->actor, PLAYER_CSMODE_1);
+ func_800B724C(play, &this->slidingDoor.dyna.actor, PLAYER_CSMODE_1);
}
}
@@ -466,10 +473,10 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) {
void func_808A1548(DoorShutter* this, PlayState* play) {
if (func_808A1478(this, play, 1.0f)) {
- if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) {
- this->csId = this->actor.csId;
+ if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
+ this->csId = this->slidingDoor.dyna.actor.csId;
if (CutsceneManager_IsNext(this->csId)) {
- CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor);
DoorShutter_SetupAction(this, func_808A1784);
this->unk_167 = -1;
} else {
@@ -479,15 +486,15 @@ void func_808A1548(DoorShutter* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->doorType = PLAYER_DOORTYPE_TALKING;
- player->doorActor = &this->actor;
- this->actor.textId = 0x1800;
+ player->doorActor = &this->slidingDoor.dyna.actor;
+ this->slidingDoor.dyna.actor.textId = 0x1800;
func_80122F28(player);
}
}
}
void func_808A1618(DoorShutter* this, PlayState* play) {
- if ((this->unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) {
+ if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) {
DoorShutter_SetupAction(this, func_808A1548);
} else {
func_808A1090(this, play);
@@ -504,14 +511,14 @@ void func_808A1684(DoorShutter* this, PlayState* play) {
phi_f0 = 50.0f;
}
- if (phi_f0 < this->actor.xzDistToPlayer) {
+ if (phi_f0 < this->slidingDoor.dyna.actor.xzDistToPlayer) {
if (this->unk_163 == 7) {
- this->actor.velocity.y = 0.0f;
+ this->slidingDoor.dyna.actor.velocity.y = 0.0f;
} else {
if (DoorShutter_SetupDoor(this, play)) {
- this->actor.velocity.y = 30.0f;
+ this->slidingDoor.dyna.actor.velocity.y = 30.0f;
}
- Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
}
DoorShutter_SetupAction(this, func_808A1B48);
}
@@ -520,7 +527,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) {
void func_808A1784(DoorShutter* this, PlayState* play) {
if (this->unk_167 != 0) {
- if (func_800F22C4(this->csId, &this->actor) != 0) {
+ if (func_800F22C4(this->csId, &this->slidingDoor.dyna.actor) != 0) {
if (this->unk_167 < 0) {
if ((play->state.frames % 2) != 0) {
this->unk_167++;
@@ -544,16 +551,18 @@ void func_808A1784(DoorShutter* this, PlayState* play) {
void func_808A1884(DoorShutter* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s8 room = this->actor.room;
+ s8 room = this->slidingDoor.dyna.actor.room;
Vec3f sp44;
- if (this->actor.room >= 0) {
- Actor_OffsetOfPointInActorCoords(&this->actor, &sp44, &player->actor.world.pos);
+ if (this->slidingDoor.dyna.actor.room >= 0) {
+ Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp44, &player->actor.world.pos);
- this->actor.room =
- play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)].sides[(sp44.z < 0.0f) ? 0 : 1].room;
+ this->slidingDoor.dyna.actor.room =
+ play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]
+ .sides[(sp44.z < 0.0f) ? 0 : 1]
+ .room;
- if (room != this->actor.room) {
+ if (room != this->slidingDoor.dyna.actor.room) {
Room temp = play->roomCtx.curRoom;
play->roomCtx.curRoom = play->roomCtx.prevRoom;
@@ -563,8 +572,8 @@ void func_808A1884(DoorShutter* this, PlayState* play) {
func_8012EBF8(play, &play->roomCtx);
}
- this->unk_15C = 0;
- this->actor.velocity.y = 0.0f;
+ this->slidingDoor.unk_15C = 0;
+ this->slidingDoor.dyna.actor.velocity.y = 0.0f;
if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_800)) {
DoorShutter_SetupAction(this, func_808A1C50);
@@ -579,20 +588,22 @@ void func_808A1884(DoorShutter* this, PlayState* play) {
s32 func_808A1A70(DoorShutter* this) {
if (this->unk_163 == 7) {
if (this->unk_163 == 7) {
- func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG);
+ func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG);
}
- Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f);
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f);
- if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->actor.home.pos, this->actor.velocity.y) == 0.0f) {
+ if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &this->slidingDoor.dyna.actor.home.pos,
+ this->slidingDoor.dyna.actor.velocity.y) == 0.0f) {
return true;
}
} else {
- if (this->actor.velocity.y < 20.0f) {
- Math_StepToF(&this->actor.velocity.y, 20.0f, 8.0f);
+ if (this->slidingDoor.dyna.actor.velocity.y < 20.0f) {
+ Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f);
}
- if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, this->actor.velocity.y)) {
+ if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y,
+ this->slidingDoor.dyna.actor.velocity.y)) {
return true;
}
}
@@ -603,18 +614,19 @@ void func_808A1B48(DoorShutter* this, PlayState* play) {
s16 quakeIndex;
if (func_808A1A70(this)) {
- if (this->actor.velocity.y > 20.0f) {
- this->actor.floorHeight = this->actor.home.pos.y;
- Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 45.0f, 10, 8.0f, 500, 10, 0);
+ if (this->slidingDoor.dyna.actor.velocity.y > 20.0f) {
+ this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y;
+ Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos,
+ 45.0f, 10, 8.0f, 500, 10, 0);
}
- Actor_PlaySfx(&this->actor, NA_SE_EV_BIGWALL_BOUND);
+ Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND);
quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3);
Quake_SetSpeed(quakeIndex, -32536);
Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0);
Quake_SetDuration(quakeIndex, 10);
- Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100);
+ Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100);
func_808A1884(this, play);
}
@@ -638,7 +650,9 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->unk_163 == 7) {
- this->actor.home.rot.z = Math_Vec3f_DistXZ(&this->actor.home.pos, &this->actor.world.pos) * -100.0f;
+ this->slidingDoor.dyna.actor.home.rot.z =
+ Math_Vec3f_DistXZ(&this->slidingDoor.dyna.actor.home.pos, &this->slidingDoor.dyna.actor.world.pos) *
+ -100.0f;
}
}
}
@@ -651,8 +665,9 @@ s32 func_808A1D68(DoorShutter* this, PlayState* play) {
return true;
}
- temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &play->view.eye), this->actor.shape.rot.y);
- temp_a1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y);
+ temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->slidingDoor.dyna.actor, &play->view.eye),
+ this->slidingDoor.dyna.actor.shape.rot.y);
+ temp_a1 = BINANG_SUB(this->slidingDoor.dyna.actor.yawTowardsPlayer, this->slidingDoor.dyna.actor.shape.rot.y);
temp_a0 = ABS_ALT(temp_a0);
temp_a1 = ABS_ALT(temp_a1);
@@ -673,29 +688,30 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_164 == 7) {
Matrix_Translate(0.0f, 64.96f, 0.0f, MTXMODE_APPLY);
- Matrix_RotateZS(this->actor.home.rot.z, MTXMODE_APPLY);
+ Matrix_RotateZS(this->slidingDoor.dyna.actor.home.rot.z, MTXMODE_APPLY);
Matrix_Translate(0.0f, -64.96f, 0.0f, MTXMODE_APPLY);
}
if (sp44->unk_04 != 0) {
- TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOORSHUTTER_GET_FC00(&this->actor)];
+ TransitionActorEntry* transitionEntry = &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)];
if ((play->roomCtx.prevRoom.num >= 0) ||
(transitionEntry->sides[0].room == transitionEntry->sides[1].room)) {
- s16 yaw = this->actor.shape.rot.y - Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos);
+ s16 yaw = this->slidingDoor.dyna.actor.shape.rot.y -
+ Math_Vec3f_Yaw(&play->view.eye, &this->slidingDoor.dyna.actor.world.pos);
if (ABS_ALT(yaw) < 0x4000) {
Matrix_RotateYF(M_PI, MTXMODE_APPLY);
}
- } else if (this->actor.room == transitionEntry->sides[0].room) {
+ } else if (this->slidingDoor.dyna.actor.room == transitionEntry->sides[0].room) {
Matrix_RotateYF(M_PI, MTXMODE_APPLY);
}
} else if (this->doorType == 5) {
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->unk_15E]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->slidingDoor.unk_15E]));
}
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
index 7f18e0546..abdf0ce84 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
@@ -2,6 +2,7 @@
#define Z_DOOR_SHUTTER_H
#include "global.h"
+#include "z64door.h"
struct DoorShutter;
@@ -10,14 +11,10 @@ typedef void (*DoorShutterActionFunc)(struct DoorShutter*, PlayState*);
#define DOORSHUTTER_GET_1F(thisx) ((thisx)->params & 0x1F)
#define DOORSHUTTER_GET_7F(thisx) ((thisx)->params & 0x7F)
#define DOORSHUTTER_GET_380(thisx) (((thisx)->params >> 7) & 7)
-#define DOORSHUTTER_GET_FC00(thisx) ((u16)(thisx)->params >> 0xA)
typedef struct DoorShutter {
- /* 0x0000 */ Actor actor;
- /* 0x0144 */ UNK_TYPE1 unk144[0x18];
- /* 0x015C */ s16 unk_15C;
- /* 0x015E */ s16 unk_15E;
- /* 0x0160 */ s16 csId;
+ /* 0x000 */ SlidingDoorActor slidingDoor;
+ /* 0x160 */ s16 csId;
/* 0x0162 */ u8 doorType;
/* 0x0163 */ u8 unk_163;
/* 0x0164 */ u8 unk_164;
diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
index 701b38639..af4f27aea 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
@@ -7,7 +7,8 @@ struct DoorSpiral;
typedef struct DoorSpiral {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0xC];
+ /* 0x144 */ u8 shouldClimb;
+ /* 0x145 */ UNK_TYPE1 unk_145[0xB];
} DoorSpiral; // size = 0x150
#endif // Z_DOOR_SPIRAL_H
diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
index 0b4b59f1c..de20e6f63 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -572,6 +572,9 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) {
gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0x00FFFFFF) |
((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x18);
break;
+
+ default:
+ break;
}
gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) |
@@ -810,6 +813,9 @@ void func_808BA550(DoorWarp1* this, PlayState* play) {
case PLAYER_FORM_HUMAN:
temp_f0 = -25.0f;
break;
+
+ default:
+ break;
}
temp_f2 = this->dyna.actor.world.pos.y + (this->dyna.actor.shape.yOffset * 0.1f) + temp_f0;
@@ -931,7 +937,7 @@ void func_808BACCC(DoorWarp1* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->unk_1B8);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->unk_1B8);
@@ -969,7 +975,7 @@ void func_808BAE9C(DoorWarp1* this, PlayState* play) {
sp84 = 1.0f - ((2.0f - this->unk_1A4) / 1.7f);
this->unk_1AC += sp84 * 15.0f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255.0f * sp84, 255, 255, (u8)this->unk_1B4);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 255.0f * sp84, 255, 255);
@@ -1059,7 +1065,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255);
@@ -1076,7 +1082,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) {
Matrix_RotateYS(this->dyna.actor.world.rot.y, MTXMODE_APPLY);
Matrix_Scale(1.0f, 0.0f, 1.0f, MTXMODE_APPLY);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->unk_203);
diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
index 1bc7e13bc..de67845ed 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
@@ -13,15 +13,15 @@ typedef void (*DoorWarp1ActionFunc)(struct DoorWarp1*, PlayState*);
#define DOORWARP1_GET_FF00_2(thisx) ((thisx)->params & 0xFF00)
#define DOORWARP1_GET_FF00_3(thisx) ((thisx)->params >> 8)
-enum {
+typedef enum {
/* 0 */ ENDOORWARP1_FF_0,
/* 1 */ ENDOORWARP1_FF_1,
/* 2 */ ENDOORWARP1_FF_2,
/* 3 */ ENDOORWARP1_FF_3,
/* 4 */ ENDOORWARP1_FF_4,
/* 5 */ ENDOORWARP1_FF_5,
- /* 6 */ ENDOORWARP1_FF_6,
-};
+ /* 6 */ ENDOORWARP1_FF_6
+} DoorWarp1Param;
typedef struct DoorWarp1 {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
index 65fb8da2f..bc95d4312 100644
--- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
+++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
@@ -133,7 +133,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play) {
mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
index 2833477e4..742b3bb70 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -63,6 +63,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) {
this->dz = 1.0f;
this->scalingFactor = 0.2f;
break;
+
case EFF_DUST_TYPE_1:
this->actionFunc = func_80918FE4;
this->actor.draw = func_80919768;
@@ -71,6 +72,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) {
this->dz = 0.8f;
this->scalingFactor = 0.5f;
break;
+
case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE:
case EFF_DUST_TYPE_3:
this->actionFunc = func_80919230;
@@ -79,6 +81,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) {
this->dx = 0.5f;
this->scalingFactor = 15.0f;
break;
+
case EFF_DUST_TYPE_4:
this->actionFunc = func_80919230;
this->actor.draw = func_809199FC;
@@ -86,6 +89,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) {
this->dx = 0.5f;
this->scalingFactor = 10.0f;
break;
+
case EFF_DUST_TYPE_5:
this->actionFunc = func_80919230;
this->actor.draw = func_809199FC;
@@ -93,6 +97,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) {
this->dx = 0.5f;
this->scalingFactor = 20.0f;
break;
+
default:
SystemArena_Free(this);
break;
@@ -105,7 +110,7 @@ void EffDust_Destroy(Actor* thisx, PlayState* play) {
void func_80918D64(EffDust* this, PlayState* play) {
s16 theta;
- s16 fi;
+ s16 phi;
s32 i;
s32 j;
f32* distanceTraveled = this->distanceTraveled;
@@ -122,10 +127,10 @@ void func_80918D64(EffDust* this, PlayState* play) {
i = this->index & 0x3F;
if (this->distanceTraveled[i] >= 1.0f) {
// Spherical coordinate system.
- fi = randPlusMinusPoint5Scaled(0x10000);
+ phi = Rand_CenteredFloat(0x10000);
theta = Rand_ZeroFloat(0x1000);
- this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(fi) * Math_CosS(theta);
- this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(fi) * Math_CosS(theta);
+ this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(phi) * Math_CosS(theta);
+ this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(phi) * Math_CosS(theta);
this->initialPositions[i].z = -(f32)this->actor.home.rot.z * Math_SinS(theta);
this->distanceTraveled[i] = 0.0f;
this->index++;
@@ -136,7 +141,7 @@ void func_80918D64(EffDust* this, PlayState* play) {
void func_80918FE4(EffDust* this, PlayState* play) {
s16 theta;
- s16 fi;
+ s16 phi;
f32* distanceTraveled = this->distanceTraveled;
s32 i;
s32 j;
@@ -152,11 +157,11 @@ void func_80918FE4(EffDust* this, PlayState* play) {
i = this->index & 0x3F;
if (this->distanceTraveled[i] >= 1.0f) {
// Spherical coordinate system.
- fi = randPlusMinusPoint5Scaled(0x10000);
+ phi = Rand_CenteredFloat(0x10000);
theta = Rand_ZeroFloat(0x2000);
- this->initialPositions[i].x = 400.0f * Math_CosS(fi) * Math_CosS(theta);
+ this->initialPositions[i].x = 400.0f * Math_CosS(phi) * Math_CosS(theta);
this->initialPositions[i].y = 400.0f * Math_SinS(theta);
- this->initialPositions[i].z = 400.0f * Math_SinS(fi) * Math_CosS(theta);
+ this->initialPositions[i].z = 400.0f * Math_SinS(phi) * Math_CosS(theta);
this->distanceTraveled[i] = 0.0f;
this->index++;
}
@@ -171,7 +176,7 @@ void func_80919230(EffDust* this, PlayState* play) {
s32 i;
s32 j;
- if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & PLAYER_STATE1_1000)) {
+ if ((parent == NULL) || (parent->update == NULL) || !(player->stateFlags1 & PLAYER_STATE1_1000)) {
if (this->life != 0) {
this->life--;
} else {
@@ -201,7 +206,7 @@ void func_80919230(EffDust* this, PlayState* play) {
i = this->index & 0x3F;
if (this->distanceTraveled[i] >= 1.0f) {
- theta = randPlusMinusPoint5Scaled(0x10000);
+ theta = Rand_CenteredFloat(0x10000);
switch (this->actor.params) {
case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE:
this->initialPositions[i].x = (Rand_ZeroOne() * 4500.0f) + 700.0f;
@@ -235,6 +240,9 @@ void func_80919230(EffDust* this, PlayState* play) {
this->initialPositions[i].z = 4000.0f * Math_CosS(theta);
}
break;
+
+ default:
+ break;
}
this->distanceTraveled[i] = 0.0f;
@@ -268,7 +276,8 @@ void func_80919768(Actor* thisx, PlayState* play2) {
sp92 = Math_Vec3f_Yaw(&activeCamEye, &thisx->world.pos);
OPEN_DISPS(gfxCtx);
- func_8012C28C(gfxCtx);
+
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
@@ -318,7 +327,8 @@ void func_809199FC(Actor* thisx, PlayState* play2) {
Player* player = GET_PLAYER(play);
OPEN_DISPS(gfxCtx);
- func_8012C28C(gfxCtx);
+
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
@@ -326,7 +336,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) {
distanceTraveled = this->distanceTraveled;
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
- if (player->unk_B08[0] >= 0.85f) {
+ if (player->unk_B08 >= 0.85f) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
} else {
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 0);
@@ -339,7 +349,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (*distanceTraveled * 255.0f));
aux = 1.0f - SQ(*distanceTraveled);
- Matrix_Mult(&player->mf_CC4, MTXMODE_NEW);
+ Matrix_Mult(&player->leftHandMf, MTXMODE_NEW);
Matrix_Translate(initialPositions->x * ((this->dx * aux) + (1.0f - this->dx)),
(initialPositions->y * (1.0f - *distanceTraveled)) + 320.0f,
(initialPositions->z * (1.0f - *distanceTraveled)) + -20.0f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h
index 38b724865..20a1df27e 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h
@@ -22,12 +22,12 @@ typedef struct EffDust {
} EffDust; // size = 0x560
typedef enum {
- /* 0x0 */ EFF_DUST_TYPE_0,
- /* 0x1 */ EFF_DUST_TYPE_1,
- /* 0x2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE,
- /* 0x3 */ EFF_DUST_TYPE_3,
- /* 0x4 */ EFF_DUST_TYPE_4,
- /* 0x5 */ EFF_DUST_TYPE_5
+ /* 0 */ EFF_DUST_TYPE_0,
+ /* 1 */ EFF_DUST_TYPE_1,
+ /* 2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE,
+ /* 3 */ EFF_DUST_TYPE_3,
+ /* 4 */ EFF_DUST_TYPE_4,
+ /* 5 */ EFF_DUST_TYPE_5
} EffDustType;
#endif // Z_EFF_DUST_H
diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c
index fbe4c27cf..9b5290907 100644
--- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c
+++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c
@@ -4,7 +4,6 @@
* Description: Wave Created by Turtle Awakening
*/
-#include "prevent_bss_reordering.h"
#include "z_eff_kamejima_wave.h"
#include "objects/object_kamejima/object_kamejima.h"
@@ -50,7 +49,7 @@ void EffKamejimaWave_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.2f);
this->actor.scale.y = 0.0f;
- if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAMS_1) {
+ if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAM_1) {
this->actionFunc = func_80BCEDE0;
sVtxAlpha = 255;
} else {
@@ -160,7 +159,7 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Scale(6.0f, 5.0f, 5.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
AnimatedMat_Draw(play, D_80BCF1C4);
diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h
index c79537363..de5567ff0 100644
--- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h
+++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h
@@ -16,9 +16,9 @@ typedef struct EffKamejimaWave {
/* 0x14C */ EffKamejimaWaveActionFunc actionFunc;
} EffKamejimaWave; // size = 0x150
-typedef enum params {
- /* 0x0 */ EFFKAMEJIMAWAVE_PARAMS_0,
- /* 0x1 */ EFFKAMEJIMAWAVE_PARAMS_1
-} EffKamejimaWaveParams;
+typedef enum EffKamejimaWaveParam {
+ /* 0 */ EFFKAMEJIMAWAVE_PARAM_0,
+ /* 1 */ EFFKAMEJIMAWAVE_PARAM_1
+} EffKamejimaWaveParam;
#endif // Z_EFF_KAMEJIMA_WAVE_H
diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c
index a37f4ec07..8ec3ac959 100644
--- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c
+++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c
@@ -22,10 +22,10 @@ void func_80BEBEB8(EffLastday* this, PlayState* play);
void func_80BEBF78(EffLastday* this, PlayState* play);
typedef enum EffLastDayAction {
- /* 0x0 */ EFFLASTDAY_ACTION_NONE,
- /* 0x1 */ EFFLASTDAY_ACTION_1,
- /* 0x2 */ EFFLASTDAY_ACTION_2,
- /* 0x3 */ EFFLASTDAY_ACTION_3
+ /* 0 */ EFFLASTDAY_ACTION_NONE,
+ /* 1 */ EFFLASTDAY_ACTION_1,
+ /* 2 */ EFFLASTDAY_ACTION_2,
+ /* 3 */ EFFLASTDAY_ACTION_3
} EffLastDayAction;
ActorInit Eff_Lastday_InitVars = {
@@ -46,7 +46,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->actor, 0.1f);
switch (EFFLASTDAY_GET_F(&this->actor)) {
- case EFFLASTDAY_PARAMS_1:
+ case EFFLASTDAY_PARAM_1:
this->dList = object_lastday_DL_000510;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000608);
this->cueType = CS_CMD_ACTOR_CUE_508;
@@ -54,7 +54,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->actor, 1.0f);
break;
- case EFFLASTDAY_PARAMS_2:
+ case EFFLASTDAY_PARAM_2:
this->dList = object_lastday_DL_000210;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000308);
this->cueType = CS_CMD_ACTOR_CUE_509;
@@ -62,7 +62,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->actor, 0.5f);
break;
- case EFFLASTDAY_PARAMS_3:
+ case EFFLASTDAY_PARAM_3:
this->dList = object_lastday_DL_000060;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000148);
this->cueType = CS_CMD_ACTOR_CUE_510;
@@ -79,13 +79,13 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->actor, 1.0f);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0,
- EFFLASTDAY_PARAMS_1);
+ EFFLASTDAY_PARAM_1);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0,
- EFFLASTDAY_PARAMS_2);
+ EFFLASTDAY_PARAM_2);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0,
- EFFLASTDAY_PARAMS_3);
+ EFFLASTDAY_PARAM_3);
break;
}
}
@@ -238,10 +238,10 @@ void EffLastday_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
switch (EFFLASTDAY_GET_F(thisx)) {
- case EFFLASTDAY_PARAMS_1:
- case EFFLASTDAY_PARAMS_2:
+ case EFFLASTDAY_PARAM_1:
+ case EFFLASTDAY_PARAM_2:
break;
- case EFFLASTDAY_PARAMS_3:
+ case EFFLASTDAY_PARAM_3:
EffLastday_SetVtxAlpha(this->alpha);
break;
default:
diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
index 0b5002863..9d2087ae1 100644
--- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
+++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
@@ -19,11 +19,11 @@ typedef struct EffLastday {
/* 0x154 */ EffLastdayActionFunc actionFunc;
} EffLastday; // size = 0x158
-typedef enum EffLastDayParams {
- /* 0x0 */ EFFLASTDAY_PARAMS_0,
- /* 0x1 */ EFFLASTDAY_PARAMS_1,
- /* 0x2 */ EFFLASTDAY_PARAMS_2,
- /* 0x3 */ EFFLASTDAY_PARAMS_3
-} EffLastDayParams;
+typedef enum EffLastDayParam {
+ /* 0 */ EFFLASTDAY_PARAM_0,
+ /* 1 */ EFFLASTDAY_PARAM_1,
+ /* 2 */ EFFLASTDAY_PARAM_2,
+ /* 3 */ EFFLASTDAY_PARAM_3
+} EffLastDayParam;
#endif // Z_EFF_LASTDAY_H
diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c
index 4d66cc827..88c604c5e 100644
--- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c
+++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c
@@ -5,6 +5,7 @@
*/
#include "z_eff_stk.h"
+#include "objects/object_stk2/object_stk2.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -15,7 +16,8 @@ void EffStk_Destroy(Actor* thisx, PlayState* play);
void EffStk_Update(Actor* thisx, PlayState* play);
void EffStk_Draw(Actor* thisx, PlayState* play);
-#if 0
+void func_80BF0DE0(EffStk* this, PlayState* play);
+
ActorInit Eff_Stk_InitVars = {
ACTOR_EFF_STK,
ACTORCAT_ITEMACTION,
@@ -28,16 +30,75 @@ ActorInit Eff_Stk_InitVars = {
(ActorFunc)EffStk_Draw,
};
-#endif
+void EffStk_Init(Actor* thisx, PlayState* play) {
+ EffStk* this = THIS;
-extern UNK_TYPE D_06009F60;
+ Actor_SetScale(&this->actor, 0.2f);
+ this->actionFunc = func_80BF0DE0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Init.s")
+void EffStk_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Destroy.s")
+void func_80BF0DE0(EffStk* this, PlayState* play) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_512)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_512)]->id) {
+ case 2:
+ this->actor.draw = EffStk_Draw;
+ if (this->unk146 < 0x3C00) {
+ this->unk146 += 0x400;
+ this->unk148 = Math_SinS(this->unk146) * -630.0f;
+ }
+ this->unk144++;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/func_80BF0DE0.s")
+ case 3:
+ this->actor.draw = EffStk_Draw;
+ if (this->unk146 < 0x3C00) {
+ this->unk146 += 0x400;
+ this->unk148 = Math_SinS(this->unk146) * -630.0f;
+ }
+ this->unk144--;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Update.s")
+ default:
+ this->actor.draw = NULL;
+ this->unk146 = 0;
+ this->unk148 = 0.0f;
+ break;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Draw.s")
+void EffStk_Update(Actor* thisx, PlayState* play) {
+ EffStk* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+void EffStk_Draw(Actor* thisx, PlayState* play) {
+ EffStk* this = THIS;
+ s32 pad;
+ Camera* activeCam = GET_ACTIVE_CAM(play);
+ Vec3f eye = activeCam->eye;
+ Vec3f quakeOffset;
+
+ Camera_GetQuakeOffset(&quakeOffset, activeCam);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
+ Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Translate(0.0f, 0.0f, this->unk148, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ AnimatedMat_DrawAlphaStep(play, Lib_SegmentedToVirtual(object_stk2_Matanimheader_009F60), 1.0f, this->unk144);
+ gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
+ gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
+ gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008920);
+ gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008A38);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h
index 4b2b84783..03b6660d2 100644
--- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h
+++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h
@@ -9,7 +9,9 @@ typedef void (*EffStkActionFunc)(struct EffStk*, PlayState*);
typedef struct EffStk {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x8];
+ /* 0x144 */ s16 unk144;
+ /* 0x146 */ s16 unk146;
+ /* 0x148 */ f32 unk148;
/* 0x14C */ EffStkActionFunc actionFunc;
} EffStk; // size = 0x150
diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c
index 2b1c01c59..3a57149a7 100644
--- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c
+++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c
@@ -79,7 +79,7 @@ void EffZoraband_Draw(Actor* thisx, PlayState* play2) {
if (this->alpha != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_zoraband_Matanimheader_000F38));
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c
index d9fbeb6f0..0a8df4f40 100644
--- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c
+++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c
@@ -25,7 +25,7 @@ static u8 D_80BD3DB0[] = {
/* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1),
/* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F),
/* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15),
- /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x1C - 0x19),
+ /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19),
/* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1),
/* 0x1C */ SCHEDULE_CMD_RET_NONE(),
/* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3),
@@ -619,7 +619,7 @@ void EnAh_Draw(Actor* thisx, PlayState* play) {
if (this->unk_1DC != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BD3F14[this->unk_2FA]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80BD3F0C[this->unk_2FC]));
diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
index 41dba0aab..6e56cc609 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
@@ -179,7 +179,7 @@ s32 func_80BECD10(EnAkindonuts* this, Path* path, s32 arg2) {
phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
sp50 = true;
}
@@ -232,8 +232,10 @@ s32 func_80BECFBC(EnAkindonuts* this) {
case 3:
Inventory_DeleteItem(ITEM_DEED_OCEAN, SLOT(ITEM_DEED_OCEAN));
return GI_RUPEE_HUGE;
+
+ default:
+ return GI_NONE;
}
- return GI_NONE;
}
s32 func_80BED034(EnAkindonuts* this) {
@@ -249,8 +251,10 @@ s32 func_80BED034(EnAkindonuts* this) {
case 3:
return GI_POTION_BLUE;
+
+ default:
+ return GI_NONE;
}
- return GI_NONE;
}
void func_80BED090(PlayState* play) {
@@ -1606,7 +1610,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = -1.0f;
if (!ENAKINDONUTS_GET_4(&this->actor)) {
- this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_PATH_INDEX(&this->actor), ENAKINDONUTS_PATH_INDEX_NONE);
if (this->path == NULL) {
Actor_Kill(&this->actor);
return;
@@ -1705,7 +1709,7 @@ void EnAkindonuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx
void EnAkindonuts_Draw(Actor* thisx, PlayState* play) {
EnAkindonuts* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnAkindonuts_OverrideLimbDraw, EnAkindonuts_PostLimbDraw,
EnAkindonuts_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
index 180d73ed4..680fdbb75 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
@@ -10,12 +10,14 @@ typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, PlayState*);
#define ENAKINDONUTS_GET_3(thisx) ((thisx)->params & 3)
#define ENAKINDONUTS_GET_4(thisx) (((thisx)->params & 4) >> 2)
-#define ENAKINDONUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENAKINDONUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
-enum {
+#define ENAKINDONUTS_PATH_INDEX_NONE 0x3F
+
+typedef enum {
/* 1 */ ENAKINDONUTS_3_1 = 1,
- /* 2 */ ENAKINDONUTS_3_2,
-};
+ /* 2 */ ENAKINDONUTS_3_2
+} EnAkindonutsParam;
typedef struct EnAkindonuts {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c
index 87b83e670..2568d6617 100644
--- a/src/overlays/actors/ovl_En_Al/z_en_al.c
+++ b/src/overlays/actors/ovl_En_Al/z_en_al.c
@@ -480,10 +480,10 @@ s32 func_80BDEC2C(EnAl* this, PlayState* play) {
if ((this->unk_4C2 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_4C2 &= ~0x1800;
- if (player->exchangeItemId == 0x33) {
+ if (player->exchangeItemId == PLAYER_IA_LETTER_MAMA) {
this->unk_4C2 |= 0x800;
this->unk_4F4 = player->exchangeItemId;
- } else if (player->exchangeItemId != 0) {
+ } else if (player->exchangeItemId != PLAYER_IA_NONE) {
this->unk_4C2 |= 0x1000;
this->unk_4F4 = player->exchangeItemId;
}
@@ -907,7 +907,7 @@ void EnAl_Draw(Actor* thisx, PlayState* play) {
if (this->unk_35C != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(0.0f, 0.0f, 850.0f, MTXMODE_APPLY);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnAl_OverrideLimbDraw, EnAl_PostLimbDraw,
diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c
index 31d137299..a5b3f91d6 100644
--- a/src/overlays/actors/ovl_En_Am/z_en_am.c
+++ b/src/overlays/actors/ovl_En_Am/z_en_am.c
@@ -193,9 +193,9 @@ void EnAm_SpawnEffects(EnAm* this, PlayState* play) {
// Dust Clouds that spawn from the hop
for (i = 4; i > 0; i--) {
- effectPos.x = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.x;
- effectPos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + 40.0f);
- effectPos.z = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.z;
+ effectPos.x = Rand_CenteredFloat(65.0f) + this->actor.world.pos.x;
+ effectPos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + 40.0f);
+ effectPos.z = Rand_CenteredFloat(65.0f) + this->actor.world.pos.z;
EffectSsKirakira_SpawnSmall(play, &effectPos, &sVelocity, &sAccel, &D_808B1118, &D_808B111C);
}
Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_WALK);
@@ -254,7 +254,7 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) {
func_808B0358(this);
} else {
tempTextureBlend = this->textureBlend + 20;
- rand = randPlusMinusPoint5Scaled(10.0f);
+ rand = Rand_CenteredFloat(10.0f);
cos = Math_CosS(this->actor.shape.rot.y) * rand;
sin = Math_SinS(this->actor.shape.rot.y) * rand;
this->actor.world.pos.x = this->actor.home.pos.x + cos;
@@ -271,7 +271,7 @@ void func_808B0208(EnAm* this, PlayState* play) {
this->actor.world.pos.z += this->actor.speed * Math_CosS(this->actor.world.rot.y);
}
SkelAnime_Update(&this->skelAnime);
- if (Animation_OnFrame(&this->skelAnime, 8.0f) != 0) {
+ if (Animation_OnFrame(&this->skelAnime, 8.0f)) {
this->actor.speed = this->speed;
this->actor.velocity.y = 12.0f;
} else if (this->skelAnime.curFrame > 11.0f) {
@@ -422,8 +422,9 @@ void func_808B0894(EnAm* this, PlayState* play) {
this->armosYaw = this->actor.yawTowardsPlayer;
func_808B0208(this, play);
if (this->explodeTimer == 1) {
- EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 2, 0);
+ EnBom* bomb =
+ (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 2, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
}
@@ -432,7 +433,7 @@ void func_808B0894(EnAm* this, PlayState* play) {
for (i = 0; i < 8; i++) {
dustPos.x = (Math_SinS(0) * 7.0f) + this->actor.world.pos.x;
- dustPos.y = (randPlusMinusPoint5Scaled(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f);
+ dustPos.y = (Rand_CenteredFloat(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f);
dustPos.z = (Math_CosS(0) * 7.0f) + this->actor.world.pos.z;
func_800B0EB0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_808B1120, &D_808B1124, 200, 45, 12);
@@ -520,7 +521,7 @@ void EnAm_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->enemyCollider.base);
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->interactCollider.base);
- if (this->enemyCollider.base.atFlags & AC_ON) {
+ if (this->enemyCollider.base.atFlags & AT_ON) {
this->actor.flags |= ACTOR_FLAG_1000000;
CollisionCheck_SetAT(play, &play->colChkCtx, &this->enemyCollider.base);
}
@@ -563,13 +564,15 @@ void EnAm_Draw(Actor* thisx, PlayState* play) {
EnAm* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 0, 0, 0, this->textureBlend);
POLY_OPA_DISP = &gfx[2];
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnAm_PostLimbDraw,
&this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, 0.0f,
this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_And/z_en_and.c b/src/overlays/actors/ovl_En_And/z_en_and.c
index c1f229751..d3c9adcec 100644
--- a/src/overlays/actors/ovl_En_And/z_en_and.c
+++ b/src/overlays/actors/ovl_En_And/z_en_and.c
@@ -179,7 +179,7 @@ void EnAnd_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[0]));
diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
index d978d8380..90d31b601 100644
--- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c
+++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
@@ -345,7 +345,7 @@ void EnAni_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Translate(0.0f, 0.0f, -1000.0f, MTXMODE_APPLY);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState]));
diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.h b/src/overlays/actors/ovl_En_Ani/z_en_ani.h
index fcced964b..d0f2e6a12 100644
--- a/src/overlays/actors/ovl_En_Ani/z_en_ani.h
+++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.h
@@ -28,10 +28,10 @@ typedef struct EnAni {
/* 0x2FC */ EnAniActionFunc actionFunc;
} EnAni; // size = 0x300
-enum EnAniType {
- /* else */ ANI_TYPE_STANDING, // unfinshed and unused
- /* 1 */ ANI_TYPE_TREE_HANGING = 1,
-};
+typedef enum EnAniType {
+ /* 1 */ ANI_TYPE_TREE_HANGING = 1,
+ /* 2 */ ANI_TYPE_STANDING // unfinshed and unused. Never read as 2, only taken as the "else" case from `ANI_TYPE_TREE_HANGING`
+} EnAniType;
#define ANI_GET_TYPE(thisx) ((thisx)->params & 0xFF)
diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
index 45a413c26..dcd380256 100644
--- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
+++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
@@ -50,14 +50,14 @@ typedef enum {
/* 2 */ EN_AOB01_ANIM_LAUGH_LOOP,
/* 3 */ EN_AOB01_ANIM_SURPRISE_START,
/* 4 */ EN_AOB01_ANIM_SURPRISE_LOOP,
- /* 5 */ EN_AOB01_ANIM_IDLE_2,
+ /* 5 */ EN_AOB01_ANIM_IDLE_2
} EnAob01Animation;
typedef enum {
/* 0 */ EN_AOB01_EYE_OPEN,
/* 1 */ EN_AOB01_EYE_HALF,
/* 2 */ EN_AOB01_EYE_CLOSED,
- /* 3 */ EN_AOB01_EYE_MAX,
+ /* 3 */ EN_AOB01_EYE_MAX
} EnAob01EyeTexture;
static AnimationInfo sAnimationInfo[] = {
@@ -134,12 +134,12 @@ void EnAob01_InitializeDogPaths(EnAob01* this, PlayState* play) {
s32 pathIndex = ENAOB01_GET_STARTING_DOG_PATH_INDEX(&this->actor);
s16 i = 0;
- if (pathIndex != 0x3F) {
+ if (pathIndex != ENAOB01_PATH_INDEX_NONE) {
do {
- this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, 0x3F);
- pathIndex = this->dogPaths[i]->unk1;
+ this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, ENAOB01_PATH_INDEX_NONE);
+ pathIndex = this->dogPaths[i]->additionalPathIndex;
i++;
- } while (pathIndex != 0xFF);
+ } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE);
}
}
@@ -153,7 +153,7 @@ void EnAob01_SpawnDogs(EnAob01* this, PlayState* play) {
EnAob01_InitializeDogPaths(this, play);
for (i = 0; i < RACEDOG_COUNT; i++) {
- enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->unk1, i);
+ enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->additionalPathIndex, i);
this->dogs[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_DG, sDogInfo[i].pos.x, sDogInfo[i].pos.y, sDogInfo[i].pos.z, 0,
@@ -1215,7 +1215,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0));
@@ -1226,7 +1226,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) {
EnAob01_TransformLimbDraw, &this->actor);
if (this->actor.draw != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
pos = this->actor.world.pos;
scale.x = 0.5f;
scale.y = 0.5f;
diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h
index a550fd0d3..5f7775368 100644
--- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h
+++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h
@@ -29,6 +29,8 @@ typedef void (*EnAob01ActionFunc)(struct EnAob01*, PlayState*);
#define ENAOB01_FLAG_SURPRISE (1 << 7)
#define ENAOB01_FLAG_PLAYER_CAN_TALK (1 << 8)
+#define ENAOB01_PATH_INDEX_NONE 0x3F
+
typedef struct EnAob01 {
/* 0x000 */ Actor actor;
/* 0x144 */ EnAob01ActionFunc actionFunc;
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 b94e3ecb5..75f95cfe6 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -78,26 +78,26 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
EnArrow* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (this->actor.params == -ENARROW_8) {
+ if (this->actor.params == -ARROW_TYPE_DEKU_NUT) {
this->unk_263 = 1;
- this->actor.params = ENARROW_8;
+ this->actor.params = ARROW_TYPE_DEKU_NUT;
}
- if (this->actor.params < ENARROW_6) {
+ if (ARROW_IS_ARROW(this->actor.params)) {
SkelAnime_Init(play, &this->arrow.skelAnime, &gameplay_keep_Skel_014560, &gameplay_keep_Anim_0128BC,
this->arrow.jointTable, this->arrow.jointTable, 5);
- if (this->actor.params < ENARROW_3) {
- if (this->actor.params == ENARROW_1) {
+ if (this->actor.params < ARROW_TYPE_FIRE) {
+ if (this->actor.params == ARROW_TYPE_NORMAL_HORSE) {
D_8088C234.elemDuration = 4;
} else {
D_8088C234.elemDuration = 16;
}
Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C234);
- } else if (this->actor.params == ENARROW_3) {
+ } else if (this->actor.params == ARROW_TYPE_FIRE) {
Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C258);
- } else if (this->actor.params == ENARROW_4) {
+ } else if (this->actor.params == ARROW_TYPE_ICE) {
Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C27C);
- } else if (this->actor.params == ENARROW_5) {
+ } else if (this->actor.params == ARROW_TYPE_LIGHT) {
Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C2A0);
}
}
@@ -105,20 +105,20 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
Collider_InitQuad(play, &this->collider);
Collider_SetQuad(play, &this->collider, &this->actor, &sQuadInit);
- if (this->actor.params < ENARROW_6) {
+ if (ARROW_IS_ARROW(this->actor.params)) {
this->collider.info.toucherFlags &= ~(TOUCH_SFX_WOOD | TOUCH_SFX_HARD);
this->collider.info.toucherFlags |= 0;
}
- if (this->actor.params < ENARROW_0) {
+ if (this->actor.params < ARROW_TYPE_NORMAL_LIT) {
this->collider.base.atFlags = (AT_TYPE_ENEMY | AT_ON);
} else {
this->collider.info.toucher.dmgFlags = Actor_GetArrowDmgFlags(this->actor.params);
- if (this->actor.params == ENARROW_8) {
+ if (this->actor.params == ARROW_TYPE_DEKU_NUT) {
this->collider.info.toucher.damage = 1;
}
- if (this->actor.params == ENARROW_7) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
Actor_SetScale(&this->actor, 1.0f);
}
}
@@ -128,7 +128,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
void EnArrow_Destroy(Actor* thisx, PlayState* play) {
EnArrow* this = THIS;
- if (this->actor.params < ENARROW_6) {
+ if (ARROW_IS_ARROW(this->actor.params)) {
Effect_Destroy(play, this->unk_240);
}
@@ -138,7 +138,7 @@ void EnArrow_Destroy(Actor* thisx, PlayState* play) {
this->unk_264->flags &= ~ACTOR_FLAG_8000;
}
- if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6) && (this->actor.child == NULL)) {
+ if (ARROW_IS_MAGICAL(this->actor.params) && (this->actor.child == NULL)) {
Magic_Reset(play);
}
}
@@ -153,7 +153,7 @@ void func_8088A594(EnArrow* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->actor.parent != NULL) {
- if (this->actor.params == ENARROW_7) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
if (Math_SmoothStepToF(&this->bubble.unk_144, 16.0f, 0.07f, 1.8f, 0.0f) > 0.5f) {
func_800B9010(&this->actor, NA_SE_PL_DEKUNUTS_BUBLE_BREATH - SFX_FLAG);
return;
@@ -166,8 +166,8 @@ void func_8088A594(EnArrow* this, PlayState* play) {
}
}
} else {
- if ((this->actor.params != ENARROW_8) && (player->unk_D57 == 0)) {
- if (this->actor.params == ENARROW_7) {
+ if ((this->actor.params != ARROW_TYPE_DEKU_NUT) && (player->unk_D57 == 0)) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
Magic_Reset(play);
}
Actor_Kill(&this->actor);
@@ -175,22 +175,22 @@ void func_8088A594(EnArrow* this, PlayState* play) {
}
switch (this->actor.params) {
- case ENARROW_6:
+ case ARROW_TYPE_SLINGSHOT:
Player_PlaySfx(player, NA_SE_IT_SLING_SHOT);
break;
- case ENARROW_0:
- case ENARROW_1:
- case ENARROW_2:
+ case ARROW_TYPE_NORMAL_LIT:
+ case ARROW_TYPE_NORMAL_HORSE:
+ case ARROW_TYPE_NORMAL:
Player_PlaySfx(player, NA_SE_IT_ARROW_SHOT);
break;
- case ENARROW_3:
- case ENARROW_4:
- case ENARROW_5:
+ case ARROW_TYPE_FIRE:
+ case ARROW_TYPE_ICE:
+ case ARROW_TYPE_LIGHT:
Player_PlaySfx(player, NA_SE_IT_MAGIC_ARROW_SHOT);
- case ENARROW_7:
+ case ARROW_TYPE_DEKU_BUBBLE:
Player_PlaySfx(player, NA_SE_PL_DEKUNUTS_FIRE);
break;
}
@@ -198,13 +198,13 @@ void func_8088A594(EnArrow* this, PlayState* play) {
this->actionFunc = func_8088ACE0;
Math_Vec3f_Copy(&this->unk_228, &this->actor.world.pos);
- if (this->actor.params == ENARROW_7) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
this->bubble.unk_144 = CLAMP_MIN(this->bubble.unk_144, 3.5f);
func_8088A514(this);
this->unk_260 = 99;
Magic_Reset(play);
- } else if (this->actor.params >= ENARROW_6) {
- if ((this->actor.params == ENARROW_8) && (this->actor.world.rot.x < 0)) {
+ } else if (!ARROW_IS_ARROW(this->actor.params)) {
+ if ((this->actor.params == ARROW_TYPE_DEKU_NUT) && (this->actor.world.rot.x < 0)) {
Actor_SetScale(&this->actor, 0.009f);
this->unk_260 = 40;
} else {
@@ -295,14 +295,14 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
EffectSsGRipple_Spawn(play, &sp44, 100, 500, 4);
EffectSsGRipple_Spawn(play, &sp44, 100, 500, 8);
- if ((this->actor.params == ENARROW_4) || (this->actor.params == ENARROW_3)) {
- if ((this->actor.params == ENARROW_4) && (func_8088B6B0 != this->actionFunc)) {
+ if ((this->actor.params == ARROW_TYPE_ICE) || (this->actor.params == ARROW_TYPE_FIRE)) {
+ if ((this->actor.params == ARROW_TYPE_ICE) && (func_8088B6B0 != this->actionFunc)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_BG_ICEFLOE, sp44.x, sp44.y, sp44.z, 0, 0, 0, 300);
Actor_Kill(&this->actor);
return;
}
- this->actor.params = ENARROW_2;
+ this->actor.params = ARROW_TYPE_NORMAL;
this->collider.info.toucher.dmgFlags = 0x20;
if (this->actor.child != NULL) {
@@ -329,14 +329,14 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
s32 sp50;
if ((DECR(this->unk_260) == 0) ||
- ((this->actor.params == ENARROW_7) &&
+ ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) &&
((this->unk_262 != 0) || (phi_a2 = (this->collider.base.atFlags & AT_HIT) != 0)))) {
- if (this->actor.params == ENARROW_7) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
if (phi_a2 && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4) &&
(this->collider.base.atFlags & AT_BOUNCED)) {
if ((this->collider.base.at != NULL) && (this->collider.base.at->id != ACTOR_OBJ_SYOKUDAI)) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
- this->actor.world.rot.y += BINANG_ROT180((s16)randPlusMinusPoint5Scaled(8000.0f));
+ this->actor.world.rot.y += BINANG_ROT180((s16)(s32)Rand_CenteredFloat(0x1F40));
this->actor.velocity.y = -this->actor.velocity.y;
this->bubble.unk_149 = -1;
return;
@@ -361,18 +361,18 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
return;
}
- sp50 =
- (this->actor.params != ENARROW_0) && (this->actor.params < ENARROW_8) && (this->collider.base.atFlags & AT_HIT);
+ sp50 = (this->actor.params != ARROW_TYPE_NORMAL_LIT) && (this->actor.params < ARROW_TYPE_DEKU_NUT) &&
+ (this->collider.base.atFlags & AT_HIT);
if (sp50 || (this->unk_262 != 0)) {
- if (this->actor.params >= ENARROW_6) {
+ if (!ARROW_IS_ARROW(this->actor.params)) {
if (sp50) {
this->actor.world.pos.x = (this->actor.world.pos.x + this->actor.prevPos.x) * 0.5f;
this->actor.world.pos.y = (this->actor.world.pos.y + this->actor.prevPos.y) * 0.5f;
this->actor.world.pos.z = (this->actor.world.pos.z + this->actor.prevPos.z) * 0.5f;
}
- if (this->actor.params == ENARROW_8) {
+ if (this->actor.params == ARROW_TYPE_DEKU_NUT) {
R_TRANS_FADE_FLASH_ALPHA_STEP = -1;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_FIRE1, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, this->actor.speed == 0.0f);
@@ -408,12 +408,12 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
} else if (this->unk_262 != 0) {
this->actionFunc = func_8088B630;
Animation_PlayOnce(&this->arrow.skelAnime, &gameplay_keep_Anim_0128BC);
- if (this->actor.params >= ENARROW_0) {
+ if (this->actor.params >= ARROW_TYPE_NORMAL_LIT) {
this->unk_260 = 60;
} else {
this->unk_260 = 20;
}
- if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) {
+ if (ARROW_IS_MAGICAL(this->actor.params)) {
this->actor.draw = NULL;
}
Actor_PlaySfx(&this->actor, NA_SE_IT_ARROW_STICK_OBJ);
@@ -422,7 +422,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
}
} else {
func_8088AA98(this, play);
- if (this->actor.params == ENARROW_7) {
+ if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
if (this->bubble.unk_149 == 0) {
sp78 = sqrtf(SQ(this->actor.speed) + SQ(this->actor.velocity.y));
sp74 = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
@@ -468,12 +468,13 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
if ((this->unk_262 = BgCheck_ProjectileLineTest(&play->colCtx, &this->actor.prevPos, &this->actor.world.pos,
&sp9C, &this->actor.wallPoly, true, true, true, true, &spA8))) {
+ // `func_800B90AC` only returns a boolean, and does not process any code
func_800B90AC(play, &this->actor, this->actor.wallPoly, spA8, &sp9C);
Math_Vec3f_Copy(&this->actor.world.pos, &sp9C);
this->actor.wallBgId = spA8;
}
- if (this->actor.params < ENARROW_6) {
+ if (ARROW_IS_ARROW(this->actor.params)) {
this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y);
}
}
@@ -540,21 +541,27 @@ void EnArrow_Update(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->unk_263 != 0) ||
- ((this->actor.params >= ENARROW_0) && ((this->actor.params == ENARROW_7) || (player->unk_D57 != 0))) ||
+ ((this->actor.params >= ARROW_TYPE_NORMAL_LIT) &&
+ ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) || (player->unk_D57 != 0))) ||
!Player_InBlockingCsMode(play, player)) {
this->actionFunc(this, play);
}
- if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) {
- s16 sp44[] = { ACTOR_ARROW_FIRE, ACTOR_ARROW_ICE, ACTOR_ARROW_LIGHT };
+ if (ARROW_IS_MAGICAL(this->actor.params)) {
+ s16 sp44[] = {
+ ACTOR_ARROW_FIRE, // ARROW_MAGIC_FIRE
+ ACTOR_ARROW_ICE, // ARROW_MAGIC_ICE
+ ACTOR_ARROW_LIGHT, // ARROW_MAGIC_LIGHT
+ };
if (this->actor.child == NULL) {
- Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[this->actor.params - ENARROW_3],
+ Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[ARROW_GET_MAGIC_FROM_TYPE(this->actor.params)],
this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0);
}
- } else if (this->actor.params == ENARROW_0) {
+ } else if (this->actor.params == ARROW_TYPE_NORMAL_LIT) {
func_800B0EB0(play, &this->unk_234, &D_8088C2CC, &D_8088C2D8, &D_8088C2E4, &D_8088C2E8, 100, 0, 8);
}
+
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.prevPos);
}
@@ -579,8 +586,8 @@ void func_8088B88C(PlayState* play, EnArrow* this, EnArrowUnkStruct* arg2) {
}
Matrix_MultVec3f(&sp4C[0], &sp40);
Matrix_MultVec3f(&sp4C[1], &sp34);
- if (this->actor.params < ENARROW_8) {
- sp30 = this->actor.params < ENARROW_6;
+ if (this->actor.params < ARROW_TYPE_DEKU_NUT) {
+ sp30 = ARROW_IS_ARROW(this->actor.params);
if (this->unk_264 == NULL) {
sp30 &= func_80126440(play, &this->collider, &this->unk_244, &sp40, &sp34);
} else if (sp30 && (sp40.x == this->unk_244.tip.x) && (sp40.y == this->unk_244.tip.y) &&
@@ -635,11 +642,11 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
EnArrow* this = THIS;
s32 phi_v0;
- if (this->actor.params < ENARROW_6) {
- func_8012C28C(play->state.gfxCtx);
+ if (ARROW_IS_ARROW(this->actor.params)) {
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawLod(play, this->arrow.skelAnime.skeleton, this->arrow.skelAnime.jointTable, NULL, NULL,
&this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1);
- } else if (this->actor.params == ENARROW_7) {
+ } else if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) {
s32 spA4 = 255 - (s32)(this->bubble.unk_144 * 4.0f);
f32 spA0 = (this->actor.speed * 0.1f) + 1.0f;
f32 sp9C = (1.0f / spA0);
@@ -660,7 +667,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
Matrix_Translate(0.0f, 0.0f, 460.0f, MTXMODE_APPLY);
if (this->actor.speed == 0.0f) {
- func_800B8118(&this->actor, play, MTXMODE_NEW);
+ func_800B8118(&this->actor, play, 0);
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_06F380);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
@@ -693,11 +700,11 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C240(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu2(play->state.gfxCtx);
gSPClearGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING);
- if (this->actor.params == ENARROW_6) {
+ if (this->actor.params == ARROW_TYPE_SLINGSHOT) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 255, 255, sp63);
sp5C = 50.0f;
@@ -729,7 +736,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
} else if (this->actor.velocity.y != 0.0f) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -737,5 +744,6 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
+
func_8088B88C(play, this, &D_8088C2EC[0]);
}
diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
index 313dd86bb..14d5bef94 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
@@ -7,17 +7,30 @@ struct EnArrow;
typedef void (*EnArrowActionFunc)(struct EnArrow*, PlayState*);
-enum {
- /* 0 */ ENARROW_0, // Lit arrow
- /* 1 */ ENARROW_1, // Horse arrow
- /* 2 */ ENARROW_2, // Normal arrow
- /* 3 */ ENARROW_3, // Fire arrow
- /* 4 */ ENARROW_4, // Ice arrow
- /* 5 */ ENARROW_5, // Light arrow
- /* 6 */ ENARROW_6, // ?
- /* 7 */ ENARROW_7, // Deku bubble
- /* 8 */ ENARROW_8, // Deku Nut
-};
+typedef enum ArrowType {
+ /* 0 */ ARROW_TYPE_NORMAL_LIT, // Normal arrow lit on fire
+ /* 1 */ ARROW_TYPE_NORMAL_HORSE, // Normal arrow shot while riding a horse
+ /* 2 */ ARROW_TYPE_NORMAL,
+ /* 3 */ ARROW_TYPE_FIRE,
+ /* 4 */ ARROW_TYPE_ICE,
+ /* 5 */ ARROW_TYPE_LIGHT,
+ /* 6 */ ARROW_TYPE_SLINGSHOT,
+ /* 7 */ ARROW_TYPE_DEKU_BUBBLE,
+ /* 8 */ ARROW_TYPE_DEKU_NUT
+} ArrowType;
+
+#define ARROW_IS_MAGICAL(arrowType) (((arrowType) >= ARROW_TYPE_FIRE) && ((arrowType) <= ARROW_TYPE_LIGHT))
+#define ARROW_GET_MAGIC_FROM_TYPE(arrowType) (s32)((arrowType) - ARROW_TYPE_FIRE)
+#define ARROW_IS_ARROW(arrowType) ((arrowType) < ARROW_TYPE_SLINGSHOT)
+
+typedef enum ArrowMagic {
+ /* -1 */ ARROW_MAGIC_INVALID = -1,
+ /* 0 */ ARROW_MAGIC_FIRE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_FIRE),
+ /* 1 */ ARROW_MAGIC_ICE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_ICE),
+ /* 2 */ ARROW_MAGIC_LIGHT = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_LIGHT),
+ /* 3 */ ARROW_MAGIC_DEKU_BUBBLE // Only used in Player. Does not map to ARROW_TYPE_SLINGSHOT
+} ArrowMagic;
+
typedef struct {
/* 0x144 */ SkelAnime skelAnime;
diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
index bb3e2f23a..e8b74f8ec 100644
--- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
+++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
@@ -54,9 +54,9 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
this->actor.gravity = 0.0f;
- this->randomTargetCenterOffset.x = randPlusMinusPoint5Scaled(100.0f);
- this->randomTargetCenterOffset.y = randPlusMinusPoint5Scaled(10.0f);
- this->randomTargetCenterOffset.z = randPlusMinusPoint5Scaled(100.0f);
+ this->randomTargetCenterOffset.x = Rand_CenteredFloat(100.0f);
+ this->randomTargetCenterOffset.y = Rand_CenteredFloat(10.0f);
+ this->randomTargetCenterOffset.z = Rand_CenteredFloat(100.0f);
Actor_SetScale(&this->actor, 0.01f);
this->actor.flags &= ~ACTOR_FLAG_1; // Unnecessary: this actor does not start with this flag
@@ -68,7 +68,7 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) {
EnAttackNiw* this = THIS;
EnNiw* parent = (EnNiw*)this->actor.parent;
- if (this->actor.parent != NULL && this->actor.parent->update != NULL) {
+ if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) {
if (parent->attackNiwCount > 0) {
parent->attackNiwCount--;
}
@@ -78,11 +78,11 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) {
/**
* Summary: instead of using SkelAnime animations AttackNiw modifies head+wings directly to create animations
*
- * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animationState (2/5)
+ * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animIndex (2/5)
*/
-void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animationState) {
+void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animIndex) {
if (this->unkTimer24C == 0) {
- if (animationState == 0) {
+ if (animIndex == 0) {
this->targetBodyRotY = 0.0f;
} else {
this->targetBodyRotY = -10000.0f;
@@ -92,7 +92,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati
this->unkTimer24C = 3;
if ((this->clearRotYToggleTimer % 2) == 0) {
this->targetBodyRotY = 0.0f;
- if (animationState == 0) {
+ if (animIndex == 0) {
this->unkTimer24C = Rand_ZeroFloat(30.0f);
}
}
@@ -102,7 +102,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati
this->unkToggle28A++;
this->unkToggle28A &= 1;
- switch (animationState) { // only case 2 and 5 are ever called in AttackNiw
+ switch (animIndex) { // only case 2 and 5 are ever called in AttackNiw
case NIW_ANIM_STILL:
this->targetLeftWingRotZ = 0.0f;
this->targetRightWingRotZ = 0.0f;
@@ -156,6 +156,9 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati
this->targetLeftWingRotY = 10000.0f;
}
break;
+
+ default:
+ break;
}
}
@@ -308,7 +311,7 @@ void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) {
}
if (this->randomAngleChangeTimer == 50) {
- this->targetRotY = randPlusMinusPoint5Scaled(200.0f) + this->actor.yawTowardsPlayer;
+ this->targetRotY = Rand_CenteredFloat(200.0f) + this->actor.yawTowardsPlayer;
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 2, this->rotStep, 0);
@@ -446,7 +449,7 @@ s32 EnAttackNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
void EnAttackNiw_Draw(Actor* thisx, PlayState* play) {
EnAttackNiw* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnAttackNiw_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c
index 1c2cdf533..f4a9005f6 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.c
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.c
@@ -72,7 +72,7 @@ typedef enum {
/* 10 */ BEAVER_ANIM_TALK_TO_RIGHT,
/* 11 */ BEAVER_ANIM_BOW,
/* 12 */ BEAVER_ANIM_IDLE_FACE_LEFT,
- /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT,
+ /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT
} BeaverAnimation;
static AnimationSpeedInfo sAnimationInfo[] = {
@@ -1784,7 +1784,9 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
EnAz* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19);
+
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
+
CLOSE_DISPS(play->state.gfxCtx);
if (this->unk_374 & 2) {
@@ -1792,13 +1794,16 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
func_80A98DA4, func_80A98E48, &this->actor);
} else {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sYoungerBrotherEyeTextures[this->unk_37E]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sYoungerBrotherBeltTextures[this->unk_380]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
func_80A98DA4, func_80A98E48, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
OPEN_DISPS(play->state.gfxCtx);
+
if ((this->actor.depthInWater >= 28.0f) && (this->actor.speed > 0.5f)) {
Matrix_Translate(this->unk_3B4.x, this->unk_3B4.y, this->unk_3B4.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
@@ -1806,7 +1811,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY);
Matrix_RotateXS(this->unk_39E, MTXMODE_APPLY);
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->unk_374 & 2) {
s32 i;
Vec3f sp98;
@@ -1853,6 +1858,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailSplashDL);
}
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c
index 5296260f9..e62cc45f4 100644
--- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c
+++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c
@@ -293,9 +293,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK) {
this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK;
- func_80151BB4(play, 0x33);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK);
}
- func_80151BB4(play, 4);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY);
}
}
@@ -511,7 +511,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) {
} else if (play->sceneId == SCENE_BACKTOWN) {
if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE) &&
(gSaveContext.save.entrance != ENTRANCE(NORTH_CLOCK_TOWN, 7)) &&
- (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F)) {
+ (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE)) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40) ||
(gSaveContext.save.time >= CLOCK_TIME(0, 20) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) {
Actor_Kill(&this->actor);
@@ -550,7 +550,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) {
this->animIndex = BOMB_SHOP_LADY_ANIM_SWAY;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
this->actionFunc = EnBaba_DoNothing;
- } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F) {
+ } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE) {
this->animIndex = BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
this->actionFunc = EnBaba_Walk;
@@ -602,7 +602,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (play->msgCtx.unk120B1 == 0) {
+ if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
SET_WEEKEVENTREG(WEEKEVENTREG_81_02);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
return;
@@ -625,7 +625,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
}
}
} else if (talkState == TEXT_STATE_DONE) {
- if (Message_ShouldAdvance(play) && (play->msgCtx.unk120B1 == 0)) {
+ if (Message_ShouldAdvance(play) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) {
SET_WEEKEVENTREG(WEEKEVENTREG_81_02);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
}
@@ -728,7 +728,7 @@ void EnBaba_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), BOMB_SHOP_LADY_PATH_INDEX_NONE);
Actor_SetScale(&this->actor, 0.01f);
@@ -810,7 +810,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_VISIBLE) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBbaEyeTex));
@@ -821,7 +821,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_DRAW_SHADOW) {
if ((this->animIndex == BOMB_SHOP_LADY_ANIM_KNOCKED_OVER) ||
(this->animIndex == BOMB_SHOP_LADY_ANIM_LYING_DOWN)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
pos.x = this->actor.world.pos.x + 20.0f;
pos.y = this->actor.world.pos.y;
pos.z = this->actor.world.pos.z + 20.0f;
diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.h b/src/overlays/actors/ovl_En_Baba/z_en_baba.h
index 7da0ed054..9618dd3a2 100644
--- a/src/overlays/actors/ovl_En_Baba/z_en_baba.h
+++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.h
@@ -12,6 +12,8 @@ typedef void (*EnBabaActionFunc)(struct EnBaba*, PlayState*);
#define BOMB_SHOP_LADY_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3F00) >> 8)
#define BOMB_SHOP_LADY_GET_TYPE(thisx) (((thisx)->params & 0xC000) >> 0xE)
+#define BOMB_SHOP_LADY_PATH_INDEX_NONE 0x3F
+
// Types BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE and BOMB_SHOP_LADY_TYPE_IDLE can only be used in SCENE_BACKTOWN
// Type BOMB_SHOP_LADY_TYPE_SWAY can be used anywhere except SCENE_BACKTOWN and SCENE_BOMYA
typedef enum {
diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c
index 14f4112eb..406270ff8 100644
--- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c
+++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c
@@ -27,18 +27,18 @@ void EnBaguo_UpdateEffects(EnBaguo* this, PlayState* play);
void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play);
typedef enum {
- /* 0x0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground
- /* 0x1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player
- /* 0x2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground
- /* 0x3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated
+ /* 0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground
+ /* 1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player
+ /* 2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground
+ /* 3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated
} NejironAction;
/**
* These directions are relative to the Nejiron.
*/
typedef enum {
- /* 0x0 */ NEJIRON_DIRECTION_RIGHT,
- /* 0x1 */ NEJIRON_DIRECTION_LEFT
+ /* 0 */ NEJIRON_DIRECTION_RIGHT,
+ /* 1 */ NEJIRON_DIRECTION_LEFT
} NejironRollDirection;
ActorInit En_Baguo_InitVars = {
@@ -419,7 +419,7 @@ void EnBaguo_DrawBody(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
@@ -449,9 +449,9 @@ void EnBaguo_InitializeEffect(EnBaguo* this, Vec3f* pos, Vec3f* velocity, Vec3f*
effect->accel = *accel;
effect->scale = scale;
effect->timer = timer;
- effect->rotation.x = (s16)randPlusMinusPoint5Scaled(30000.0f);
- effect->rotation.y = (s16)randPlusMinusPoint5Scaled(30000.0f);
- effect->rotation.z = (s16)randPlusMinusPoint5Scaled(30000.0f);
+ effect->rotation.x = (s16)(s32)Rand_CenteredFloat(0x7530);
+ effect->rotation.y = (s16)(s32)Rand_CenteredFloat(0x7530);
+ effect->rotation.z = (s16)(s32)Rand_CenteredFloat(0x7530);
return;
}
}
@@ -496,7 +496,7 @@ void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isEnabled) {
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c
index 5479d6c1e..7ff5da288 100644
--- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c
+++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c
@@ -281,7 +281,7 @@ s32 EnBaisen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
void EnBaisen_Draw(Actor* thisx, PlayState* play) {
EnBaisen* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnBaisen_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c
index 138b7287b..acb47b743 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c
@@ -161,11 +161,10 @@ void EnBat_Init(Actor* thisx, PlayState* play) {
EnBat_SetupFlyIdle(this);
while (BAD_BAT_GET_NUMBER_TO_SPAWN(thisx) > 1) {
Actor_SpawnAsChildAndCutscene(
- &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + randPlusMinusPoint5Scaled(200.0f),
- thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f),
- thisx->world.pos.z + randPlusMinusPoint5Scaled(200.0f), randPlusMinusPoint5Scaled(0x2000),
- 0xFFFF * Rand_ZeroOne(), 0, BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE,
- thisx->halfDaysBits, NULL);
+ &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + Rand_CenteredFloat(200.0f),
+ thisx->world.pos.y + Rand_CenteredFloat(100.0f), thisx->world.pos.z + Rand_CenteredFloat(200.0f),
+ Rand_CenteredFloat(0x2000), 0xFFFF * Rand_ZeroOne(), 0,
+ BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, thisx->halfDaysBits, NULL);
BAD_BAT_GET_NUMBER_TO_SPAWN(thisx)--;
}
}
@@ -530,7 +529,7 @@ void EnBat_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[2], gBadBatSetupDL);
gSPDisplayList(&gfx[3], gBadBatBodyDL);
diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
index 071515919..63fb13292 100644
--- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c
+++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
@@ -32,7 +32,7 @@ void EnBb_Revive(EnBb* this, PlayState* play);
typedef enum {
/* -1 */ BB_BODY_PART_DRAW_STATUS_BROKEN = -1,
/* 0 */ BB_BODY_PART_DRAW_STATUS_ALIVE,
- /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD,
+ /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD
} EnBbBodyPartDrawStatus;
ActorInit En_Bb_InitVars = {
@@ -73,7 +73,7 @@ typedef enum {
/* 0x3 */ EN_BB_DMGEFF_ICE_ARROW = 0x3,
/* 0x4 */ EN_BB_DMGEFF_LIGHT_ARROW,
/* 0x5 */ EN_BB_DMGEFF_ZORA_MAGIC,
- /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE,
+ /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE
} EnBbDamageEffect;
static DamageTable sDamageTable = {
@@ -256,7 +256,7 @@ void EnBb_FlyIdle(EnBb* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
- } else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) {
+ } else if (Animation_OnFrame(&this->skelAnime, 0.0f) && (Rand_ZeroOne() < 0.1f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH);
}
@@ -287,11 +287,11 @@ void EnBb_Attack(EnBb* this, PlayState* play) {
this->targetYRotation = this->actor.yawTowardsPlayer;
EnBb_UpdateStateForFlying(this);
- if ((Animation_OnFrame(&this->skelAnime, 0.0f)) || (Animation_OnFrame(&this->skelAnime, 5.0f))) {
+ if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_MOUTH);
- } else if ((Animation_OnFrame(&this->skelAnime, 2.0f)) || (Animation_OnFrame(&this->skelAnime, 7.0f))) {
+ } else if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 7.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
- } else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) {
+ } else if (Animation_OnFrame(&this->skelAnime, 0.0f) && (Rand_ZeroOne() < 0.1f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH);
}
@@ -682,14 +682,14 @@ void EnBb_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
POLY_OPA_DISP = &gfx[1];
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBb_OverrideLimbDraw,
EnBb_PostLimbDraw, &this->actor);
if (this->flameScaleX > 0.0f) {
currentMatrixState = Matrix_GetCurrent();
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c
index b751a50d5..d124f0b77 100644
--- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c
+++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c
@@ -162,7 +162,7 @@ void EnBba01_FinishInit(EnHy* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_1;
this->actor.draw = EnBba01_Draw;
this->waitingOnInit = false;
- if (ENBBA01_GET_PATH(&this->actor) == 0x3F) {
+ if (ENBBA01_GET_PATH_INDEX(&this->actor) == ENBBA01_PATH_INDEX_NONE) {
this->actionFunc = EnBba01_FaceFoward;
} else {
this->actionFunc = EnBba01_Walk;
@@ -227,7 +227,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
this->enHy.actor.flags &= ~ACTOR_FLAG_1;
- this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH(&this->enHy.actor), 0x3F);
+ this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH_INDEX(&this->enHy.actor), ENBBA01_PATH_INDEX_NONE);
this->enHy.waitingOnInit = true;
Actor_SetScale(&this->enHy.actor, 0.01f);
this->enHy.actionFunc = EnBba01_FinishInit;
@@ -261,11 +261,14 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+
CLOSE_DISPS(play->state.gfxCtx);
}
+
if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) {
Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateXS(this->enHy.headRot.y, MTXMODE_APPLY);
@@ -297,8 +300,10 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == BBA_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -318,7 +323,7 @@ void EnBba01_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0));
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h
index 7160594d8..0cc158f2a 100644
--- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h
+++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h
@@ -7,7 +7,9 @@ struct EnBba01;
typedef void (*EnBba01ActionFunc)(struct EnBba01*, PlayState*);
-#define ENBBA01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
+#define ENBBA01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9)
+
+#define ENBBA01_PATH_INDEX_NONE 0x3F
typedef struct EnBba01 {
/* 0x000 */ EnHy enHy;
diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
index a1e2798df..d52f12ccf 100644
--- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
+++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
@@ -32,7 +32,7 @@ void EnBbfall_Frozen(EnBbfall* this, PlayState* play);
typedef enum {
/* -1 */ BBFALL_BODY_PART_DRAW_STATUS_BROKEN = -1,
/* 0 */ BBFALL_BODY_PART_DRAW_STATUS_ALIVE,
- /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD,
+ /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD
} EnBbfallBodyPartDrawStatus;
ActorInit En_Bbfall_InitVars = {
@@ -102,7 +102,7 @@ typedef enum {
/* 0x3 */ EN_BBFALL_DMGEFF_ICE_ARROW = 0x3,
/* 0x4 */ EN_BBFALL_DMGEFF_LIGHT_ARROW,
/* 0x5 */ EN_BBFALL_DMGEFF_ZORA_MAGIC,
- /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE,
+ /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE
} EnBbfallDamageEffect;
static DamageTable sDamageTable = {
@@ -340,7 +340,7 @@ void EnBbfall_Fly(EnBbfall* this, PlayState* play) {
// Bounce upwards off the ground
this->actor.velocity.y *= -1.2f;
this->actor.velocity.y = CLAMP(this->actor.velocity.y, 8.0f, 12.0f);
- this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(73728.0f);
+ this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x12000);
}
this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
@@ -718,13 +718,13 @@ void EnBbfall_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
POLY_OPA_DISP = &gfx[1];
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBbfall_OverrideLimbDraw,
EnBbfall_PostLimbDraw, &this->actor);
if (this->flameOpacity > 0) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.c b/src/overlays/actors/ovl_En_Bee/z_en_bee.c
index f93d18bf5..1c2d1ed0f 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c
@@ -158,9 +158,9 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) {
nextPos.z += Math_CosS(this->targetYaw) * 30.0f;
if ((this->instanceId % 2) == 0) {
- this->targetYaw += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
+ this->targetYaw += (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000);
} else {
- this->targetYaw -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
+ this->targetYaw -= (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000);
}
this->flightHoverOffset += 1000;
@@ -197,10 +197,10 @@ void EnBee_Attack(EnBee* this, PlayState* play) {
yawOffset = (this->instanceId * 0x700) + 0x2000;
for (i = 0; i < 2; i++) {
- rand = randPlusMinusPoint5Scaled(20.0f);
+ rand = Rand_CenteredFloat(20.0f);
nextPos.x += Math_SinS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
nextPos.y = (Math_SinS(this->flightHoverOffset) * 10.0f) + (player->actor.floorHeight + 40.0f);
- rand = randPlusMinusPoint5Scaled(20.0f);
+ rand = Rand_CenteredFloat(20.0f);
nextPos.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
Math_Vec3f_Copy(&this->targetPos[i], &nextPos);
@@ -210,14 +210,12 @@ void EnBee_Attack(EnBee* this, PlayState* play) {
Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]);
if ((this->instanceId % 2) == 0) {
- this->targetYaw +=
- (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
+ this->targetYaw += (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f);
} else {
- this->targetYaw -=
- (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
+ this->targetYaw -= (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f);
}
- this->flightHoverOffset += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000;
+ this->flightHoverOffset += (s32)Rand_CenteredFloat(500.0f) + 1000;
if (this->targetYaw > 0x10000) {
this->targetYaw = 0;
@@ -284,7 +282,7 @@ void EnBee_Update(Actor* thisx, PlayState* play) {
void EnBee_Draw(Actor* thisx, PlayState* play) {
EnBee* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.h b/src/overlays/actors/ovl_En_Bee/z_en_bee.h
index 09d9ef931..b1773a5ca 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h
@@ -9,8 +9,8 @@ struct EnBee;
typedef void (*EnBeeActionFunc)(struct EnBee*, PlayState*);
typedef enum {
- /* 0 */ BEE_BEHAVIOR_IDLE = 0,
- /* 1 */ BEE_BEHAVIOR_ATTACK,
+ /* 0 */ BEE_BEHAVIOR_IDLE,
+ /* 1 */ BEE_BEHAVIOR_ATTACK
} BeeBehaviorType;
typedef struct EnBee {
diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c
index da6bc06a3..6d99ada15 100644
--- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c
+++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c
@@ -59,9 +59,9 @@ void func_80C22DEC(EnBh* this, PlayState* play) {
xzDist = sqrtf(SQ(xDiff) + SQ(zDiff));
if ((this->timer2 == 0) || (xzDist < 100.0f)) {
- this->pos.x = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.x;
- this->pos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.home.pos.y;
- this->pos.z = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.z;
+ this->pos.x = Rand_CenteredFloat(300.0f) + this->actor.home.pos.x;
+ this->pos.y = Rand_CenteredFloat(100.0f) + this->actor.home.pos.y;
+ this->pos.z = Rand_CenteredFloat(300.0f) + this->actor.home.pos.z;
this->timer2 = Rand_ZeroFloat(50.0f) + 30.0f;
this->step = 0;
}
@@ -85,7 +85,7 @@ void func_80C22DEC(EnBh* this, PlayState* play) {
this->skelanime.playSpeed = 1.0f;
this->timer = Rand_ZeroFloat(70.0f) + 50.0f;
} else if (((this->timer & 7) == 7) && (Rand_ZeroOne() < 0.5f)) {
- this->unk1E4 = randPlusMinusPoint5Scaled(3000.0f);
+ this->unk1E4 = Rand_CenteredFloat(3000.0f);
}
} else {
SkelAnime_Update(&this->skelanime);
@@ -114,7 +114,7 @@ void EnBh_Update(Actor* thisx, PlayState* play) {
void EnBh_Draw(Actor* thisx, PlayState* play) {
EnBh* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_RotateZS(this->unk1E2, MTXMODE_APPLY);
SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL,
NULL, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
index f331666d3..1b849799a 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
@@ -436,9 +436,9 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
bubblePos.y = this->picto.actor.world.pos.y;
for (i = 0; i < 20; i++) {
- bubbleVel.x = randPlusMinusPoint5Scaled(10.0f);
+ bubbleVel.x = Rand_CenteredFloat(10.0f);
bubbleVel.y = Rand_ZeroFloat(5.5f) + 5.5f;
- bubbleVel.z = randPlusMinusPoint5Scaled(10.0f);
+ bubbleVel.z = Rand_CenteredFloat(10.0f);
bubblePos.x = this->picto.actor.world.pos.x + (2.0f * bubbleVel.x);
bubblePos.z = this->picto.actor.world.pos.z + (2.0f * bubbleVel.z);
@@ -604,7 +604,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
MTXMODE_APPLY);
}
} else if (this->actionFunc == EnBigokuta_SuckInPlayer) {
- f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f;
+ f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f;
Matrix_Scale(((this->timer * (2 / 90.0f)) * (0.5f + sin)) + 1.0f,
((this->timer * (2 / 90.0f)) * (0.5f - sin)) + 1.0f, 1.0f - ((this->timer * 0.3f) / 9.0f),
@@ -613,7 +613,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
if (this->timer == 0) {
Matrix_Scale(0.9f, 0.9f, 1.15f, MTXMODE_APPLY);
} else if (this->timer > 0) {
- f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f;
+ f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f;
Matrix_Scale(((0.5f + sin) * 0.2f) + 1.0f, ((0.5f - sin) * 0.2f) + 1.0f, 0.7f, MTXMODE_APPLY);
} else {
@@ -657,10 +657,11 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) {
Gfx* gfx;
OPEN_DISPS(play->state.gfxCtx);
+
if ((this->actionFunc != EnBigokuta_PlayDeathEffects) || (this->timer != 0)) {
Scene_SetRenderModeXlu(play, 0, 1);
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, 255);
POLY_OPA_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
@@ -668,7 +669,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) {
} else {
Scene_SetRenderModeXlu(play, 1, 2);
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->picto.actor.scale.y * 7727.273f));
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c
index 915bf85ba..3daaf1f85 100644
--- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c
+++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c
@@ -267,7 +267,7 @@ void func_80A27B58(EnBigpamet* this) {
this->unk_2A2 = 40;
for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) {
- temp_s1 = (s32)randPlusMinusPoint5Scaled(20480.0f) + this->actor.wallYaw;
+ temp_s1 = (s32)Rand_CenteredFloat(0x5000) + this->actor.wallYaw;
temp_s2 = Rand_S16Offset(0x1000, 0x3000);
temp_fs2 = Math_SinS(temp_s2);
@@ -342,7 +342,7 @@ void func_80A27FE8(EnBigpamet* this, PlayState* play) {
pos.y += 8.0f;
if (this->actionFunc != func_80A28D0C) {
- sp32 = (s32)randPlusMinusPoint5Scaled(0x8000) + this->actor.world.rot.y;
+ sp32 = (s32)Rand_CenteredFloat(0x8000) + this->actor.world.rot.y;
pos.x -= 55.0f * Math_SinS(sp32);
pos.z -= 55.0f * Math_CosS(sp32);
}
@@ -790,7 +790,7 @@ void func_80A292A8(EnBigpamet* this, PlayState* play) {
if (this->unk_2A2 > 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
@@ -834,7 +834,7 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]);
@@ -874,7 +874,7 @@ void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
void func_80A2966C(Actor* thisx, PlayState* play) {
EnBigpamet* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount,
EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor);
func_80A292A8(this, play);
diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h
index bb9d29280..a3561c33b 100644
--- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h
+++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h
@@ -8,10 +8,10 @@ struct EnBigpamet;
typedef void (*EnBigpametActionFunc)(struct EnBigpamet*, PlayState*);
-enum {
+typedef enum {
/* 0 */ ENBIGPAMET_0,
- /* 1 */ ENBIGPAMET_1,
-};
+ /* 1 */ ENBIGPAMET_1
+} EnBigpametParam;
typedef struct {
/* 0x00 */ Vec3f unk_00;
diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
index f6061d096..056ca97d5 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
@@ -375,7 +375,6 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, PlayState* play) {
this->actor.shape.rot.y += this->rotVelocity;
EnBigpo_RotateSpawnCutsceneFires(this);
- if (1) {}
for (i = 0; i < ARRAY_COUNT(this->fires); i++) {
this->fires[i].pos.y += this->actor.velocity.y;
}
@@ -555,7 +554,7 @@ void EnBigpo_IdleFlying(EnBigpo* this, PlayState* play) {
// flight position calculations
this->hoverHeightCycleTimer = (this->hoverHeightCycleTimer == 0) ? 40 : (this->hoverHeightCycleTimer - 1);
Math_StepToF(&this->savedHeight, player->actor.world.pos.y + 100.0f, 1.5f);
- this->actor.world.pos.y = (sin_rad(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight;
+ this->actor.world.pos.y = (Math_SinF(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight;
Math_StepToF(&this->actor.speed, 3.0f, 0.2f);
func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG);
if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
@@ -689,21 +688,20 @@ void EnBigpo_BurnAwayDeath(EnBigpo* this, PlayState* play) {
if (this->idleTimer < 8) {
camYaw = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x4800;
if (this->idleTimer < 5) {
- unkTemp = (this->idleTimer << 0xC) - 0x4000;
- // 1.4.0...1 is NOT 1.4, the rodata demands it
- tempVec.y = (((Math_SinS(unkTemp) * 23.0f) + 40.0f) * 1.4000001f) + this->actor.world.pos.y;
+ unkTemp = (this->idleTimer * 0x1000) - 0x4000;
+ tempVec.y = (((Math_SinS(unkTemp) * 23.0f) + 40.0f) * (1400.0f * 0.001f)) + this->actor.world.pos.y;
unkTemp2 = Math_CosS(unkTemp) * 32.2f;
tempVec.x = (Math_SinS(camYaw) * unkTemp2) + this->actor.world.pos.x;
tempVec.z = (Math_CosS(camYaw) * unkTemp2) + this->actor.world.pos.z;
} else {
- tempVec.y = this->actor.world.pos.y + ((40.0f + (15.0f * (this->idleTimer - 5))) * 1.4000001f);
+ tempVec.y = this->actor.world.pos.y + ((40.0f + (15.0f * (this->idleTimer - 5))) * (1400.0f * 0.001f));
tempVec.x = (Math_SinS(camYaw) * 32.2f) + this->actor.world.pos.x;
tempVec.z = (Math_CosS(camYaw) * 32.2f) + this->actor.world.pos.z;
}
// not sure what we're turning this into, but its based on the timer
- modifiedTimer = ((f32)((this->idleTimer * 10) + 80) * 1.4000001f);
+ modifiedTimer = ((this->idleTimer * 10) + 80) * (1400.0f * 0.001f);
func_800B3030(play, &tempVec, &D_80B6506C, &gZeroVec3f, modifiedTimer, 0, 2);
tempVec.x = (2.0f * this->actor.world.pos.x) - tempVec.x;
tempVec.z = (2.0f * this->actor.world.pos.z) - tempVec.z;
@@ -828,7 +826,7 @@ void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) {
EnBigpo_SetupScoopSoulLeaving(this);
} else {
Actor_OfferGetItem(&this->actor, play, GI_MAX, 35.0f, 60.0f);
- this->actor.world.pos.y = (sin_rad(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight;
+ this->actor.world.pos.y = (Math_SinF(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight;
}
}
@@ -861,7 +859,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) {
// count the number of possible fires we can find (4 in vanilla)
for (enemyPtr = GET_FIRST_ENEMY(play); enemyPtr != NULL; enemyPtr = enemyPtr->next) {
- if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) {
+ if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) {
fireCount++;
}
}
@@ -882,7 +880,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) {
randomIndex = ((s32)Rand_ZeroFloat(fireCount)) % fireCount;
while (enemyPtr != NULL) {
- if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) {
+ if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) {
if (randomIndex == 0) {
randomFirePo = (EnBigpo*)enemyPtr;
randomFirePo->actor.params = ENBIGPO_CHOSENFIRE;
@@ -1225,8 +1223,8 @@ s32 EnBigpo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
Gfx** gfx) {
EnBigpo* this = THIS;
// not fully invisible
- if (!(this->mainColor.a != 0 && limbIndex != 7) ||
- (this->actionFunc == EnBigpo_BurnAwayDeath && this->idleTimer >= 2)) {
+ if ((this->mainColor.a == 0) || (limbIndex == 7) ||
+ ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2))) {
*dList = NULL;
}
return false;
@@ -1291,7 +1289,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) {
if ((this->mainColor.a == 255) || (this->mainColor.a == 0)) {
// fully visible OR fully transparent
dispHead = POLY_OPA_DISP;
- gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]);
+ gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]);
gSPSegment(&dispHead[1], 0x0C, &D_801AEFA0); // empty display list for no transparency
gSPSegment(&dispHead[2], 0x08,
Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b,
@@ -1301,7 +1299,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) {
} else {
dispHead = POLY_XLU_DISP;
- gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]);
+ gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]);
gSPSegment(&dispHead[1], 0x0C, &D_801AEF88); // transparency display list
gSPSegment(&dispHead[2], 0x08,
Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b,
@@ -1330,7 +1328,7 @@ void EnBigpo_DrawScoopSoul(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -15) % 512, 0x20,
@@ -1382,7 +1380,7 @@ void EnBigpo_DrawLantern(Actor* thisx, PlayState* play) {
dispHead = POLY_XLU_DISP;
}
- gSPDisplayList(&dispHead[0], &sSetupDL[6 * 0x19]);
+ gSPDisplayList(&dispHead[0], gSetupDLs[SETUPDL_25]);
gSPSegment(&dispHead[1], 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 0, 255, this->mainColor.a));
@@ -1416,9 +1414,10 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play) {
s32 i;
mtfxPtr = Matrix_GetCurrent();
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_NEW);
if (this->actionFunc == EnBigpo_SpawnCutsceneStage6) {
Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
@@ -1458,7 +1457,7 @@ void EnBigpo_RevealedFire(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -20) % 512, 0x20,
diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
index 9b84784f4..b532d6d08 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h
@@ -53,16 +53,16 @@ typedef struct EnBigpo {
/* 0x338 */ EnBigpoFireEffect fires[3];
} EnBigpo; // size = 0x398
-// well ver is regular, dampe basement ver is summoned
-// on spawn, 3/possible fires are turned into chosenfire
-enum EnBigpoType {
+// well version is "regular" (spawns automatically), dampe basement version is "summoned"
+// on room enter, 3 "possiblefire" are turned into "chosenfire" at random
+typedef enum EnBigpoType {
/* 0 */ ENBIGPO_REGULAR,
/* 1 */ ENBIGPO_SUMMONED,
/* 2 */ ENBIGPO_POSSIBLEFIRE,
/* 3 */ ENBIGPO_CHOSENFIRE,
/* 4 */ ENBIGPO_REVEALEDFIRE,
- /* 5 */ ENBIGPO_UNK5,
-};
+ /* 5 */ ENBIGPO_UNK5
+} EnBigpoType;
#define BIGPO_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8)
diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
index 3992cd02a..695ac9153 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
@@ -254,7 +254,7 @@ typedef enum {
/* 0x5 */ BIGSLIME_DMGEFF_ELECTRIC_STUN,
/* 0xD */ BIGSLIME_DMGEFF_DEKU_STUN = 0xD,
/* 0xE */ BIGSLIME_DMGEFF_HOOKSHOT,
- /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE,
+ /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE
} BigslimeDamageEffect;
static DamageTable sDamageTable = {
@@ -657,7 +657,7 @@ void EnBigslime_AddWavySurface(EnBigslime* this) {
randFloat = (Rand_ZeroOne() * 40.0f) + 50.0f;
}
- this->vtxSurfacePerturbation[i] = sin_rad((randInt + i) * (M_PI / 3)) * randFloat * 0.001f;
+ this->vtxSurfacePerturbation[i] = Math_SinF((randInt + i) * (M_PI / 3)) * randFloat * 0.001f;
}
}
@@ -673,7 +673,7 @@ void EnBigslime_UpdateWavySurface(EnBigslime* this) {
}
this->wavySurfaceTimer--;
- vtxSurfaceWave = sin_rad(this->wavySurfaceTimer * (M_PI / 12));
+ vtxSurfaceWave = Math_SinF(this->wavySurfaceTimer * (M_PI / 12));
for (i = 0; i < BIGSLIME_NUM_VTX; i++) {
staticVtx = &sBigslimeStaticVtx[i];
dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][i];
@@ -692,9 +692,9 @@ void EnBigslime_InitFallMinislime(EnBigslime* this) {
for (i = 0; i < MINISLIME_NUM_SPAWN; i++) {
minislime = this->minislime[i];
minislime->actor.params = MINISLIME_INIT_FALL;
- minislime->actor.world.pos.x = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f);
+ minislime->actor.world.pos.x = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f);
minislime->actor.world.pos.y = Rand_ZeroFloat(250.0f) + (GBT_ROOM_5_CENTER_Y + 50.0f);
- minislime->actor.world.pos.z = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f);
+ minislime->actor.world.pos.z = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f);
}
this->minislimeState = MINISLIME_ACTIVE_INIT_STATE;
@@ -1169,7 +1169,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) {
s32 j;
for (i = 0; i < BIGSLIME_NUM_RING_FACES / 2; i++) {
- vtxY = (((cos_rad(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F;
+ vtxY = (((Math_CosF(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F;
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1188,7 +1188,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) {
}
for (; i < BIGSLIME_NUM_RING_VTX; i++) {
- vtxY = ((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F;
+ vtxY = ((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F;
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1301,7 +1301,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) {
sBigslimeTargetVtx[0].n.ob[2] = 0;
for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) {
- upperSphereCos = (((cos_rad((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F;
+ upperSphereCos = (((Math_CosF((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F;
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1318,7 +1318,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) {
}
for (; i < BIGSLIME_NUM_RING_FACES; i++) {
- lowerSphereCos = cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES));
+ lowerSphereCos = Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES));
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1361,7 +1361,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) {
sBigslimeTargetVtx[0].n.ob[2] = 0;
for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) {
- upperSphereCos = cos_rad((i - 1) * (M_PI / 10));
+ upperSphereCos = Math_CosF((i - 1) * (M_PI / 10));
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1374,7 +1374,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) {
for (; i < BIGSLIME_NUM_RING_FACES; i++) {
lowerSphereCos =
- (((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F;
+ (((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F;
for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) {
staticVtx = &sBigslimeStaticVtx[j];
targetVtx = &sBigslimeTargetVtx[j];
@@ -1692,7 +1692,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) {
EnBigslime_UpdateCameraGrabPlayer(this, play);
if (this->windupPunchTimer > 0) {
invWindupPunchTimer = 1.0f / this->windupPunchTimer;
- scale = cos_rad(this->windupPunchTimer * (M_PI / 27)) + 1.0f;
+ scale = Math_CosF(this->windupPunchTimer * (M_PI / 27)) + 1.0f;
player->actor.world.pos.y = this->actor.world.pos.y + (this->actor.scale.y * -500.0f);
// Linearly interpolate gekkoRot.y --> this->actor.world.rot.y
@@ -1705,7 +1705,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) {
EnBigslime_GekkoSfxInsideBigslime(this, NA_SE_EN_FROG_PUNCH1);
}
- scale = 0.5f - cos_rad(-this->windupPunchTimer * (M_PI / 5)) * 0.5f;
+ scale = 0.5f - Math_CosF(-this->windupPunchTimer * (M_PI / 5)) * 0.5f;
if (this->windupPunchTimer == -5) {
if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
@@ -1879,7 +1879,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) {
if (vtxIceSeed < BIGSLIME_NUM_VTX) {
dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][vtxIceSeed];
targetVtx = &sBigslimeTargetVtx[vtxIceSeed];
- randFloat = randPlusMinusPoint5Scaled(40.0f);
+ randFloat = Rand_CenteredFloat(40.0f);
dynamicVtx->n.ob[0] += (s16)(randFloat / this->actor.scale.x);
dynamicVtx->n.ob[1] += (s16)(randFloat / this->actor.scale.y);
dynamicVtx->n.ob[2] += (s16)(randFloat / this->actor.scale.z);
@@ -2444,9 +2444,9 @@ void EnBigslime_SetupFrogSpawn(EnBigslime* this, PlayState* play) {
func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &dustPrimColor, &dustEnvColor, 500, 50);
for (i = 0; i < 25; i++) {
- hahenVel.x = randPlusMinusPoint5Scaled(5.0f);
+ hahenVel.x = Rand_CenteredFloat(5.0f);
hahenVel.y = Rand_ZeroFloat(3.0f) + 4.0f;
- hahenVel.z = randPlusMinusPoint5Scaled(5.0f);
+ hahenVel.z = Rand_CenteredFloat(5.0f);
EffectSsHahen_Spawn(play, worldPos, &hahenVel, &hahenAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT, 10,
0);
}
@@ -2464,7 +2464,8 @@ void EnBigslime_FrogSpawn(EnBigslime* this, PlayState* play) {
this->spawnFrogTimer--;
// Zoom the camera in and out at the newly spawned red frog
- subCamZoom = sin_rad(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f;
+ subCamZoom =
+ Math_SinF(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f;
subCamEye.x = subCam->at.x + (this->subCamDistToFrog.x * subCamZoom);
subCamEye.z = subCam->at.z + (this->subCamDistToFrog.z * subCamZoom);
subCamEye.y = subCam->at.y + (this->subCamDistToFrog.y * subCamZoom);
@@ -2884,7 +2885,8 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32
zx = 1.0f - (yDistMinY * (1.0f / 1550.0f));
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
sysMatrix->xx = zx;
sysMatrix->yy = 1.0f;
sysMatrix->zz = zx;
@@ -2907,6 +2909,7 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, (u8)(alpha * zx));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, shadowDList);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -2936,12 +2939,13 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) {
}
OPEN_DISPS(play->state.gfxCtx);
+
for (i = 0; i < MINISLIME_NUM_SPAWN; i++) {
minislime = this->minislime[indices[i]];
lights = LightContext_NewLights(&play->lightCtx, play->state.gfxCtx);
Lights_BindAll(lights, play->lightCtx.listHead, &minislime->actor.world.pos, play);
Lights_Draw(lights, play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&minislime->actor, play, 0);
Matrix_SetTranslateRotateYXZ(minislime->actor.world.pos.x, minislime->actor.world.pos.y,
minislime->actor.world.pos.z, &minislime->actor.shape.rot);
@@ -2963,6 +2967,7 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) {
minislime->actor.scale.y * 400.0f, minislime->actor.shape.rot.y,
minislime->actor.shape.shadowAlpha * (175.0f / 255.0f));
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -2980,8 +2985,9 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) {
MtxF* billboardMtxF;
s32 i;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
+
OPEN_DISPS(play->state.gfxCtx);
// Draw Bigslime
@@ -3018,6 +3024,7 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, gBigslimeBubbleDL);
}
}
+
CLOSE_DISPS(play->state.gfxCtx);
EnBigslime_SetSysMatrix(&this->actor.world.pos, play, gBigslimeShadowDL, this->vtxScaleX, this->vtxScaleZ,
@@ -3070,7 +3077,7 @@ void EnBigslime_DrawGekko(Actor* thisx, PlayState* play) {
EnBigslime* this = THIS;
s32 pad;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->actionFunc == EnBigslime_DamageGekko) {
func_800AE434(play, &gekkoDamageColor, this->damageSpinTimer, 20);
} else if ((this->actionFunc == EnBigslime_CutsceneDefeat) || (this->actionFunc == EnBigslime_GekkoDespawn)) {
@@ -3123,7 +3130,7 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
// Draw Shockwave
if (this->shockwaveAlpha > 0) {
diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
index f10938b37..8f2b5bee3 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
@@ -87,7 +87,7 @@ typedef struct EnBigslime {
s16 isDespawned;
s16 isInitJump;
};
- /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in sin_rad for currData2
+ /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in Math_SinF for currData2
/* 0x02BE */ s16 stunTimer;
/* 0x02C0 */ union {
s16 freezeTimer;
diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
index 43e87a90a..745e3b3e7 100644
--- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
+++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
@@ -434,9 +434,11 @@ void EnBji01_Draw(Actor* thisx, PlayState* play) {
EnBji01* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnBji01_OverrideLimbDraw, EnBji01_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c
index 5ebfca40f..ef5c9c0e2 100644
--- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c
+++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c
@@ -229,7 +229,7 @@ typedef enum {
/* 1 */ TOILET_HAND_BEHAVIOUR_TAKE_ITEM, // take paper and disappear to use it
/* 2 */ TOILET_HAND_BEHAVIOUR_USE_ITEM, // using paper, flushing
/* 3 */ TOILET_HAND_BEHAVIOUR_REAPPEAR, // reappear with reward
- /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN,
+ /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN
} ToiletHandBehaviour;
// msgevent callback/communication. Follow and choose parts of script to run
@@ -456,7 +456,7 @@ void EnBjt_Draw(Actor* thisx, PlayState* play) {
EnBjt* this = THIS;
if (this->scheduleResult != TOILET_HAND_SCH_NONE) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
NULL, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
index 17ebe10f7..b388421b7 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -348,7 +348,7 @@ void EnBom_Explode(EnBom* this, PlayState* play) {
this->collider2.elements->dim.worldSphere.radius = D_80872E8C[this->isPowderKeg];
if (this->timer == 7) {
- this->collider2.base.atFlags &= ~OC1_TYPE_1;
+ this->collider2.base.atFlags &= ~AT_TYPE_ENEMY;
}
if (this->actor.params == BOMB_TYPE_EXPLOSION) {
@@ -616,7 +616,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->actor.params == BOMB_TYPE_BODY) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Collider_UpdateSpheres(0, &this->collider2);
diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
index bf568cd6a..d11547230 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
@@ -11,11 +11,17 @@ typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*);
#define ENBOM_GETZ_80(thisx) ((thisx)->shape.rot.z & 0x80)
#define ENBOM_GETZ_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8)
-typedef enum {
+typedef enum BombType {
/* 0 */ BOMB_TYPE_BODY,
- /* 1 */ BOMB_TYPE_EXPLOSION,
+ /* 1 */ BOMB_TYPE_EXPLOSION
} BombType;
+// Passed via x rotation
+typedef enum BombExplosiveType {
+ /* 0 */ BOMB_EXPLOSIVE_TYPE_BOMB,
+ /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG
+} BombExplosiveType;
+
typedef struct EnBom {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider1;
diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
index ae45b0cc5..19f2e1d9b 100644
--- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
+++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
@@ -93,8 +93,8 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) {
return;
}
- this->unk_29A = ENBOMBOWLMAN_GET_FF00(&this->actor);
- this->path = SubS_GetPathByIndex(play, this->unk_29A, 0x3F);
+ this->pathIndex = ENBOMBOWLMAN_GET_PATH_INDEX(&this->actor);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENBOMBOWLMAN_PATH_INDEX_NONE);
this->unk_2C8 = 80.0f;
if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) &&
@@ -156,7 +156,7 @@ void func_809C4B50(EnBomBowlMan* this) {
}
void func_809C4B6C(EnBomBowlMan* this) {
- if ((this->unk_29A != ENBOMBOWLMAN_FF00_MINUS1) && (this->path != NULL)) {
+ if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) {
if (!SubS_CopyPointFromPath(this->path, this->unk_298, &this->unk_2A0)) {
Actor_Kill(&this->actor);
}
@@ -309,9 +309,9 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
break;
case 5:
- func_80151BB4(play, 0x24);
- func_80151BB4(play, 0x25);
- func_80151BB4(play, 0);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS);
this->actionFunc = func_809C51B4;
sp28 = true;
break;
@@ -330,7 +330,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
void func_809C51B4(EnBomBowlMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((play->msgCtx.unk120B1 == 0) &&
+ if ((play->msgCtx.bombersNotebookEventQueueCount == 0) &&
((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
play->nextEntrance = Entrance_CreateFromSpawn(6);
gSaveContext.nextCutsceneIndex = 0;
@@ -432,9 +432,9 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) {
} else if (this->actor.textId == 0x735) {
this->unk_2C2 = 0;
func_809C493C(this, 17, 1.0f);
- func_80151BB4(play, 0x24);
- func_80151BB4(play, 0x25);
- func_80151BB4(play, 0);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS);
func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = func_809C5738;
return;
@@ -448,7 +448,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) {
s16 yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2A0);
if (this->unk_2C2 == 0) {
- if ((play->msgCtx.unk120B1 == 0) &&
+ if ((play->msgCtx.bombersNotebookEventQueueCount == 0) &&
((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
this->unk_2C2 = 1;
func_809C4B6C(this);
@@ -678,8 +678,8 @@ void EnBomBowlMan_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_809C6214[this->unk_2F0]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_809C6220[this->unk_2F4]));
diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h
index e958b84a1..df515ef4f 100644
--- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h
+++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h
@@ -9,13 +9,13 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*);
#define ENBOMBOWLMAN_GET_F(thisx) ((thisx)->params & 0xF)
#define ENBOMBOWLMAN_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
-#define ENBOMBOWLMAN_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
+#define ENBOMBOWLMAN_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
+
+#define ENBOMBOWLMAN_PATH_INDEX_NONE 0x3F
#define ENBOMBOWLMAN_F0_0 0
#define ENBOMBOWLMAN_F0_2 2
-#define ENBOMBOWLMAN_FF00_MINUS1 -1
-
typedef struct EnBomBowlMan {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
@@ -30,7 +30,7 @@ typedef struct EnBomBowlMan {
/* 0x292 */ UNK_TYPE1 unk292[2];
/* 0x294 */ Path* path;
/* 0x298 */ s16 unk_298;
- /* 0x29A */ s16 unk_29A;
+ /* 0x29A */ s16 pathIndex;
/* 0x29C */ s16 unk_29C;
/* 0x29E */ s16 unk_29E;
/* 0x2A0 */ Vec3f unk_2A0;
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
index a2246b442..ee00081db 100644
--- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
+++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
@@ -120,7 +120,7 @@ s32 EnBomChu_UpdateFloorPoly(EnBomChu* this, CollisionPoly* floorPoly, PlayState
return false;
}
- angle = func_80086C48(normDotUp);
+ angle = Math_FAcosF(normDotUp);
if (angle < 0.001f) {
return false;
}
@@ -326,7 +326,7 @@ void EnBomChu_Explode(EnBomChu* this, PlayState* play) {
s32 i;
bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
- this->actor.world.pos.z, 0, 0, 0, 0);
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
this->shouldTimerCountDown = true;
this->isMoving = false;
@@ -542,7 +542,7 @@ void EnBomChu_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
if (this->timer >= 40) {
diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
index b67ca6820..ef30692e6 100644
--- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
+++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
@@ -249,15 +249,15 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) {
if (sPtr->isEnabled != 0) {
Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW);
Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(&gSun1Tex));
diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
index 64f900f32..55f7ff281 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
@@ -236,8 +236,8 @@ void func_80C03AF4(EnBombers* this, PlayState* play) {
if (this->unk_2A8 == 0) {
Math_Vec3f_Copy(&sp60, &this->actor.home.pos);
- sp60.x += randPlusMinusPoint5Scaled(150.0f);
- sp60.z += randPlusMinusPoint5Scaled(150.0f);
+ sp60.x += Rand_CenteredFloat(150.0f);
+ sp60.z += Rand_CenteredFloat(150.0f);
abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp60)));
if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp60, &sp6C,
@@ -519,8 +519,8 @@ void EnBombers_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C0482C[this->unk_2B8]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C04838[this->unk_2BE]));
diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
index 85c5ecdb3..1585613ce 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
@@ -10,13 +10,13 @@ typedef void (*EnBombersActionFunc)(struct EnBombers*, PlayState*);
#define ENBOMBERS_GET_F(thisx) ((thisx)->params & 0xF)
#define ENBOMBERS_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
-enum {
+typedef enum {
/* 0 */ ENBOMBERS_F_0,
/* 1 */ ENBOMBERS_F_1,
/* 2 */ ENBOMBERS_F_2,
/* 3 */ ENBOMBERS_F_3,
- /* 4 */ ENBOMBERS_F_4,
-};
+ /* 4 */ ENBOMBERS_F_4
+} EnBombersParam;
#define ENBOMBERS_F0_0 0
diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c
index b47a9630f..81e8723e0 100644
--- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c
+++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c
@@ -425,12 +425,12 @@ s32 func_80C056D4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
}
void EnBombers2_Draw(Actor* thisx, PlayState* play) {
-
EnBombers2* this = THIS;
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C05920));
gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sSetPrimColorDlPtr));
diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
index 2493d819b..cc9ac1e2c 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -473,7 +473,7 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (ENBOMBF_GET(&this->actor) <= ENBOMBF_0) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (ENBOMBF_GET(&this->actor) != ENBOMBF_0) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
index aad6d9bc3..229a1e695 100644
--- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
+++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
@@ -39,7 +39,7 @@ void func_80C00168(EnBomjima* this, PlayState* play);
void func_80C00234(EnBomjima* this);
void func_80C00284(EnBomjima* this, PlayState* play);
-typedef enum EN_BOMJIMA_ACTION {
+typedef enum EnBomjimaAction {
/* 0 */ EN_BOMJIMA_ACTION_0,
/* 1 */ EN_BOMJIMA_ACTION_1,
/* 2 */ EN_BOMJIMA_ACTION_2,
@@ -47,8 +47,8 @@ typedef enum EN_BOMJIMA_ACTION {
/* 4 */ EN_BOMJIMA_ACTION_4,
/* 5 */ EN_BOMJIMA_ACTION_5,
/* 6 */ EN_BOMJIMA_ACTION_6,
- /* 7 */ EN_BOMJIMA_ACTION_7,
-} EN_BOMJIMA_ACTION;
+ /* 7 */ EN_BOMJIMA_ACTION_7
+} EnBomjimaAction;
static s32 D_80C009F0 = 0;
static s32 D_80C009F4 = 0;
@@ -266,8 +266,8 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) {
if (this->unk_2C0 == 0) {
Math_Vec3f_Copy(&sp54, &this->actor.home.pos);
- sp54.x += randPlusMinusPoint5Scaled(150.0f);
- sp54.z += randPlusMinusPoint5Scaled(150.0f);
+ sp54.x += Rand_CenteredFloat(150.0f);
+ sp54.z += Rand_CenteredFloat(150.0f);
abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp54)));
if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp54, &sp6C,
@@ -422,7 +422,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
}
sp40.x = (Math_SinS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.x;
- sp40.y = this->bombal->actor.world.pos.y - randPlusMinusPoint5Scaled(40.0f);
+ sp40.y = this->bombal->actor.world.pos.y - Rand_CenteredFloat(40.0f);
sp40.z = (Math_CosS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.z;
SoundSource_PlaySfxAtFixedWorldPos(play, &sp40, 50, NA_SE_EV_BOMBERS_SHOT_EXPLOSUIN);
@@ -433,8 +433,8 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
func_80BFE494(this, 5, 1.0f);
this->unk_29A = 0;
Math_Vec3f_Copy(&this->unk_2A4, &this->actor.home.pos);
- this->unk_2A4.x += randPlusMinusPoint5Scaled(150.0f);
- this->unk_2A4.z += randPlusMinusPoint5Scaled(150.0f);
+ this->unk_2A4.x += Rand_CenteredFloat(150.0f);
+ this->unk_2A4.z += Rand_CenteredFloat(150.0f);
this->unk_2A2++;
}
}
@@ -1098,8 +1098,8 @@ void EnBomjima_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C00B3C[this->unk_2E0]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C00B48[this->unk_2E4]));
diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
index 7cc78d9cf..fbdcb860f 100644
--- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
+++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
@@ -275,8 +275,8 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) {
case 0:
if (this->unk_2AE == 0) {
Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
- sp48.x += randPlusMinusPoint5Scaled(150.0f);
- sp48.z += randPlusMinusPoint5Scaled(150.0f);
+ sp48.x += Rand_CenteredFloat(150.0f);
+ sp48.z += Rand_CenteredFloat(150.0f);
abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp48)));
if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp48, &sp60,
@@ -912,8 +912,8 @@ void EnBomjimb_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C03274[this->unk_2C2]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C03280[this->unk_2C8]));
diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h
index f411f21a2..a784e335d 100644
--- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h
+++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h
@@ -11,19 +11,19 @@ typedef void (*EnBomjimbActionFunc)(struct EnBomjimb*, PlayState*);
#define ENBOMJIMB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
#define ENBOMJIMB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
-enum {
+typedef enum {
/* 0 */ ENBOMJIMB_F_0,
/* 1 */ ENBOMJIMB_F_1,
/* 2 */ ENBOMJIMB_F_2,
/* 3 */ ENBOMJIMB_F_3,
- /* 4 */ ENBOMJIMB_F_4,
-};
+ /* 4 */ ENBOMJIMB_F_4
+} EnBomjimbParamF;
-enum {
+typedef enum {
/* 0 */ ENBOMJIMB_F0_0,
/* 1 */ ENBOMJIMB_F0_1,
- /* 2 */ ENBOMJIMB_F0_2,
-};
+ /* 2 */ ENBOMJIMB_F0_2
+} EnBomjimbParamF0;
typedef struct EnBomjimb {
/* 0x000 */ Actor actor;
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 4abfad7b1..f9b5b3d41 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
@@ -164,7 +164,7 @@ void EnBoom_Destroy(Actor* thisx, PlayState* play) {
}
void func_808A2918(EnBoom* this, PlayState* play) {
- Actor* sp7C;
+ Actor* targetActor;
Player* player = GET_PLAYER(play);
s32 sp74;
s16 sp72;
@@ -175,25 +175,26 @@ void func_808A2918(EnBoom* this, PlayState* play) {
f32 sp64;
f32 distXYZ;
- sp7C = this->player;
+ targetActor = this->moveTo;
- if (sp7C != NULL) {
- sp72 = Actor_WorldYawTowardPoint(&this->actor, &sp7C->focus.pos);
+ if (targetActor != NULL) {
+ sp72 = Actor_WorldYawTowardPoint(&this->actor, &targetActor->focus.pos);
sp70 = this->actor.world.rot.y - sp72;
- sp6E = Actor_WorldPitchTowardPoint(&this->actor, &sp7C->focus.pos);
+ sp6E = Actor_WorldPitchTowardPoint(&this->actor, &targetActor->focus.pos);
sp6C = this->actor.world.rot.x - sp6E;
- sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &sp7C->focus.pos)) * 0.005f;
+ sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &targetActor->focus.pos)) * 0.005f;
if (sp64 < 0.12f) {
sp64 = 0.12f;
}
- if ((&player->actor != sp7C) && ((sp7C->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) {
- this->player = NULL;
+ if ((&player->actor != targetActor) &&
+ ((targetActor->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) {
+ this->moveTo = NULL;
} else {
if (this->unk_1CE != 0) {
this->unk_1CE--;
- this->actor.world.rot.y += (this->actor.params == 0) ? 0x190 : -0x190;
+ this->actor.world.rot.y += (this->actor.params == ZORA_BOOMERANG_LEFT) ? 0x190 : -0x190;
} else {
if (this->unk_1CF > 0) {
this->unk_1CF--;
@@ -202,7 +203,7 @@ void func_808A2918(EnBoom* this, PlayState* play) {
}
Math_ScaledStepToS(&this->actor.world.rot.y, sp72,
- (this->unk_1CF > 0) ? 1000 : (s16)(((sp70 < 0) ? -sp70 : sp70) * sp64));
+ (this->unk_1CF > 0) ? 1000 : (s16)(ABS_ALT(sp70) * sp64));
}
Math_ScaledStepToS(&this->actor.world.rot.x, sp6E, ABS_ALT(sp6C) * sp64);
@@ -242,7 +243,7 @@ void func_808A2918(EnBoom* this, PlayState* play) {
if (sp74 != 0) {
this->actor.world.rot.x = -this->actor.world.rot.x;
this->actor.world.rot.y += 0x8000;
- this->player = &player->actor;
+ this->moveTo = &player->actor;
this->unk_1CC = 0;
}
}
@@ -250,34 +251,34 @@ void func_808A2918(EnBoom* this, PlayState* play) {
if (this->unk_1CC <= 16) {
distXYZ = Math_Vec3f_DistXYZ(&this->actor.world.pos, &player->actor.focus.pos);
- if (&player->actor != this->player) {
- if (this->player == 0) {
+ if (&player->actor != this->moveTo) {
+ if (this->moveTo == 0) {
this->unk_1CE = 8;
}
- this->player = &player->actor;
+ this->moveTo = &player->actor;
}
if (distXYZ < 40.0f) {
- sp7C = this->unk_1C8;
- if (sp7C != NULL) {
- Math_Vec3f_Copy(&sp7C->world.pos, &player->actor.world.pos);
- if (sp7C->id == ACTOR_EN_ITEM00) {
- sp7C->gravity = -0.9f;
- sp7C->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH);
+ targetActor = this->unk_1C8;
+ if (targetActor != NULL) {
+ Math_Vec3f_Copy(&targetActor->world.pos, &player->actor.world.pos);
+ if (targetActor->id == ACTOR_EN_ITEM00) {
+ targetActor->gravity = -0.9f;
+ targetActor->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH);
} else {
- sp7C->flags &= ~ACTOR_FLAG_2000;
+ targetActor->flags &= ~ACTOR_FLAG_2000;
}
}
Actor_Kill(&this->actor);
}
}
- sp7C = this->unk_1C8;
- if (sp7C != NULL) {
- if (sp7C->update == NULL) {
+ targetActor = this->unk_1C8;
+ if (targetActor != NULL) {
+ if (targetActor->update == NULL) {
this->unk_1C8 = NULL;
} else {
- Math_Vec3f_Copy(&sp7C->world.pos, &this->actor.world.pos);
+ Math_Vec3f_Copy(&targetActor->world.pos, &this->actor.world.pos);
}
}
}
@@ -298,7 +299,7 @@ void EnBoom_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, 0.0f);
}
- if (this->actor.params != 0) {
+ if (this->actor.params != ZORA_BOOMERANG_LEFT) {
this->unk_1CD--;
} else {
this->unk_1CD++;
@@ -310,7 +311,7 @@ typedef struct {
/* 0x00 */ Gfx* unk_00;
/* 0x04 */ Vec3f unk_04;
/* 0x10 */ Vec3f unk_10;
-} EnBoomStruct;
+} EnBoomStruct; // size = 0x1C
EnBoomStruct D_808A3078[] = {
{ gameplay_keep_DL_06FE20, { -960.0f, 0.0f, 0.0f }, { 960.0f, 0.0f, 0.0f } },
@@ -326,7 +327,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_APPLY);
- Matrix_RotateZS((this->actor.params != 0) ? 0x1F40 : -0x1F40, MTXMODE_APPLY);
+ Matrix_RotateZS((this->actor.params != ZORA_BOOMERANG_LEFT) ? 0x1F40 : -0x1F40, MTXMODE_APPLY);
Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY);
Matrix_MultVec3f(&sp58->unk_04, &sp4C);
Matrix_MultVec3f(&sp58->unk_10, &sp40);
@@ -335,7 +336,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) {
EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &sp4C, &sp40);
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_RotateYS(this->unk_1CD * 0x2EE0, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
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 e5e3fa2b3..7bae2b150 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.h
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.h
@@ -3,6 +3,11 @@
#include "global.h"
+typedef enum {
+ /* 0 */ ZORA_BOOMERANG_LEFT,
+ /* 1 */ ZORA_BOOMERANG_RIGHT
+} EnBoomType;
+
struct EnBoom;
typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*);
@@ -10,7 +15,7 @@ typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*);
typedef struct EnBoom {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderQuad collider;
- /* 0x1C4 */ Actor* player;
+ /* 0x1C4 */ Actor* moveTo;
/* 0x1C8 */ Actor* unk_1C8;
/* 0x1CC */ u8 unk_1CC;
/* 0x1CD */ u8 unk_1CD;
diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c
index 302547c26..044f54334 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -73,7 +73,7 @@ static InitChainEntry sInitChain[] = {
};
typedef struct {
- f32 data[5];
+ /* 0x0 */ f32 data[5];
} EnBox_PlaybackSpeed; // 0x14
static EnBox_PlaybackSpeed sPlaybackSpeed = { { 1.5f, 1.0f, 1.5f, 1.0f, 1.5f } };
@@ -122,6 +122,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) {
if (temp_s6 > 0) {
OPEN_DISPS(play->state.gfxCtx);
+
Matrix_Push();
for (i = 0; i < temp_s6; i++) {
f32 temp_f0 = (f32)i / temp_s6;
@@ -143,13 +144,14 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) {
Matrix_Scale(temp_f26, temp_f26, temp_f26, MTXMODE_APPLY);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
Matrix_Pop();
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -694,6 +696,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
EnBox* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
+
if (this->unk_1F4.unk_10 != NULL) {
this->unk_1F4.unk_10(&this->unk_1F4, play);
}
@@ -704,12 +707,12 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_SetRenderMode1(play->state.gfxCtx));
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL,
EnBox_PostLimbDraw, &this->dyna.actor, POLY_OPA_DISP);
} else if (this->alpha != 0) {
gDPPipeSync(POLY_XLU_DISP++);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
if ((this->type == ENBOX_TYPE_BIG_INVISIBLE) || (this->type == ENBOX_TYPE_SMALL_INVISIBLE)) {
gSPSegment(POLY_XLU_DISP++, 0x08, EnBox_SetRenderMode3(play->state.gfxCtx));
@@ -719,5 +722,6 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL,
EnBox_PostLimbDraw, &this->dyna.actor, POLY_XLU_DISP);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c
index 1c0c2cfc4..92d56eec5 100644
--- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c
+++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c
@@ -405,7 +405,7 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->actionFunc != EnBubble_Disappear) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Math_SmoothStepToF(&this->modelRotSpeed, 16.0f, 0.2f, 1000.0f, 0.0f);
Math_SmoothStepToF(&this->modelEllipticity, 0.08f, 0.2f, 1000.0f, 0.0f);
Matrix_ReplaceRotation(&play->billboardMtxF);
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 05072da72..ce859ad53 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -139,7 +139,7 @@ void func_8091C178(EnButte* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C240(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu2(play->state.gfxCtx);
sp48 = Math_SinS(D_8091D3A0) * 250.0f;
sp48 = CLAMP(sp48, 0, 255);
@@ -416,7 +416,7 @@ void EnButte_Update(Actor* thisx, PlayState* play) {
this->unk_258 += 0x600;
if (ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) {
- if (GET_PLAYER(play)->meleeWeaponState == 0) {
+ if (GET_PLAYER(play)->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) {
if (this->unk_252 > 0) {
this->unk_252--;
}
@@ -446,7 +446,7 @@ void EnButte_Draw(Actor* thisx, PlayState* play) {
EnButte* this = THIS;
if (this->unk_250 != 0) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL);
}
diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
index 21278af9f..8e3e907bb 100644
--- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
+++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
@@ -20,7 +20,7 @@ typedef enum {
/* 0x05 */ CLEAR_TAG_EFFECT_LIGHT_RAYS,
/* 0x06 */ CLEAR_TAG_EFFECT_SHOCKWAVE,
/* 0x07 */ CLEAR_TAG_EFFECT_SPLASH,
- /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE,
+ /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE
} ClearTagEffectType;
void EnClearTag_Init(Actor* thisx, PlayState* play);
@@ -494,8 +494,8 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) {
vel.z = cosf(i * (33.0f / 40.0f)) * i * .5f;
vel.y = Rand_ZeroFloat(8.0f) + 7.0f;
- vel.x += randPlusMinusPoint5Scaled(0.5f);
- vel.z += randPlusMinusPoint5Scaled(0.5f);
+ vel.x += Rand_CenteredFloat(0.5f);
+ vel.z += Rand_CenteredFloat(0.5f);
accel.x = 0.0f;
accel.y = -1.0f;
@@ -807,8 +807,9 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) {
EnClearTagEffect* firstEffect = this->effect;
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
// Draw all Debris effects.
for (i = 0; i < ARRAY_COUNT(this->effect); i++, effect++) {
@@ -981,7 +982,7 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 200);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 200);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sWaterSplashTextures[effect->actionTimer]));
- func_8012C9BC(gfxCtx);
+ Gfx_SetupDL61_Xlu(gfxCtx);
gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BACK);
isMaterialApplied++;
diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c
index 7fc741ebe..8eb9eb839 100644
--- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c
+++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c
@@ -152,7 +152,7 @@ void EnCne01_FinishInit(EnHy* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_1;
this->actor.draw = EnCne01_Draw;
this->waitingOnInit = false;
- if (ENCNE01_GET_PATH(&this->actor) == 0x3F) {
+ if (ENCNE01_GET_PATH_INDEX(&this->actor) == ENCNE01_PATH_INDEX_NONE) {
this->actionFunc = EnCne01_FaceForward;
} else {
this->actionFunc = EnCne01_Walk;
@@ -217,7 +217,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
this->enHy.actor.flags &= ~ACTOR_FLAG_1;
- this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH(&this->enHy.actor), 0x3F);
+ this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH_INDEX(&this->enHy.actor), ENCNE01_PATH_INDEX_NONE);
this->enHy.waitingOnInit = true;
Actor_SetScale(&this->enHy.actor, 0.01f);
this->enHy.actionFunc = EnCne01_FinishInit;
@@ -251,10 +251,12 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == CNE_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
*dList = gCneHeadBrownHairDL;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+
CLOSE_DISPS(play->state.gfxCtx);
}
if (limbIndex == CNE_LIMB_HEAD) {
@@ -289,8 +291,10 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == CNE_LIMB_RIGHT_FOOT) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -310,7 +314,7 @@ void EnCne01_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0));
gSPSegment(POLY_OPA_DISP++, 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0));
diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h
index 253025760..feee462a9 100644
--- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h
+++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h
@@ -7,7 +7,9 @@ struct EnCne01;
typedef void (*EnCne01ActionFunc)(struct EnCne01*, PlayState*);
-#define ENCNE01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
+#define ENCNE01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9)
+
+#define ENCNE01_PATH_INDEX_NONE 0x3F
typedef struct EnCne01 {
/* 0x000 */ EnHy enHy;
diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c
index 6f7d32de1..fa6349871 100644
--- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c
+++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c
@@ -163,7 +163,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) {
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) {
if (!this->hasSetRandomValues) {
- this->actor.world.rot.y = randPlusMinusPoint5Scaled(30000.0f);
+ this->actor.world.rot.y = Rand_CenteredFloat(30000.0f);
this->actor.speed = 2.0f + BREG(56) + Rand_ZeroFloat(2.0f);
this->actor.velocity.y = 12.0f + BREG(57) + Rand_ZeroFloat(5.0f);
this->hasSetRandomValues = true;
@@ -172,9 +172,9 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) {
}
for (i = 0; i < 2; i++) {
- velocity.x = randPlusMinusPoint5Scaled(2.0f);
+ velocity.x = Rand_CenteredFloat(2.0f);
velocity.y = Rand_ZeroFloat(2.0f) + 1.0f;
- velocity.z = randPlusMinusPoint5Scaled(2.0f);
+ velocity.z = Rand_CenteredFloat(2.0f);
accel.y = -0.1f;
accel.z = 0.0f;
accel.x = 0.0f;
@@ -203,7 +203,8 @@ void func_80AFE25C(EnColMan* this, PlayState* play) {
CLEAR_TAG_SMALL_EXPLOSION);
} else {
EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0);
+ this->actor.world.pos.y, this->actor.world.pos.z,
+ BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
@@ -233,45 +234,56 @@ void func_80AFE414(Actor* thisx, PlayState* play) {
EnColMan* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gHeartPieceInteriorDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80AFE4AC(Actor* thisx, PlayState* play) {
EnColMan* this = THIS;
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
+
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gItemDropDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80AFE584(Actor* thisx, PlayState* play) {
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
+
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80AFE650(Actor* thisx, PlayState* play) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
+
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropBombTex));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gItemDropDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h
index 977bf2473..c002dc5e3 100644
--- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h
+++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h
@@ -21,7 +21,7 @@ typedef enum {
/* 1 */ EN_COL_MAN_RECOVERY_HEART,
/* 2 */ EN_COL_MAN_FALLING_ROCK,
/* 3 */ EN_COL_MAN_CUTSCENE_BOMB,
- /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB,
+ /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB
} EnColManType;
#endif // Z_EN_COL_MAN_H
diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
index beed3fb26..aa74c5007 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
@@ -5,6 +5,7 @@
*/
#include "z_en_cow.h"
+#include "z64horse.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -116,7 +117,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnCow_Idle;
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY != 1) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY != 1) &&
(EN_COW_TYPE(thisx) == EN_COW_TYPE_ABDUCTED)) {
Actor_Kill(&this->actor);
return;
@@ -130,7 +131,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) {
this->animationCycle = 0;
this->actor.targetMode = 6;
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
func_801A5080(4);
break;
case EN_COW_TYPE_TAIL:
@@ -264,13 +265,13 @@ void EnCow_Talk(EnCow* this, PlayState* play) {
void EnCow_Idle(EnCow* this, PlayState* play) {
if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) {
- if (D_801BDAA4 != 0) {
+ if (gHorsePlayedEponasSong) {
if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) {
this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK;
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
} else if ((this->actor.xzDistToPlayer < 150.0f) &&
ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 25000) {
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
this->actionFunc = EnCow_Talk;
this->actor.flags |= ACTOR_FLAG_10000;
func_800B8614(&this->actor, play, 170.0f);
@@ -421,7 +422,7 @@ void EnCow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
void EnCow_Draw(Actor* thisx, PlayState* play) {
EnCow* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnCow_OverrideLimbDraw, EnCow_PostLimbDraw, &this->actor);
}
@@ -429,7 +430,7 @@ void EnCow_Draw(Actor* thisx, PlayState* play) {
void EnCow_DrawTail(Actor* thisx, PlayState* play) {
EnCow* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.h b/src/overlays/actors/ovl_En_Cow/z_en_cow.h
index 3c73b747f..200ec5bec 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h
@@ -10,9 +10,9 @@
#define EN_COW_FLAG_WONT_GIVE_MILK (1 << 2)
typedef enum {
- /* 0 */ EN_COW_TYPE_DEFAULT,
- /* 1 */ EN_COW_TYPE_TAIL,
- /* 2 */ EN_COW_TYPE_ABDUCTED,
+ /* 0 */ EN_COW_TYPE_DEFAULT,
+ /* 1 */ EN_COW_TYPE_TAIL,
+ /* 2 */ EN_COW_TYPE_ABDUCTED
} EnCowType;
struct EnCow;
diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c
index 3238069cc..bad5f5e0f 100644
--- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c
+++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c
@@ -74,7 +74,7 @@ typedef enum {
/* 2 */ GUAY_DMGEFF_FIRE,
/* 3 */ GUAY_DMGEFF_ICE,
/* 4 */ GUAY_DMGEFF_LIGHT,
- /* 5 */ GUAY_DMGEFF_ELECTRIC,
+ /* 5 */ GUAY_DMGEFF_ELECTRIC
} GuayDamageEffect;
static DamageTable sDamageTable = {
@@ -465,8 +465,8 @@ void EnCrow_Respawn(EnCrow* this, PlayState* play) {
}
void EnCrow_UpdateDamage(EnCrow* this, PlayState* play) {
- if (this->collider.base.acFlags & AT_HIT) {
- this->collider.base.acFlags &= ~AT_HIT;
+ if (this->collider.base.acFlags & AC_HIT) {
+ this->collider.base.acFlags &= ~AC_HIT;
Actor_SetDropFlag(&this->actor, &this->collider.elements->info);
if (this->actor.colChkInfo.damageEffect == GUAY_DMGEFF_STUN) {
@@ -529,7 +529,7 @@ void EnCrow_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, height);
- if ((this->actor.colChkInfo.health != 0) && (Animation_OnFrame(&this->skelAnime, 3.0f))) {
+ if ((this->actor.colChkInfo.health != 0) && Animation_OnFrame(&this->skelAnime, 3.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
}
if (this->drawDmgEffAlpha > 0.0f) {
@@ -552,9 +552,9 @@ s32 EnCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (this->actor.colChkInfo.health != 0) {
if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) {
- rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4)));
+ rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4)));
} else if (limbIndex == OBJECT_CROW_LIMB_TAIL) {
- rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4)));
+ rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4)));
}
}
return false;
@@ -574,7 +574,7 @@ void EnCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
void EnCrow_Draw(Actor* thisx, PlayState* play) {
EnCrow* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnCrow_OverrideLimbDraw, EnCrow_PostLimbDraw, &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos),
diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c
index 7b3f97ded..25013327a 100644
--- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c
+++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c
@@ -62,7 +62,7 @@ void func_80B3E168(EnDaiEffect* effect, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < EN_DAI_EFFECT_COUNT; i++, effect++) {
if (effect->isEnabled == true) {
@@ -649,7 +649,7 @@ void func_80B3F78C(EnDai* this, PlayState* play) {
this->unk_1CE &= ~0x40;
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -683,7 +683,7 @@ void func_80B3F920(EnDai* this, PlayState* play) {
this->unk_1CE |= 0x40;
if (this->unk_1CD == 0xFF) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -701,7 +701,7 @@ void func_80B3F920(EnDai* this, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
index b988155c7..2c232f096 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
@@ -76,14 +76,14 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 0;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->unk_278 = ENDAIKU_GET_FF(&this->actor);
- if (this->unk_278 == ENDAIKU_PARAMS_FF_3) {
- this->unk_288 = ENDAIKU_GET_FF00(&this->actor);
- this->unk_258 = SubS_GetPathByIndex(play, this->unk_288, 0x3F);
- } else if (this->unk_278 == ENDAIKU_PARAMS_FF_2) {
+ if (this->unk_278 == ENDAIKU_PARAM_FF_3) {
+ this->pathIndex = ENDAIKU_GET_PATH_INDEX(&this->actor);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU_PATH_INDEX_NONE);
+ } else if (this->unk_278 == ENDAIKU_PARAM_FF_2) {
this->unk_264 = -2000;
}
- if (this->unk_278 == ENDAIKU_PARAMS_FF_0) {
+ if (this->unk_278 == ENDAIKU_PARAM_FF_0) {
this->collider.dim.radius = 30;
this->collider.dim.height = 60;
this->collider.dim.yShift = 0;
@@ -100,20 +100,20 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = -3.0f;
switch (this->unk_278) {
- case ENDAIKU_PARAMS_FF_0:
+ case ENDAIKU_PARAM_FF_0:
this->unk_27E = this->unk_278 * 4 + 4;
- case ENDAIKU_PARAMS_FF_1:
+ case ENDAIKU_PARAM_FF_1:
SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0,
this->jointTable, this->morphTable, 17);
break;
- case ENDAIKU_PARAMS_FF_2:
+ case ENDAIKU_PARAM_FF_2:
SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_00B690,
this->jointTable, this->morphTable, 17);
break;
- case ENDAIKU_PARAMS_FF_3:
+ case ENDAIKU_PARAM_FF_3:
SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_001114,
this->jointTable, this->morphTable, 17);
break;
@@ -134,8 +134,8 @@ void func_8094373C(EnDaiku* this, s32 arg1) {
}
void func_809437C8(EnDaiku* this) {
- if ((this->unk_288 != -1) && (this->unk_258 != 0)) {
- if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_26C)) {
+ if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) {
+ if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_26C)) {
Actor_Kill(&this->actor);
}
}
@@ -173,7 +173,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) {
s32 pad2;
if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) {
- if (this->unk_278 == ENDAIKU_PARAMS_FF_1) {
+ if (this->unk_278 == ENDAIKU_PARAM_FF_1) {
this->actor.textId = 0x2365;
} else {
this->actor.textId = 0x2366;
@@ -188,7 +188,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) {
return;
}
- if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) {
+ if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) {
if (Rand_ZeroOne() < 0.5f) {
func_8094373C(this, 7);
} else {
@@ -196,8 +196,9 @@ void func_809438F8(EnDaiku* this, PlayState* play) {
}
}
- if (this->unk_278 == ENDAIKU_PARAMS_FF_3) {
- f32 sq, abs;
+ if (this->unk_278 == ENDAIKU_PARAM_FF_3) {
+ f32 xzDist;
+ f32 yawDiff;
Math_ApproachF(&this->actor.world.pos.x, this->unk_26C.x, 0.5f,
fabsf(2.0f * Math_SinS(this->actor.world.rot.y)));
@@ -205,11 +206,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) {
fabsf(2.0f * Math_CosS(this->actor.world.rot.y)));
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_282, 1, 0x7D0, 0xA);
- sq = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z));
- abs = fabsf(this->actor.world.rot.y - this->unk_282);
- if ((sq < SQ(2.0f)) && (this->unk_258 != NULL) && (abs < 10.0f)) {
+ xzDist = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z));
+ yawDiff = fabsf(this->actor.world.rot.y - this->unk_282);
+ if ((xzDist < 4.0f) && (this->path != NULL) && (yawDiff < 10.0f)) {
this->unk_25C++;
- if (this->unk_25C >= this->unk_258->count) {
+ if (this->unk_25C >= this->path->count) {
this->unk_25C = 0;
}
@@ -218,10 +219,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) {
}
}
- if (this->unk_278 != ENDAIKU_PARAMS_FF_0) {
+ if (this->unk_278 != ENDAIKU_PARAM_FF_0) {
s16 angle = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y));
+
this->unk_280 = this->actor.yawTowardsPlayer;
- if ((this->unk_278 == ENDAIKU_PARAMS_FF_1) || (this->unk_278 == ENDAIKU_PARAMS_FF_2) || (angle <= 0x2890)) {
+ if ((this->unk_278 == ENDAIKU_PARAM_FF_1) || (this->unk_278 == ENDAIKU_PARAM_FF_2) || (angle <= 0x2890)) {
func_800B8614(&this->actor, play, 100.0f);
}
}
@@ -235,7 +237,7 @@ void func_80943BC0(EnDaiku* this) {
void func_80943BDC(EnDaiku* this, PlayState* play) {
f32 currentFrame = this->skelAnime.curFrame;
- if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) {
+ if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) {
if (Rand_ZeroOne() < 0.5f) {
func_8094373C(this, 7);
} else {
@@ -257,7 +259,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
}
- if ((this->unk_278 == ENDAIKU_PARAMS_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) {
+ if ((this->unk_278 == ENDAIKU_PARAM_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) {
Actor_Kill(&this->actor);
return;
}
@@ -312,7 +314,7 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
gSPDisplayList(POLY_OPA_DISP++, D_809440D4[this->unk_278]);
}
- if ((this->unk_278 == ENDAIKU_PARAMS_FF_3) && (limbIndex == 8)) {
+ if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == 8)) {
gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_008EC8);
}
@@ -324,7 +326,7 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
switch (this->unk_278) {
case 0:
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
index 4a3c9b444..ff88c8c9a 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
@@ -8,14 +8,16 @@ struct EnDaiku;
typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*);
#define ENDAIKU_GET_FF(thisx) ((thisx)->params & 0xFF)
-#define ENDAIKU_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
+#define ENDAIKU_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
-enum {
- /* 0x0 */ ENDAIKU_PARAMS_FF_0,
- /* 0x1 */ ENDAIKU_PARAMS_FF_1,
- /* 0x2 */ ENDAIKU_PARAMS_FF_2,
- /* 0x3 */ ENDAIKU_PARAMS_FF_3,
-};
+#define ENDAIKU_PATH_INDEX_NONE 0x3F
+
+typedef enum {
+ /* 0 */ ENDAIKU_PARAM_FF_0,
+ /* 1 */ ENDAIKU_PARAM_FF_1,
+ /* 2 */ ENDAIKU_PARAM_FF_2,
+ /* 3 */ ENDAIKU_PARAM_FF_3
+} EnDaikuParam;
typedef struct EnDaiku {
/* 0x000 */ Actor actor;
@@ -23,7 +25,7 @@ typedef struct EnDaiku {
/* 0x188 */ Vec3s jointTable[17];
/* 0x1EE */ Vec3s morphTable[17];
/* 0x254 */ EnDaikuActionFunc actionFunc;
- /* 0x258 */ Path* unk_258;
+ /* 0x258 */ Path* path;
/* 0x25C */ s16 unk_25C;
/* 0x25E */ s16 unk_25E;
/* 0x260 */ s16 unk_260;
@@ -38,7 +40,7 @@ typedef struct EnDaiku {
/* 0x280 */ s16 unk_280;
/* 0x282 */ s16 unk_282;
/* 0x284 */ f32 unk_284;
- /* 0x288 */ s16 unk_288;
+ /* 0x288 */ s16 pathIndex;
/* 0x28A */ s16 unk_28A;
/* 0x28C */ s16 unk_28C;
/* 0x28E */ UNK_TYPE1 unk_28E[0xE];
diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
index d8a8a78e8..311b6d216 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
@@ -69,8 +69,8 @@ static ColliderCylinderInit sCylinderInit = {
};
void func_80BE61D0(EnDaiku2* this) {
- if ((this->unk_27A != -1) && (this->unk_258 != 0)) {
- if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_268)) {
+ if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) {
+ if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_268)) {
Actor_Kill(&this->actor);
}
}
@@ -87,8 +87,8 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 0;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->unk_278 = ENDAIKU2_GET_7F(&this->actor);
- this->unk_27A = ENDAIKU2_GET_1F80(&this->actor);
- this->unk_258 = SubS_GetPathByIndex(play, this->unk_27A, 0x3F);
+ this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU2_PATH_INDEX_NONE);
this->unk_280 = ENDAIKU2_GET_8000(&this->actor);
Actor_SetScale(&this->actor, 0.01f);
if (!this->unk_280) {
@@ -100,7 +100,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
if (this->unk_278 == ENDAIKU2_GET_7F_127) {
this->unk_278 = ENDAIKU2_GET_7F_MINUS1;
} else if (Flags_GetSwitch(play, this->unk_278)) {
- this->unk_25C = this->unk_258->count - 1;
+ this->unk_25C = this->path->count - 1;
func_80BE61D0(this);
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268);
}
@@ -243,9 +243,9 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
sp70.y += 40.0f;
sp70.z += Math_CosS(this->actor.world.rot.y) * 70.0f;
- sp70.x += randPlusMinusPoint5Scaled(5.0f);
- sp70.y += randPlusMinusPoint5Scaled(5.0f);
- sp70.z += randPlusMinusPoint5Scaled(5.0f);
+ sp70.x += Rand_CenteredFloat(5.0f);
+ sp70.y += Rand_CenteredFloat(5.0f);
+ sp70.z += Rand_CenteredFloat(5.0f);
sp88.y = -1.0f;
@@ -342,9 +342,9 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.z, this->unk_268.z, 0.5f, fabsf(Math_CosS(this->actor.world.rot.y) * 6.0f));
if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) < 4.0f) &&
- (this->unk_258 != 0)) {
+ (this->path != NULL)) {
this->unk_25C++;
- if (this->unk_25C >= this->unk_258->count) {
+ if (this->unk_25C >= this->path->count) {
func_80BE6EB0(this);
return;
}
@@ -385,7 +385,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
fabsf(Math_CosS(this->actor.world.rot.y) * 4.0f));
if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) <
4.0f) &&
- (this->unk_258 != 0)) {
+ (this->path != NULL)) {
if (!func_80BE64C0(this, play)) {
if (this->unk_276 != 3) {
func_80BE6408(this, 3);
@@ -412,7 +412,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
Math_Vec3f_Copy(&sp40, &this->unk_268);
var = this->unk_25C;
this->unk_25C++;
- if (this->unk_25C < this->unk_258->count) {
+ if (this->unk_25C < this->path->count) {
func_80BE61D0(this);
func_80BE6CFC(this);
return;
@@ -466,7 +466,7 @@ void EnDaiku2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (limbIndex == 14) {
Matrix_Scale(this->unk_260, this->unk_260, this->unk_260, MTXMODE_APPLY);
@@ -486,7 +486,7 @@ void EnDaiku2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
EnDaiku2_PostLimbDraw, &this->actor);
@@ -507,9 +507,9 @@ void func_80BE7504(EnDaiku2* this, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, f32 ar
effect->unk_1C = *arg3;
effect->unk_30 = arg4;
effect->unk_34 = arg5;
- effect->unk_28.x = randPlusMinusPoint5Scaled(30000.0f);
- effect->unk_28.y = randPlusMinusPoint5Scaled(30000.0f);
- effect->unk_28.z = randPlusMinusPoint5Scaled(30000.0f);
+ effect->unk_28.x = Rand_CenteredFloat(30000.0f);
+ effect->unk_28.y = Rand_CenteredFloat(30000.0f);
+ effect->unk_28.z = Rand_CenteredFloat(30000.0f);
break;
}
}
@@ -544,7 +544,7 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA);
if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) {
diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
index 130a06a23..58fc26b9a 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
@@ -8,14 +8,16 @@ struct EnDaiku2;
typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*);
#define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F)
-#define ENDAIKU2_GET_1F80(thisx) (((thisx)->params >> 7) & 0x3F)
+#define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F)
#define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1)
-enum {
+#define ENDAIKU2_PATH_INDEX_NONE 0x3F
+
+typedef enum {
/* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1,
/* 0 */ ENDAIKU2_GET_7F_0,
- /* 127 */ ENDAIKU2_GET_7F_127 = 127,
-};
+ /* 127 */ ENDAIKU2_GET_7F_127 = 127
+} EnDaiku2Param;
typedef struct EnDaiku2Effect {
/* 0x00 */ u8 isEnabled;
@@ -35,7 +37,7 @@ typedef struct EnDaiku2 {
/* 0x188 */ Vec3s jointTable[17];
/* 0x1EE */ Vec3s morphTable[17];
/* 0x254 */ EnDaiku2ActionFunc actionFunc;
- /* 0x258 */ Path* unk_258;
+ /* 0x258 */ Path* path;
/* 0x25C */ s16 unk_25C;
/* 0x260 */ f32 unk_260;
/* 0x264 */ f32 unk_264;
@@ -43,7 +45,7 @@ typedef struct EnDaiku2 {
/* 0x274 */ s16 unk_274;
/* 0x276 */ s16 unk_276;
/* 0x278 */ s16 unk_278;
- /* 0x27A */ s16 unk_27A;
+ /* 0x27A */ s16 pathIndex;
/* 0x27C */ UNK_TYPE1 unk_27C[0x4];
/* 0x280 */ s32 unk_280;
/* 0x284 */ f32 unk_284;
diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
index e969abffa..422b35e87 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -384,7 +384,7 @@ void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) {
this->size * 0.01f * (0.5f + (15 - this->timer) * 0.5f / 15.0f);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1800, 0x800);
- headDistVertical = sin_rad(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f;
+ headDistVertical = Math_SinF(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f;
if (this->actor.shape.rot.x < -0x38E3) {
headDistHorizontal = 0.0f;
@@ -468,7 +468,7 @@ void EnDekubaba_Retract(EnDekubaba* this, PlayState* play) {
this->size * 0.01f * (0.5f + this->timer * (1.0f / 30));
Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0x300);
- headDistVertical = (sin_rad(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f;
+ headDistVertical = (Math_SinF(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f;
if (this->actor.shape.rot.x < -0x38E3) {
headDistHorizontal = 0.0f;
@@ -1319,7 +1319,7 @@ void EnDekubaba_DrawShadow(EnDekubaba* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255);
@@ -1347,7 +1347,7 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Math_Vec3f_Copy(&this->bodyPartsPos[0], &this->actor.world.pos);
if (this->actionFunc != EnDekubaba_DeadStickDrop) {
diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
index 2496a4cc2..cef97a8b0 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
@@ -667,7 +667,9 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) {
s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnDekunuts* this = THIS;
- f32 arg1, arg2, arg3;
+ f32 arg1;
+ f32 arg2;
+ f32 arg3;
f32 currentFrame;
if (this->actionFunc == func_808BDA4C) {
diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
index 59b6677a0..248f758ac 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
@@ -10,12 +10,12 @@ typedef void (*EnDekunutsActionFunc)(struct EnDekunuts*, PlayState*);
#define ENDEKUNUTS_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
-enum {
+typedef enum {
/* 0x00 */ ENDEKUNUTS_GET_FF00_0,
/* 0x01 */ ENDEKUNUTS_GET_FF00_1,
/* 0x02 */ ENDEKUNUTS_GET_FF00_2,
/* 0xFF */ ENDEKUNUTS_GET_FF00_FF = 0xFF
-};
+} EnDekunutsParam;
typedef struct EnDekunuts {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c
index 986953d0f..faacd7510 100644
--- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c
+++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c
@@ -23,11 +23,11 @@ void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play);
s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
typedef enum {
- /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP,
- /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR,
- /* 2 */ DEMOHEISHI_ANIM_WAVE,
- /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH,
- /* 4 */ DEMOHEISHI_ANIM_STAND_UP
+ /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP,
+ /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR,
+ /* 2 */ DEMOHEISHI_ANIM_WAVE,
+ /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH,
+ /* 4 */ DEMOHEISHI_ANIM_STAND_UP
} EnDemoheishiAnimation;
ActorInit En_Demo_heishi_InitVars = {
@@ -188,7 +188,7 @@ s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
void EnDemoheishi_Draw(Actor* thisx, PlayState* play) {
EnDemoheishi* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnDemoheishi_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c
index 8a6ae63e8..46c6de979 100644
--- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c
+++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c
@@ -62,7 +62,7 @@ ActorInit En_Dg_InitVars = {
typedef enum {
/* 0 */ DOG_GRAB_STATE_NONE,
/* 1 */ DOG_GRAB_STATE_HELD,
- /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW,
+ /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW
} DogGrabState;
typedef enum {
@@ -74,7 +74,7 @@ typedef enum {
/* 5 */ DOG_BEHAVIOR_ZORA_WAIT,
/* 6 */ DOG_BEHAVIOR_DEKU,
/* 7 */ DOG_BEHAVIOR_DEKU_WAIT,
- /* 8 */ DOG_BEHAVIOR_DEFAULT,
+ /* 8 */ DOG_BEHAVIOR_DEFAULT
} DogBehavior;
static u8 sIsAnyDogHeld = false;
@@ -85,10 +85,10 @@ static s16 sBremenMaskFollowerIndex = ENDG_INDEX_NO_BREMEN_MASK_FOLLOWER;
* Stores the state for the dogs milling about at the Doggy Racetrack.
*/
typedef struct {
- s16 color; // The dog's color, which is used as an index into sBaseSpeeds
- s16 index; // The dog's index within sDogInfo
- s16 textId; // The ID of the text to display when the dog is picked up
-} RacetrackDogInfo;
+ /* 0x0 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds
+ /* 0x2 */ s16 index; // The dog's index within sDogInfo
+ /* 0x4 */ s16 textId; // The ID of the text to display when the dog is picked up
+} RacetrackDogInfo; // size = 0x6
/**
* A table of RacetrackDogInfo for every dog at the Doggy Racetrack. Note that the textId values
@@ -280,7 +280,7 @@ s32 EnDg_HasReachedPoint(EnDg* this, Path* path, s32 pointIndex) {
diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
}
- func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
@@ -358,9 +358,9 @@ void EnDg_SpawnFloorDustRing(EnDg* this, PlayState* play) {
Vec3f pos;
if (((this->index + curFrame) % mod) == 0) {
- pos.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x;
+ pos.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x;
pos.y = this->actor.world.pos.y;
- pos.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z;
+ pos.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z;
Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true);
}
}
@@ -900,14 +900,14 @@ void EnDg_JumpAttack(EnDg* this, PlayState* play) {
if (curFrame < 9) {
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = randPlusMinusPoint5Scaled(1.0f) + 3.0f;
+ sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = Rand_CenteredFloat(1.0f) + 3.0f;
}
EnDg_SpawnFloorDustRing(this, play);
} else {
this->dogFlags |= DOG_FLAG_JUMP_ATTACKING;
if (Animation_OnFrame(&this->skelAnime, 9.0f)) {
- f32 rand = randPlusMinusPoint5Scaled(1.5f);
+ f32 rand = Rand_CenteredFloat(1.5f);
sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = 1.2f;
this->actor.velocity.y = 2.0f * rand + 3.0f;
@@ -1302,7 +1302,7 @@ void EnDg_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH_INDEX(&this->actor), ENDG_PATH_INDEX_NONE);
Actor_SetScale(&this->actor, 0.0075f);
this->actor.targetMode = 1;
this->actor.gravity = -3.0f;
@@ -1379,7 +1379,7 @@ void EnDg_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.h b/src/overlays/actors/ovl_En_Dg/z_en_dg.h
index 62c01a011..e36342706 100644
--- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h
+++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h
@@ -11,17 +11,19 @@ typedef enum {
/* 3 */ DOG_COLOR_BEIGE,
/* 4 */ DOG_COLOR_BROWN,
/* 5 */ DOG_COLOR_BLUE,
- /* 6 */ DOG_COLOR_GOLD,
-} DogColors;
+ /* 6 */ DOG_COLOR_GOLD
+} DogColor;
struct EnDg;
typedef void (*EnDgActionFunc)(struct EnDg*, PlayState*);
#define ENDG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5)
-#define ENDG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10)
+#define ENDG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10)
#define ENDG_PARAMS(path, index) ((path << 10) | (index << 5))
+#define ENDG_PATH_INDEX_NONE 0x3F
+
typedef enum {
/* 0 */ ENDG_INDEX_RACETRACK_0,
/* 1 */ ENDG_INDEX_RACETRACK_1,
diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
index 535b0d65f..e24e2691b 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
@@ -438,8 +438,9 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) {
return true;
}
- if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && this->actor.isTargeted &&
- (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) {
+ if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
+ this->actor.isTargeted && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) &&
+ Player_IsFacingActor(&this->actor, 0x2000, play)) {
if (Rand_ZeroOne() < 0.5f) {
func_8089C024(this, 2);
} else {
@@ -1061,7 +1062,7 @@ void func_8089CB10(EnDinofos* this, PlayState* play) {
}
void func_8089CBEC(EnDinofos* this, PlayState* play) {
- s16 temp_s3 = ((s32)randPlusMinusPoint5Scaled(0x1000) + this->actor.shape.rot.y) + this->unk_28E;
+ s16 temp_s3 = ((s32)Rand_CenteredFloat(0x1000) + this->actor.shape.rot.y) + this->unk_28E;
Vec3f sp88;
Vec3f sp7C;
ColliderJntSphElementDim* dim;
@@ -1080,10 +1081,10 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) {
temp_s0 = CLAMP_MIN(temp_s0, 0);
sp88.x = 11.0f * temp_f20;
- sp88.y = randPlusMinusPoint5Scaled(2.0f) + -5.4f;
+ sp88.y = Rand_CenteredFloat(2.0f) + -5.4f;
sp88.z = 11.0f * temp_f22;
sp7C.x = 0.9f * temp_f20;
- sp7C.y = randPlusMinusPoint5Scaled(0.6f) + 1.4f;
+ sp7C.y = Rand_CenteredFloat(0.6f) + 1.4f;
sp7C.z = 0.9f * temp_f22;
func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG);
EffectSsDFire_Spawn(play, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8);
@@ -1097,7 +1098,7 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) {
for (i = 6; i < end; i++) {
dim = &this->colliderJntSph.elements[i].dim;
- temp_s3 = (s32)(cos_rad((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y;
+ temp_s3 = (s32)(Math_CosF((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y;
dim->worldSphere.center.x = (s32)this->limbPos[10].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z);
dim->worldSphere.center.y = (s32)this->limbPos[10].y + (s32)dim->modelSphere.center.y;
@@ -1231,9 +1232,9 @@ void func_8089D42C(EnDinofos* this, PlayState* play) {
if ((this->actionFunc == func_8089B834) && (this->unk_290 != 0)) {
Math_ScaledStepToS(&this->unk_28E, Math_SinS(this->unk_290 * 1400) * 0x2C00, 0x300);
} else if (this->actionFunc == func_8089CA74) {
- Math_ScaledStepToS(&this->unk_28E, cos_rad(M_PI) * 0x2C00, 0x233);
+ Math_ScaledStepToS(&this->unk_28E, Math_CosF(M_PI) * 0x2C00, 0x2C00 / 20);
} else if (this->actionFunc == func_8089CBEC) {
- this->unk_28E = cos_rad(this->unk_290 * (M_PI / 20)) * 0x2C00;
+ this->unk_28E = Math_CosF(this->unk_290 * (M_PI / 20)) * 0x2C00;
} else if (!Play_InCsMode(play)) {
temp_v0_2 = this->unk_28E + this->actor.shape.rot.y;
temp_v0_2 = BINANG_SUB(this->actor.yawTowardsPlayer, temp_v0_2);
@@ -1474,7 +1475,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->unk_288 == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
gSPSegment(POLY_OPA_DISP++, 0x08, D_8089E33C[this->unk_289]);
@@ -1485,7 +1486,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
func_8089DC4C, func_8089DC84, &this->actor, POLY_OPA_DISP);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
gSPSegment(POLY_XLU_DISP++, 0x08, D_8089E33C[this->unk_289]);
diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
index 8edd1b580..c7dbd8888 100644
--- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
+++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
@@ -156,7 +156,7 @@ void func_80A50510(EnDnb* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++) {
Matrix_Push();
@@ -180,7 +180,7 @@ void func_80A5063C(EnDnb* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++) {
Matrix_Push();
@@ -263,37 +263,36 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 256; i++, arg0++) {
- if (arg0->isEnabled == 1) {
- if (!isGfxSetup) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
- gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000);
- gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0);
- isGfxSetup = true;
- }
- Matrix_Push();
-
- //! FAKE:
- if (1) {}
-
- arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f;
-
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24);
-
- Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW);
- Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY);
- Matrix_ReplaceRotation(&play->billboardMtxF);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f;
- gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx]));
- gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020);
-
- Matrix_Pop();
- sp5C += 1;
+ if (arg0->isEnabled != 1) {
+ continue;
}
+
+ if (!isGfxSetup) {
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
+ gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000);
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0);
+ isGfxSetup = true;
+ }
+ Matrix_Push();
+
+ arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f;
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24);
+
+ Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW);
+ Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f;
+ gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx]));
+ gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020);
+
+ Matrix_Pop();
+ sp5C += 1;
}
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
index 7d59ebeec..216ca0031 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
@@ -334,7 +334,7 @@ void func_80A51CB8(EnDnk* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A5245C[this->unk_2A0]));
gDPPipeSync(POLY_OPA_DISP++);
@@ -402,7 +402,7 @@ void func_80A51DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
}
void func_80A51FC0(EnDnk* this, PlayState* play) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, func_80A51D78, func_80A51DA4,
&this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
index f0665f1b5..57467b3f1 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
@@ -10,13 +10,13 @@ typedef void (*EnDnkActionFunc)(struct EnDnk*, PlayState*);
#define ENDNK_GET_3(thisx) ((thisx)->params & 0x3)
#define ENDNK_GET_3C(thisx) ((thisx)->params & 0x3C)
-enum {
- /* 0x0 */ ENDNK_GET_3_0,
- /* 0x1 */ ENDNK_GET_3_1,
- /* 0x2 */ ENDNK_GET_3_2,
- /* 0x3 */ ENDNK_GET_3_3,
- /* 0x4 */ ENDNK_GET_3_4,
-};
+typedef enum {
+ /* 0 */ ENDNK_GET_3_0,
+ /* 1 */ ENDNK_GET_3_1,
+ /* 2 */ ENDNK_GET_3_2,
+ /* 3 */ ENDNK_GET_3_3,
+ /* 4 */ ENDNK_GET_3_4
+} EnDnkParam;
typedef struct EnDnk {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
index a9128b1bd..e80bbe019 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
@@ -63,7 +63,7 @@ typedef enum {
/* 16 */ EN_DNO_ANIM_IMPLORE_START,
/* 17 */ EN_DNO_ANIM_SHOCK_START,
/* 18 */ EN_DNO_ANIM_SHOCK_LOOP,
- /* 19 */ EN_DNO_ANIM_GRIEVE,
+ /* 19 */ EN_DNO_ANIM_GRIEVE
} EnDnoAnimation;
static AnimationSpeedInfo sAnimations[] = {
@@ -943,12 +943,16 @@ void func_80A73408(EnDno* this, PlayState* play) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
- if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) &&
- (this->animIndex == EN_DNO_ANIM_SHOCK_START)) {
- //! FAKE:
- if (1) {}
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ switch (this->animIndex) {
+ case EN_DNO_ANIM_SHOCK_START:
+ SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP,
+ &this->animIndex);
+ break;
- SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, &this->animIndex);
+ default:
+ break;
+ }
}
}
@@ -1032,7 +1036,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (phi_v0 == true) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (limbIndex == 13) {
Matrix_Scale(this->unk_454, this->unk_454, this->unk_454, MTXMODE_APPLY);
Matrix_RotateXS(this->unk_45C, MTXMODE_APPLY);
@@ -1058,7 +1062,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Scale(0.15f, 0.15f, 1.0f, MTXMODE_APPLY);
Matrix_Translate(0.0f, -3200.0f, 0.0f, MTXMODE_APPLY);
- gfxXlu = func_8012C2B4(POLY_XLU_DISP);
+ gfxXlu = Gfx_SetupDL71(POLY_XLU_DISP);
gSPMatrix(gfxXlu, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(&gfxXlu[1], 0x08,
diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.h b/src/overlays/actors/ovl_En_Dno/z_en_dno.h
index f9a55cd4e..b2e7f750f 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h
@@ -13,8 +13,8 @@ typedef void (*EnDnoActionFunc)(struct EnDno*, PlayState*);
#define EN_DNO_GET_C000(thisx) (((thisx)->params >> 0xE) & 0x3)
typedef enum {
- /* 0x0 */ EN_DNO_GET_C000_0,
- /* 0x1 */ EN_DNO_GET_C000_1,
+ /* 0 */ EN_DNO_GET_C000_0,
+ /* 1 */ EN_DNO_GET_C000_1
} EnDnoUnkC000;
typedef struct EnDno {
diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c
index fd1557e3f..1dd5dac34 100644
--- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c
+++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c
@@ -29,7 +29,7 @@ typedef enum {
/* 1 */ EN_DNP_EYE_HALF,
/* 2 */ EN_DNP_EYE_CLOSED,
/* 3 */ EN_DNP_EYE_ANGRY,
- /* 4 */ EN_DNP_EYE_MAX,
+ /* 4 */ EN_DNP_EYE_MAX
} EnDnpEyeIndex;
ActorInit En_Dnp_InitVars = {
@@ -542,7 +542,7 @@ void EnDnp_Draw(Actor* thisx, PlayState* play) {
if (this->unk_322 & 0x100) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h
index 64f0baf93..9b02f19d3 100644
--- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h
+++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h
@@ -11,9 +11,9 @@ typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*);
#define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7)
typedef enum {
- /* 0x0 */ EN_DNP_TYPE_WOODFALL_TEMPLE,
- /* 0x1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE,
- /* 0x2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER,
+ /* 0 */ EN_DNP_TYPE_WOODFALL_TEMPLE,
+ /* 1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE,
+ /* 2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER
} EnDnpType;
typedef struct EnDnp {
diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c
index c328b02d6..667f1eafb 100644
--- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c
+++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c
@@ -469,7 +469,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) {
void EnDnq_Draw(Actor* thisx, PlayState* play) {
EnDnq* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->picto.actor);
}
diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c
index 1f754f1d5..d662e7e55 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c
@@ -30,7 +30,7 @@ typedef enum {
/* 7 */ EN_DNS_ANIM_RUN_LOOP,
/* 8 */ EN_DNS_ANIM_DANCE,
/* 9 */ EN_DNS_ANIM_FLIP,
- /* 10 */ EN_DNS_ANIM_MAX,
+ /* 10 */ EN_DNS_ANIM_MAX
} EnDnsAnimation;
static s32 D_8092DCB0[] = {
@@ -377,7 +377,7 @@ s32 func_8092D068(EnDns* this) {
void func_8092D108(EnDns* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_SetTranslateRotateYXZ(this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z,
&this->actor.home.rot);
@@ -640,7 +640,7 @@ void EnDns_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h
index 4b730abd3..ade8b6174 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h
@@ -13,12 +13,12 @@ typedef s32 (*EnDnsFunc)(struct EnDns*, PlayState*);
#define ENDNS_GET_4000(thisx) ((thisx)->params & 0x4000)
#define ENDNS_GET_8000(thisx) ((thisx)->params & 0x8000)
-enum {
- /* 0x0 */ ENDNS_GET_7_0,
- /* 0x1 */ ENDNS_GET_7_1,
- /* 0x2 */ ENDNS_GET_7_2,
- /* 0x3 */ ENDNS_GET_7_3,
-};
+typedef enum {
+ /* 0 */ ENDNS_GET_7_0,
+ /* 1 */ ENDNS_GET_7_1,
+ /* 2 */ ENDNS_GET_7_2,
+ /* 3 */ ENDNS_GET_7_3
+} EnDnsParam;
typedef struct EnDns {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
index a57814337..6149a7360 100644
--- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
+++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
@@ -371,11 +371,11 @@ void func_80876930(EnDodongo* this, PlayState* play, Vec3f* arg2) {
temp3 = this->unk_334 * 30.0f;
for (i = 0; i < 3; i++) {
- sp88.x = randPlusMinusPoint5Scaled(temp3) + arg2->x;
+ sp88.x = Rand_CenteredFloat(temp3) + arg2->x;
sp88.y = Rand_ZeroFloat(5.0f) + this->actor.floorHeight;
- sp88.z = randPlusMinusPoint5Scaled(temp3) + arg2->z;
- D_8087933C.x = randPlusMinusPoint5Scaled(2.0f);
- D_8087933C.z = randPlusMinusPoint5Scaled(2.0f);
+ sp88.z = Rand_CenteredFloat(temp3) + arg2->z;
+ D_8087933C.x = Rand_CenteredFloat(2.0f);
+ D_8087933C.z = Rand_CenteredFloat(2.0f);
func_800B0DE0(play, &sp88, &gZeroVec3f, &D_8087933C, sp80, sp7C, temp1, temp2);
}
}
@@ -738,9 +738,9 @@ void func_80877E60(EnDodongo* this, PlayState* play) {
this->timer--;
if (this->timer == 10) {
for (i = 10; i >= 0; i--) {
- sp84.x = randPlusMinusPoint5Scaled(10.0f);
- sp84.y = randPlusMinusPoint5Scaled(10.0f);
- sp84.z = randPlusMinusPoint5Scaled(10.0f);
+ sp84.x = Rand_CenteredFloat(10.0f);
+ sp84.y = Rand_CenteredFloat(10.0f);
+ sp84.z = Rand_CenteredFloat(10.0f);
sp78.x = sp84.x * -0.1f;
sp78.y = sp84.y * -0.1f;
sp78.z = sp84.z * -0.1f;
@@ -914,7 +914,8 @@ void func_808787B0(EnDodongo* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->timer == 0) {
EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0);
+ this->actor.world.pos.y, this->actor.world.pos.z,
+ BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
}
@@ -1102,7 +1103,7 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
void EnDodongo_Draw(Actor* thisx, PlayState* play) {
EnDodongo* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDodongo_OverrideLimbDraw,
EnDodongo_PostLimbDraw, &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c
index 831ff3d36..e51af13fd 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -15,7 +15,6 @@
#include "objects/object_wdor03/object_wdor03.h"
#include "objects/object_wdor04/object_wdor04.h"
#include "objects/object_wdor05/object_wdor05.h"
-#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_numa_obj/object_numa_obj.h"
#include "objects/object_kaizoku_obj/object_kaizoku_obj.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
@@ -290,10 +289,10 @@ ActorInit En_Door_InitVars = {
};
typedef struct {
- /* 0x00 */ s16 sceneId;
- /* 0x02 */ u8 dListIndex;
- /* 0x04 */ s16 objectId;
-} EnDoorInfo;
+ /* 0x0 */ s16 sceneId;
+ /* 0x2 */ u8 dListIndex;
+ /* 0x4 */ s16 objectId;
+} EnDoorInfo; // size = 0x6
static EnDoorInfo sObjInfo[] = {
{ SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ },
@@ -387,21 +386,22 @@ static Gfx* D_808679A4[14][2] = {
void EnDoor_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
s32 objectBankIndex;
- EnDoorInfo* objectInfo = sObjInfo;
+ EnDoorInfo* objectInfo = &sObjInfo[0];
EnDoor* this = THIS;
s32 i;
- Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain);
- this->unk_1A4 = ENDOOR_GET_PARAMS_7(thisx);
+ this->doorType = ENDOOR_GET_TYPE(thisx);
- this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx);
- if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) {
- DynaPolyActor_Init(&this->dyna, 0);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gDoorCol);
+ this->switchFlag = ENDOOR_GET_PARAM_7F(thisx);
+ if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) {
+ DynaPolyActor_Init(&this->knobDoor.dyna, 0);
+ DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol);
}
- SkelAnime_Init(play, &this->skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable, this->limbTable, 5);
- if (this->unk_1A4 == 5) {
+ SkelAnime_Init(play, &this->knobDoor.skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable,
+ this->limbTable, DOOR_LIMB_MAX);
+ if (this->doorType == ENDOOR_TYPE_5) {
objectInfo = &sObjInfo[17 + this->switchFlag];
} else {
for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) {
@@ -414,52 +414,53 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) {
}
}
- this->dlIndex = objectInfo->dListIndex;
+ this->knobDoor.dlIndex = objectInfo->dListIndex;
objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
if (objectBankIndex < 0) {
objectInfo = &sObjInfo[15];
objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
if (objectBankIndex != 0) {
- Actor_Kill(&this->dyna.actor);
+ Actor_Kill(&this->knobDoor.dyna.actor);
return;
}
}
- this->requiredObjBankIndex = objectBankIndex;
- this->dlIndex = objectInfo->dListIndex; // Set twice?
- if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) {
+ this->knobDoor.requiredObjBankIndex = objectBankIndex;
+ this->knobDoor.dlIndex = objectInfo->dListIndex; // Set twice?
+ if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
func_80866A5C(this, play);
} else {
this->actionFunc = func_80866A5C;
}
- Actor_SetFocus(&this->dyna.actor, 35.0f);
+ Actor_SetFocus(&this->knobDoor.dyna.actor, 35.0f);
}
void EnDoor_Destroy(Actor* thisx, PlayState* play) {
EnDoor* this = (EnDoor*)thisx;
- if (this->unk_1A4 != 7) {
- TransitionActorEntry* transitionEntry = &play->transitionActors.list[(u16)this->dyna.actor.params >> 0xA];
+ if (this->doorType != ENDOOR_TYPE_7) {
+ TransitionActorEntry* transitionEntry =
+ &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)];
if (transitionEntry->id < 0) {
transitionEntry->id = -transitionEntry->id;
}
} else if (this->switchFlag == 0) {
- DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->knobDoor.dyna.bgId);
}
}
void func_80866A5C(EnDoor* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex)) {
- this->dyna.actor.objBankIndex = this->requiredObjBankIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) {
+ this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex;
this->actionFunc = func_80866B20;
- this->dyna.actor.world.rot.y = 0;
- if (this->unk_1A4 == 1) {
+ this->knobDoor.dyna.actor.world.rot.y = 0;
+ if (this->doorType == ENDOOR_TYPE_1) {
if (!Flags_GetSwitch(play, this->switchFlag)) {
this->unk_1A6 = 10;
}
- } else if ((this->unk_1A4 == 4) &&
- (Actor_WorldDistXZToActor(&this->dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) {
+ } else if ((this->doorType == ENDOOR_TYPE_4) &&
+ (Actor_WorldDistXZToActor(&this->knobDoor.dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) {
this->actionFunc = func_8086704C;
- this->dyna.actor.world.rot.y = -0x1800;
+ this->knobDoor.dyna.actor.world.rot.y = -0x1800;
}
}
}
@@ -468,28 +469,29 @@ void func_80866B20(EnDoor* this, PlayState* play) {
static s32 D_80867BC0;
Player* player = GET_PLAYER(play);
- if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state) && (this->dyna.actor.textId == 0x1821)) {
+ if (Actor_ProcessTalkRequest(&this->knobDoor.dyna.actor, &play->state) &&
+ (this->knobDoor.dyna.actor.textId == 0x1821)) {
D_80867BC0 = true;
}
- if (this->unk_1A1 != 0) {
+ if (this->knobDoor.playOpenAnim) {
this->actionFunc = func_80867144;
- Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex],
+ Animation_PlayOnceSetSpeed(&this->knobDoor.skelAnime, sAnimations[this->knobDoor.animIndex],
(player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f);
if (this->unk_1A6 != 0) {
- gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--;
+ DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1;
Flags_SetSwitch(play, this->switchFlag);
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
}
} else if (this->unk_1A7 != 0) {
this->actionFunc = func_80866F94;
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN);
} else if (!Player_InCsMode(play)) {
Vec3f playerPosRelToDoor;
- Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos);
+ Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerPosRelToDoor, &player->actor.world.pos);
if (D_80867BC0 || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) &&
(fabsf(playerPosRelToDoor.z) < 50.0f))) {
- s16 yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
+ s16 yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y;
if (playerPosRelToDoor.z > 0.0f) {
yawDiff = (0x8000 - yawDiff);
@@ -497,51 +499,52 @@ void func_80866B20(EnDoor* this, PlayState* play) {
if (ABS_ALT(yawDiff) < 0x3000) {
player->doorType = PLAYER_DOORTYPE_HANDLE;
player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f;
- player->doorActor = &this->dyna.actor;
+ player->doorActor = &this->knobDoor.dyna.actor;
if (this->unk_1A6 != 0) {
- if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) {
+ if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) {
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->dyna.actor.textId = 0x1802;
+ this->knobDoor.dyna.actor.textId = 0x1802;
} else {
player->doorTimer = 10;
}
- } else if (this->unk_1A4 == 4) {
+ } else if (this->doorType == ENDOOR_TYPE_4) {
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->dyna.actor.textId = 0x1800;
- } else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) {
+ this->knobDoor.dyna.actor.textId = 0x1800;
+ } else if ((this->doorType == ENDOOR_TYPE_0) || (this->doorType == ENDOOR_TYPE_2) ||
+ (this->doorType == ENDOOR_TYPE_3)) {
s32 halfDaysDayBit = (play->actorCtx.halfDaysBit & HALFDAYBIT_DAWNS) >> 1;
s32 halfDaysNightBit = play->actorCtx.halfDaysBit & HALFDAYBIT_NIGHTS;
s16 temp_a2 = D_801AED48[this->switchFlag & 7];
s32 textIdOffset = (this->switchFlag >> 3) & 0xF;
- if (((this->unk_1A4 == 0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) ||
- ((this->unk_1A4 == 2) && !(halfDaysNightBit & temp_a2)) ||
- ((this->unk_1A4 == 3) && !(halfDaysDayBit & temp_a2))) {
+ if (((this->doorType == ENDOOR_TYPE_0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) ||
+ ((this->doorType == ENDOOR_TYPE_2) && !(halfDaysNightBit & temp_a2)) ||
+ ((this->doorType == ENDOOR_TYPE_3) && !(halfDaysDayBit & temp_a2))) {
s16 baseTextId = 0x182D;
- if (this->unk_1A4 == 3) {
+ if (this->doorType == ENDOOR_TYPE_3) {
baseTextId = 0x180D;
- } else if (this->unk_1A4 == 2) {
+ } else if (this->doorType == ENDOOR_TYPE_2) {
baseTextId = 0x181D;
}
player->doorType = PLAYER_DOORTYPE_TALKING;
- this->dyna.actor.textId = baseTextId + textIdOffset;
+ this->knobDoor.dyna.actor.textId = baseTextId + textIdOffset;
}
- } else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) {
+ } else if ((this->doorType == ENDOOR_TYPE_5) && (playerPosRelToDoor.z > 0.0f)) {
ScheduleOutput scheduleOutput;
if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &scheduleOutput)) {
- this->dyna.actor.textId = scheduleOutput.result + 0x1800;
+ this->knobDoor.dyna.actor.textId = scheduleOutput.result + 0x1800;
- player->doorType = ((this->dyna.actor.textId == 0x1821) && D_80867BC0)
+ player->doorType = ((this->knobDoor.dyna.actor.textId == 0x1821) && D_80867BC0)
? PLAYER_DOORTYPE_PROXIMITY
: PLAYER_DOORTYPE_TALKING;
}
}
func_80122F28(player);
}
- } else if ((this->unk_1A4 == 4) && (this->dyna.actor.xzDistToPlayer > 240.0f)) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
+ } else if ((this->doorType == ENDOOR_TYPE_4) && (this->knobDoor.dyna.actor.xzDistToPlayer > 240.0f)) {
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN);
this->actionFunc = func_80867080;
}
}
@@ -556,34 +559,34 @@ void func_80866F94(EnDoor* this, PlayState* play) {
} else {
direction = -1;
}
- if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) {
+ if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) {
Math_StepToC(&this->unk_1A7, 0, 1);
}
} else {
- if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x7D0)) {
+ if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x7D0)) {
this->actionFunc = func_80866B20;
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE);
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE);
}
}
}
void func_8086704C(EnDoor* this, PlayState* play) {
- if (this->dyna.actor.xzDistToPlayer < 120.0f) {
+ if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) {
this->actionFunc = func_808670F0;
}
}
void func_80867080(EnDoor* this, PlayState* play) {
- if (this->dyna.actor.xzDistToPlayer < 120.0f) {
+ if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) {
this->actionFunc = func_808670F0;
- } else if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, -0x1800, 0x100)) {
+ } else if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, -0x1800, 0x100)) {
this->actionFunc = func_8086704C;
}
}
void func_808670F0(EnDoor* this, PlayState* play) {
- if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x700)) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
+ if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x700)) {
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE);
this->actionFunc = func_80866B20;
}
}
@@ -593,19 +596,19 @@ void func_80867144(EnDoor* this, PlayState* play) {
s32 i;
if (DECR(this->unk_1A6) == 0) {
- if (SkelAnime_Update(&this->skelAnime) != 0) {
+ if (SkelAnime_Update(&this->knobDoor.skelAnime)) {
this->actionFunc = func_80866B20;
- this->unk_1A1 = 0;
- } else if (Animation_OnFrame(&this->skelAnime, sAnimOpenFrames[this->animIndex])) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_DOOR_OPEN);
- if (this->skelAnime.playSpeed < 1.5f) {
+ this->knobDoor.playOpenAnim = false;
+ } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimOpenFrames[this->knobDoor.animIndex])) {
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_OC_DOOR_OPEN);
+ if (this->knobDoor.skelAnime.playSpeed < 1.5f) {
numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50;
for (i = 0; i < numEffects; i++) {
- EffectSsBubble_Spawn(play, &this->dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f);
+ EffectSsBubble_Spawn(play, &this->knobDoor.dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f);
}
}
- } else if (Animation_OnFrame(&this->skelAnime, sAnimCloseFrames[this->animIndex])) {
- Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
+ } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimCloseFrames[this->knobDoor.animIndex])) {
+ Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE);
}
}
}
@@ -620,28 +623,28 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
TransitionActorEntry* transitionEntry;
EnDoor* this = THIS;
- if (limbIndex == 4) {
- Gfx** dl = D_808679A4[this->dlIndex];
+ if (limbIndex == DOOR_LIMB_4) {
+ Gfx** dl = D_808679A4[this->knobDoor.dlIndex];
s16 temp;
s32 dlIndex;
transitionEntry = NULL;
- if (this->unk_1A4 != 7) {
- transitionEntry = &play->transitionActors.list[(u16)this->dyna.actor.params >> 0xA];
+ if (this->doorType != ENDOOR_TYPE_7) {
+ transitionEntry = &play->transitionActors.list[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)];
}
- rot->z += this->dyna.actor.world.rot.y;
- if ((this->unk_1A4 == 7) || (play->roomCtx.prevRoom.num >= 0) ||
+ rot->z += this->knobDoor.dyna.actor.world.rot.y;
+ if ((this->doorType == ENDOOR_TYPE_7) || (play->roomCtx.prevRoom.num >= 0) ||
(transitionEntry->sides[0].room == transitionEntry->sides[1].room)) {
s32 pad;
- temp = (this->dyna.actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z) -
- Math_Vec3f_Yaw(&play->view.eye, &this->dyna.actor.world.pos);
+ temp = (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[3].z + rot->z) -
+ Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos);
*dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1];
} else {
dlIndex = 0;
- if (transitionEntry->sides[0].room != this->dyna.actor.room) {
+ if (transitionEntry->sides[0].room != this->knobDoor.dyna.actor.room) {
dlIndex = 1;
}
*dList = dl[dlIndex];
@@ -653,17 +656,18 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void EnDoor_Draw(Actor* thisx, PlayState* play) {
EnDoor* this = THIS;
- if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) {
+ if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
OPEN_DISPS(play->state.gfxCtx);
- if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) {
+
+ if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) {
Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
}
- SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDoor_OverrideLimbDraw, NULL,
- &this->dyna.actor);
- if (this->dyna.actor.world.rot.y != 0) {
- if (this->dyna.actor.world.rot.y > 0) {
+ SkelAnime_DrawOpa(play, this->knobDoor.skelAnime.skeleton, this->knobDoor.skelAnime.jointTable,
+ EnDoor_OverrideLimbDraw, NULL, &this->knobDoor.dyna.actor);
+ if (this->knobDoor.dyna.actor.world.rot.y != 0) {
+ if (this->knobDoor.dyna.actor.world.rot.y > 0) {
gSPDisplayList(POLY_OPA_DISP++, gDoorRightDL);
} else {
gSPDisplayList(POLY_OPA_DISP++, gDoorLeftDL);
@@ -672,6 +676,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) {
if (this->unk_1A6) {
Actor_DrawDoorLock(play, this->unk_1A6, 0);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h
index bea44a122..03dc31ab6 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.h
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.h
@@ -2,27 +2,34 @@
#define Z_EN_DOOR_H
#include "global.h"
+#include "z64door.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
struct EnDoor;
typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*);
-#define ENDOOR_GET_PARAMS_7(thisx) (((thisx)->params >> 7) & 7)
-#define ENDOOR_GET_PARAMS_7F(thisx) (((thisx)->params) & 0x7F)
+#define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7)
+#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F)
+typedef enum EnDoorType {
+ /* 0 */ ENDOOR_TYPE_0,
+ /* 1 */ ENDOOR_TYPE_1,
+ /* 2 */ ENDOOR_TYPE_2,
+ /* 3 */ ENDOOR_TYPE_3,
+ /* 4 */ ENDOOR_TYPE_4,
+ /* 5 */ ENDOOR_TYPE_5,
+ /* 6 */ ENDOOR_TYPE_6,
+ /* 7 */ ENDOOR_TYPE_7
+} EnDoorType;
typedef struct EnDoor {
- /* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ SkelAnime skelAnime;
- /* 0x1A0 */ u8 animIndex;
- /* 0x1A1 */ u8 unk_1A1;
- /* 0x1A2 */ s8 requiredObjBankIndex;
- /* 0x1A3 */ s8 dlIndex;
- /* 0x1A4 */ u8 unk_1A4;
+ /* 0x000 */ KnobDoorActor knobDoor;
+ /* 0x1A4 */ u8 doorType;
/* 0x1A5 */ u8 switchFlag;
/* 0x1A6 */ u8 unk_1A6;
/* 0x1A7 */ s8 unk_1A7;
- /* 0x1A8 */ Vec3s limbTable[5];
+ /* 0x1A8 */ Vec3s limbTable[DOOR_LIMB_MAX];
/* 0x1C8 */ EnDoorActionFunc actionFunc;
} EnDoor;
diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c
index 8959dde7a..d48bfd359 100644
--- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c
+++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c
@@ -92,9 +92,9 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) {
s32 i;
EnDoorEtc* this = THIS;
- Actor_ProcessInitChain(&this->actor, sInitChain);
- Actor_SetScale(&this->actor, 0.01f);
- this->actor.shape.rot.x = -0x4000;
+ Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain);
+ Actor_SetScale(&this->knobDoor.dyna.actor, 0.01f);
+ this->knobDoor.dyna.actor.shape.rot.x = -0x4000;
this->angle = 0;
for (i = 0; i < 15; i++, objectInfo++) {
if (play->sceneId == objectInfo->sceneId) {
@@ -106,19 +106,19 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) {
}
objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
if (objectIndex < 0) {
- Actor_Kill(&this->actor);
+ Actor_Kill(&this->knobDoor.dyna.actor);
} else {
- this->objectIndex = objectIndex;
- this->dListIndex = objectInfo->dListIndex;
- if (this->actor.objBankIndex == this->objectIndex) {
+ this->knobDoor.requiredObjBankIndex = objectIndex;
+ this->knobDoor.dlIndex = objectInfo->dListIndex;
+ if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) {
EnDoorEtc_WaitForObject(this, play);
} else {
this->actionFunc = EnDoorEtc_WaitForObject;
}
}
Collider_InitCylinder(play, &this->collider);
- Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ Collider_SetCylinder(play, &this->collider, &this->knobDoor.dyna.actor, &sCylinderInit);
+ this->knobDoor.dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
}
void EnDoorEtc_Destroy(Actor* thisx, PlayState* play) {
@@ -139,11 +139,11 @@ s32 EnDoorEtc_IsDistanceGreater(Vec3f* a, Vec3f* b, f32 c) {
}
void EnDoorEtc_WaitForObject(EnDoorEtc* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
- this->actor.flags &= ~ACTOR_FLAG_10;
- this->actor.objBankIndex = this->objectIndex;
+ if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) {
+ this->knobDoor.dyna.actor.flags &= ~ACTOR_FLAG_10;
+ this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex;
this->actionFunc = func_80AC2354;
- this->actor.draw = EnDoorEtc_Draw;
+ this->knobDoor.dyna.actor.draw = EnDoorEtc_Draw;
}
}
@@ -175,27 +175,28 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) {
s16 yawDiff;
s32 yawDiffAbs;
- Actor_OffsetOfPointInActorCoords(&this->actor, &playerOffsetFromDoor, &player->actor.world.pos);
- if (this->unk_1A1 == 0) {
+ Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerOffsetFromDoor, &player->actor.world.pos);
+ if (!this->knobDoor.playOpenAnim) {
if ((!Player_InCsMode(play)) &&
((fabsf(playerOffsetFromDoor.y) < 20.0f) && fabsf(playerOffsetFromDoor.x) < 20.0f) &&
(fabsf(playerOffsetFromDoor.z) < 50.0f)) {
- yawDiff = player->actor.shape.rot.y - this->actor.shape.rot.y;
+ yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y;
if (playerOffsetFromDoor.z > 0.0f) {
yawDiff = 0x8000 - yawDiff;
}
yawDiffAbs = ABS_ALT(yawDiff);
if (yawDiffAbs < 0x3000) {
player->doorDirection = (playerOffsetFromDoor.z >= 0.0f) ? 1.0f : -1.0f;
- player->doorActor = &this->actor;
- player->doorType = -1;
+ player->doorActor = &this->knobDoor.dyna.actor;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
}
}
}
- if ((this->actor.textId == 0x239B) && Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor))) {
- Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor));
+ if ((this->knobDoor.dyna.actor.textId == 0x239B) &&
+ Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor))) {
+ Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor));
this->actionFunc = func_80AC2154;
- this->actor.textId = 0x1800; // "It won't budge!"
+ this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!"
this->unk_1F4 |= 1;
this->timer = 0x5A;
}
@@ -206,18 +207,18 @@ void func_80AC2354(EnDoorEtc* this, PlayState* play) {
while (door != NULL) {
if ((door->id != ACTOR_EN_DOOR) ||
- !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->actor.world.pos, 10.0f)) {
+ !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->knobDoor.dyna.actor.world.pos, 10.0f)) {
door = door->next;
} else {
- this->actor.world.pos.x = door->world.pos.x;
- this->actor.world.pos.y = door->world.pos.y;
- this->actor.world.pos.z = door->world.pos.z;
- this->actor.shape.rot.y = door->shape.rot.y;
- this->actor.world.rot.y = door->world.rot.y;
+ this->knobDoor.dyna.actor.world.pos.x = door->world.pos.x;
+ this->knobDoor.dyna.actor.world.pos.y = door->world.pos.y;
+ this->knobDoor.dyna.actor.world.pos.z = door->world.pos.z;
+ this->knobDoor.dyna.actor.shape.rot.y = door->shape.rot.y;
+ this->knobDoor.dyna.actor.world.rot.y = door->world.rot.y;
Actor_Kill(door);
this->actionFunc = func_80AC21A0;
- this->actor.textId = 0x239B;
- Actor_SetFocus(&this->actor, 70.0f);
+ this->knobDoor.dyna.actor.textId = 0x239B;
+ Actor_SetFocus(&this->knobDoor.dyna.actor, 70.0f);
break;
}
}
@@ -229,7 +230,7 @@ void EnDoorEtc_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->unk_1F4 & 1) {
- Collider_UpdateCylinder(&this->actor, &this->collider);
+ Collider_UpdateCylinder(&this->knobDoor.dyna.actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
}
@@ -239,7 +240,7 @@ void EnDoorEtc_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(-2900.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateZS(this->angle, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h
index 49ca83f2a..9cd63248f 100644
--- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h
+++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h
@@ -2,6 +2,7 @@
#define Z_EN_DOOR_ETC_H
#include "global.h"
+#include "z64door.h"
struct EnDoorEtc;
@@ -10,11 +11,7 @@ struct EnDoorEtc;
typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*);
typedef struct EnDoorEtc {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char pad_144[0x5D];
- /* 0x1A1 */ u8 unk_1A1;
- /* 0x1A2 */ s8 objectIndex;
- /* 0x1A3 */ u8 dListIndex; // Never read, inferred from ovl_En_Door
+ /* 0x000 */ KnobDoorActor knobDoor;
/* 0x1A4 */ s16 angle;
/* 0x1A6 */ s16 timer;
/* 0x1A8 */ ColliderCylinder collider;
diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
index 9efb11474..fae9fc4fc 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
@@ -35,17 +35,17 @@ typedef enum {
/* 0 */ DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED,
/* 1 */ DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED,
/* 2 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_LARGE_SWAY,
- /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY,
+ /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY
} DeepPythonExtendState;
typedef enum {
/* 0 */ DEEP_PYTHON_GRAB_STATE_START,
- /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED,
+ /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED
} DeepPythonGrabState;
typedef enum {
/* 0 */ DEEP_PYTHON_ATTACK_STATE_START,
- /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED,
+ /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED
} DeepPythonAttackState;
static s32 sNumPythonsDead = 0;
@@ -299,11 +299,11 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) {
Vec3f bubblePos;
s32 i;
- bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10;
+ bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10;
colorIndex = 0;
if (this->action == DEEP_PYTHON_ACTION_DEAD) {
colorIndex = 1;
- bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10;
+ bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10;
}
for (i = 0; i < bubbleCount; i++) {
@@ -311,9 +311,9 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) {
sBubbleVelocity.x = Rand_ZeroFloat(1.0f) * 23.0f;
sBubbleVelocity.y = Rand_ZeroFloat(1.0f) * 10.0f;
sBubbleVelocity.z = Rand_ZeroFloat(1.0f) * 23.0f;
- bubblePos.x += randPlusMinusPoint5Scaled(i * 30.0f);
- bubblePos.y += randPlusMinusPoint5Scaled(5.0f);
- bubblePos.z += randPlusMinusPoint5Scaled(i * 30.0f);
+ bubblePos.x += Rand_CenteredFloat(i * 30.0f);
+ bubblePos.y += Rand_CenteredFloat(5.0f);
+ bubblePos.z += Rand_CenteredFloat(i * 30.0f);
sBubbleAccel.y = Rand_ZeroFloat(1.0f) * 20.0f * 3.0f;
scale = Rand_S16Offset(380, 240);
EffectSsDtBubble_SpawnCustomColor(play, &bubblePos, &sBubbleVelocity, &sBubbleAccel,
@@ -835,8 +835,8 @@ void EnDragon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
void EnDragon_Draw(Actor* thisx, PlayState* play) {
EnDragon* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnDragon_OverrideLimbDraw, EnDragon_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
index 2d5f31b54..a35c8fa9b 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
@@ -13,7 +13,7 @@ typedef enum {
/* 3 */ DEEP_PYTHON_ACTION_DAMAGE,
/* 4 */ DEEP_PYTHON_ACTION_RETREAT,
/* 5 */ DEEP_PYTHON_ACTION_SETUP_DEAD,
- /* 6 */ DEEP_PYTHON_ACTION_DEAD,
+ /* 6 */ DEEP_PYTHON_ACTION_DEAD
} DeepPythonAction;
struct EnDragon;
diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c
index 7e232d5bd..9fc28c952 100644
--- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c
+++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c
@@ -110,9 +110,11 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot
// after that it will no longer be rendered.
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment);
gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -120,7 +122,7 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot
void EnDrs_Draw(Actor* thisx, PlayState* play) {
EnDrs* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
EnDrs_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
index 67dff9c41..6c6b40318 100644
--- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
+++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
@@ -121,7 +121,7 @@ void EnDs2n_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState]));
diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
index b25e4eb47..06b4308a0 100644
--- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
+++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
@@ -55,7 +55,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) {
this->actor.velocity.y = 0.0f;
}
- if (this->unk14C == 0 && this->unk14A != 0) {
+ if ((this->unk14C == 0) && (this->unk14A != 0)) {
this->unk14C = 0x32;
this->actionFunc = func_80A613C8;
}
@@ -64,7 +64,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) {
void func_80A613C8(EnDyExtra* this, PlayState* play) {
Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f);
- if (this->unk14C == 0 || this->unk150 < 0.02f) {
+ if ((this->unk14C == 0) || (this->unk150 < 0.02f)) {
Actor_Kill(&this->actor);
return;
}
@@ -114,7 +114,7 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, play->state.frames * 2, 0, 0x20, 0x40, 1, play->state.frames,
play->state.frames * -8, 0x10, 0x10));
diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c
index 509e4fa9a..bd9949c61 100644
--- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c
+++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c
@@ -13,7 +13,7 @@
typedef enum {
/* 0 */ EGBLOCK_EFFECT_DEBRIS_SOLID,
- /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT,
+ /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT
} EnEgblockEffectType;
void EnEgblock_Init(Actor* thisx, PlayState* play);
@@ -110,7 +110,7 @@ void EnEgblock_Draw(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnEgblock* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->inactive != true) {
OPEN_DISPS(play->state.gfxCtx);
@@ -134,8 +134,8 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3)
if (!effect->isActive) {
effect->isActive = true;
effect->pos = *pos;
- effect->pos.x += randPlusMinusPoint5Scaled(50.0f);
- effect->pos.z += randPlusMinusPoint5Scaled(50.0f);
+ effect->pos.x += Rand_CenteredFloat(50.0f);
+ effect->pos.z += Rand_CenteredFloat(50.0f);
effect->timer = lifetime;
effect->alpha = 255;
effect->type = arg3;
@@ -146,9 +146,9 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3)
effect->velocity.y = 5.0f + (10.0f * Rand_ZeroOne());
effect->velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f);
effect->scale = 0.5f + (0.2f * Rand_ZeroFloat(1.0f));
- effect->rot.x = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.y = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.z = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.x = Rand_CenteredFloat(0x7530);
+ effect->rot.y = Rand_CenteredFloat(0x7530);
+ effect->rot.z = Rand_CenteredFloat(0x7530);
break;
}
}
@@ -193,7 +193,7 @@ void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isActive) {
diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c
index 2c7fdc030..1a54c8c33 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c
@@ -37,7 +37,7 @@ typedef enum {
/* 0 */ EYEGORE_EFFECT_IMPACT,
/* 1 */ EYEGORE_EFFECT_PIECE_LARGE,
/* 2 */ EYEGORE_EFFECT_PIECE_SMALL,
- /* 3 */ EYEGORE_EFFECT_DEBRIS,
+ /* 3 */ EYEGORE_EFFECT_DEBRIS
} EnEgolEffectType;
typedef enum {
@@ -56,7 +56,7 @@ typedef enum {
/* 12 */ EYEGORE_ANIM_SIT,
/* 13 */ EYEGORE_ANIM_LEFT_PUNCH,
/* 14 */ EYEGORE_ANIM_RIGHT_PUNCH,
- /* 15 */ EYEGORE_ANIM_MAX,
+ /* 15 */ EYEGORE_ANIM_MAX
} EnEgolAnimation;
typedef enum {
@@ -64,7 +64,7 @@ typedef enum {
/* 1 */ EYEGORE_LASER_START,
/* 2 */ EYEGORE_LASER_CHARGING,
/* 3 */ EYEGORE_LASER_FIRE,
- /* 7 */ EYEGORE_LASER_ON = 7,
+ /* 7 */ EYEGORE_LASER_ON = 7
} EnEgolLaserState;
void EnEgol_Init(Actor* thisx, PlayState* play);
@@ -238,7 +238,7 @@ typedef enum {
/* 0x0 */ EYEGORE_DMGEFF_IMMUNE_0,
/* 0x4 */ EYEGORE_DMGEFF_LIGHT_ARROW = 4,
/* 0xE */ EYEGORE_DMGEFF_NONE = 0xE,
- /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F,
+ /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F
} EnEgolDamageEffect;
static DamageTable sDamageTable = {
@@ -394,7 +394,7 @@ void EnEgol_DestroyBlocks(EnEgol* this, PlayState* play, Vec3f pos1, Vec3f pos2)
}
void EnEgol_GetWaypoint(EnEgol* this) {
- if ((this->pathIndex != -1) && (this->path != NULL) &&
+ if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL) &&
!SubS_CopyPointFromPath(this->path, this->waypoint, &this->waypointPos)) {
Actor_Kill(&this->actor);
}
@@ -426,9 +426,9 @@ void EnEgol_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetJntSph(play, &this->eyeCollider, &this->actor, &sEyeJntSphInit, this->eyeElements);
Collider_InitAndSetQuad(play, &this->laserCollider, &this->actor, &sLaserQuadInit);
- this->pathIndex = EYEGORE_GET_PATH(&this->actor);
- if (this->pathIndex == 0x3F) {
- this->pathIndex = -1;
+ this->pathIndex = EYEGORE_GET_PATH_INDEX(&this->actor);
+ if (this->pathIndex == EYEGORE_PATH_INDEX_NONE) {
+ this->pathIndex = PATH_INDEX_NONE;
Actor_Kill(&this->actor);
return;
}
@@ -445,7 +445,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) {
this->minLaserRange = 200.0f;
}
- this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, EYEGORE_PATH_INDEX_NONE);
EYEGORE_SET_SPH_DIM(this->eyeCollider.elements[0], 500, 0, 0, 26, 1.0f);
@@ -610,8 +610,7 @@ void EnEgol_Retreat(EnEgol* this, PlayState* play) {
if ((ABS_ALT(angleToFacing) < 0x3000) && (fabsf(this->actor.world.pos.y - player->actor.world.pos.y) < 50.0f) &&
(this->actor.xzDistToPlayer < 100.0f) && (player->invincibilityTimer == 0)) {
- func_800B8D50(play, &this->actor, 2.0f, (s32)randPlusMinusPoint5Scaled(0x2000) + this->actor.world.rot.y, 5.0f,
- 0x10);
+ func_800B8D50(play, &this->actor, 2.0f, (s32)Rand_CenteredFloat(0x2000) + this->actor.world.rot.y, 5.0f, 0x10);
}
Math_Vec3f_Copy(&spawnPos, &gZeroVec3f);
if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) {
@@ -764,11 +763,11 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) {
/*! @bug The following is supposed to calculate the rotation from vertical to the collision poly normal.
* However, the calculation is performed incorrectly. The correct calculation is
- * rotToNorm.x = func_80086B30(nz, ny) * 0x8000 / M_PI;
- * rotToNorm.z = func_80086B30(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI;
+ * rotToNorm.x = Math_FAtan2F(nz, ny) * 0x8000 / M_PI;
+ * rotToNorm.z = Math_FAtan2F(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI;
*/
- rotToNorm.x = RAD_TO_BINANG_ALT2(-func_80086B30(-nz * ny, 1.0f));
- rotToNorm.z = RAD_TO_BINANG_ALT2(func_80086B30(-nx * ny, 1.0f));
+ rotToNorm.x = RAD_TO_BINANG_ALT2(-Math_FAtan2F(-nz * ny, 1.0f));
+ rotToNorm.z = RAD_TO_BINANG_ALT2(Math_FAtan2F(-nx * ny, 1.0f));
if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) {
EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT);
@@ -1101,7 +1100,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) {
typedef enum {
/* 0 */ EYEGORE_HIT_NONE,
/* 1 */ EYEGORE_HIT_DAMAGE,
- /* 2 */ EYEGORE_HIT_IMMUNE, // Makes hitmarks, but no reaction
+ /* 2 */ EYEGORE_HIT_IMMUNE // Makes hitmarks, but no reaction
} EyegoreHitReaction;
void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) {
@@ -1268,7 +1267,8 @@ void EnEgol_Update(Actor* thisx, PlayState* play) {
// last argument is DMG_ZORA_BOOMERANG | DMG_HOOKSHOT | DMG_NORMAL_ARROW | DMG_FIRE_ARROW | DMG_ICE_ARROW |
// DMG_LIGHT_ARROW | DMG_DEKU_BUBBLE
- if ((projectile != NULL) && !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ENARROW_5))) {
+ if ((projectile != NULL) &&
+ !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ARROW_TYPE_LIGHT))) {
this->eyelidRotTarget = 0xFA0;
this->eyeShutTimer = 20;
if (this->action == EYEGORE_ACTION_LASER) {
@@ -1451,7 +1451,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->action != EYEGORE_ACTION_DEAD) {
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gEyegoreEyeLaserTexAnim));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
@@ -1476,7 +1476,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) {
gSPDisplayList(POLY_OPA_DISP++, gEyegoreLaserDL);
}
if (((this->action == EYEGORE_ACTION_LASER) && (this->laserState >= EYEGORE_LASER_FIRE)) || this->chargingLaser) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
if (!this->chargingLaser) {
s32 i;
@@ -1533,9 +1533,9 @@ void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32
effect->timer = lifetime;
effect->alpha = 255;
effect->type = type;
- effect->rot.x = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.y = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.z = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.x = Rand_CenteredFloat(0x7530);
+ effect->rot.y = Rand_CenteredFloat(0x7530);
+ effect->rot.z = Rand_CenteredFloat(0x7530);
if ((effect->type == EYEGORE_EFFECT_PIECE_LARGE) || (effect->type == EYEGORE_EFFECT_PIECE_SMALL)) {
effect->accel.y = -1.0f;
effect->velocity.x = 4.0f * (Rand_ZeroOne() - 0.5f);
@@ -1599,7 +1599,7 @@ void EnEgol_DrawEffects(EnEgol* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isActive) {
Matrix_Push();
diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h
index cec69e5a1..e85e4b98a 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h
@@ -8,10 +8,12 @@ struct EnEgol;
typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*);
-#define EYEGORE_GET_PATH(thisx) ((thisx)->params & 0x3F)
+#define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F)
#define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F)
-#define EYEGORE_PARAMS(switch, path) ((((switch) & 0x7F) << 6) | ((path) & 0x3F))
+#define EYEGORE_PATH_INDEX_NONE 0x3F
+
+#define EYEGORE_PARAMS(switch, pathIndex) ((((switch) & 0x7F) << 6) | ((pathIndex) & 0x3F))
#define EYEGORE_EFFECT_COUNT 100
diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
index 615d59196..3dc6e4a72 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -62,8 +62,10 @@ static Color_RGBAf sOuterColors[] = {
};
typedef struct {
- u8 r, g, b;
-} FairyColorFlags;
+ /* 0x0 */ u8 r;
+ /* 0x1 */ u8 g;
+ /* 0x2 */ u8 b;
+} FairyColorFlags; // size = 0x3
static FairyColorFlags sColorFlags[] = {
{ 0, 0, 0 }, { 1, 0, 0 }, { 1, 2, 0 }, { 1, 0, 2 }, { 0, 1, 0 }, { 2, 1, 0 }, { 0, 1, 2 },
@@ -199,7 +201,7 @@ void func_8088C858(EnElf* this, PlayState* play) {
this->unk_244 = 1;
this->unk_248 = 128;
this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f;
- this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF);
+ this->unk_24C = Rand_CenteredFloat(0x7FFF);
this->unk_26C = func_8088C9CC;
}
}
@@ -214,7 +216,7 @@ void func_8088C920(EnElf* this, PlayState* play) {
this->unk_244 = 1;
this->unk_248 = 128;
this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f;
- this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF);
+ this->unk_24C = Rand_CenteredFloat(0x7FFF);
this->unk_26C = func_8088C9CC;
}
}
@@ -262,7 +264,7 @@ void func_8088C9CC(EnElf* this, PlayState* play) {
this->unk_244 = 1;
this->unk_248 = 128;
this->unk_254 = Rand_ZeroFloat(0.5f) + 0.5f;
- this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF);
+ this->unk_24C = Rand_CenteredFloat(0x7FFF);
}
}
@@ -291,7 +293,7 @@ void func_8088CC48(EnElf* this, PlayState* play) {
this->unk_246 = 0;
this->unk_24A = (s32)Rand_ZeroFloat(1048.0f) + 0x200;
this->unk_224 = this->actor.world.pos;
- this->unk_258 = randPlusMinusPoint5Scaled(0x7FFF);
+ this->unk_258 = Rand_CenteredFloat(0x7FFF);
this->unk_26C = func_8088C9CC;
func_8088CBAC(this, play);
this->unk_25C = 0;
@@ -636,9 +638,9 @@ s32 func_8088DCA4(EnElf* this) {
}
void func_8088DD34(EnElf* this, PlayState* play) {
- Player* refActor = GET_PLAYER(play);
+ Actor* playerActor = &GET_PLAYER(play)->actor;
s32 pad;
- Player* player2 = GET_PLAYER(play);
+ Player* player = GET_PLAYER(play);
f32 heightDiff;
SkelAnime_Update(&this->skelAnime);
@@ -650,7 +652,7 @@ void func_8088DD34(EnElf* this, PlayState* play) {
func_8088CBAC(this, play);
if (this->fairyFlags & 0x800) {
- this->unk_224.y = player2->bodyPartsPos[0].y;
+ this->unk_224.y = player->bodyPartsPos[0].y;
}
func_8088D8D0(this, &this->unk_224);
@@ -670,17 +672,17 @@ void func_8088DD34(EnElf* this, PlayState* play) {
return;
}
- heightDiff = this->actor.world.pos.y - refActor->actor.world.pos.y;
+ heightDiff = this->actor.world.pos.y - playerActor->world.pos.y;
if ((this->fairyFlags & 0x1000) && (heightDiff > 0.0f) && (heightDiff < 60.0f) &&
- !func_8088C804(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) {
+ !func_8088C804(&this->actor.world.pos, &playerActor->world.pos, 10.0f)) {
Health_ChangeBy(play, 0x80);
if (this->fairyFlags & 0x200) {
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
}
gSaveContext.jinxTimer = 0;
this->unk_254 = 50.0f;
- this->unk_248 = refActor->actor.shape.rot.y;
+ this->unk_248 = playerActor->shape.rot.y;
this->unk_24C = -0x1000;
this->unk_224.y = 30.0f;
this->unk_250 = 0.0f;
@@ -1245,9 +1247,9 @@ void func_8088F5F4(EnElf* this, PlayState* play, s32 sparkleLife) {
Color_RGBA8 envColor;
if (!(this->fairyFlags & 8)) {
- sparklePos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x;
+ sparklePos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x;
sparklePos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y;
- sparklePos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z;
+ sparklePos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z;
primColor.r = this->innerColor.r;
primColor.g = this->innerColor.g;
@@ -1588,7 +1590,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C94C(play->state.gfxCtx);
+ Gfx_SetupDL27_Xlu(play->state.gfxCtx);
envAlpha = (this->timer * 50) & 0x1FF;
envAlpha = (envAlpha >= 0x100) ? 511 - envAlpha : envAlpha;
diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/src/overlays/actors/ovl_En_Elf/z_en_elf.h
index 680d59158..18e444e97 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h
@@ -50,14 +50,14 @@ typedef struct EnElf {
} EnElf; // size = 0x274
typedef enum {
- /* 0x00 */ ENELF_TYPE_0,
- /* 0x01 */ ENELF_TYPE_1,
- /* 0x02 */ ENELF_TYPE_2,
- /* 0x03 */ ENELF_TYPE_3,
- /* 0x04 */ ENELF_TYPE_4,
- /* 0x05 */ ENELF_TYPE_5,
- /* 0x06 */ ENELF_TYPE_6,
- /* 0x07 */ ENELF_TYPE_7
+ /* 0 */ ENELF_TYPE_0,
+ /* 1 */ ENELF_TYPE_1,
+ /* 2 */ ENELF_TYPE_2,
+ /* 3 */ ENELF_TYPE_3,
+ /* 4 */ ENELF_TYPE_4,
+ /* 5 */ ENELF_TYPE_5,
+ /* 6 */ ENELF_TYPE_6,
+ /* 7 */ ENELF_TYPE_7
} FairyType;
#endif // Z_EN_ELF_H
diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
index 12026b8b9..2584a1c73 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
@@ -66,7 +66,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 1.25f);
this->actionFunc = EnElfbub_Idle;
- this->zRot = randPlusMinusPoint5Scaled(0x10000);
+ this->zRot = Rand_CenteredFloat(0x10000);
this->zRotDelta = 1000;
this->xScale = 0.08f;
@@ -151,7 +151,7 @@ void EnElfbub_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(0.0f, 0.0f, 1.0f, MTXMODE_APPLY);
Matrix_ReplaceRotation(&play->billboardMtxF);
diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
index a3f17f605..cacef3f4d 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
@@ -262,8 +262,8 @@ void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) {
}
for (i = 0; i < arg2; i++) {
- elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, randPlusMinusPoint5Scaled(20.0f) + sp6C.x, sp6C.y,
- randPlusMinusPoint5Scaled(20.0f) + sp6C.z, 0, 0, 0, params);
+ elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + sp6C.x, sp6C.y,
+ Rand_CenteredFloat(20.0f) + sp6C.z, 0, 0, 0, params);
if (elforg == NULL) {
continue;
}
diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
index 975b08c2c..692a76d82 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
@@ -10,13 +10,13 @@ typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*);
#define ENELFGRP_GET(thisx) ((thisx)->params & 0xF)
#define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
-enum {
+typedef enum {
/* 0 */ ENELFGRP_0,
/* 2 */ ENELFGRP_1,
/* 2 */ ENELFGRP_2,
/* 3 */ ENELFGRP_3,
- /* 4 */ ENELFGRP_4,
-};
+ /* 4 */ ENELFGRP_4
+} EnElfgrpParam;
typedef struct EnElfgrp {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
index 871665cc6..5c3e33550 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
@@ -58,7 +58,7 @@ void EnElforg_InitializeParams(EnElforg* this) {
this->actor.speed = 1.0f;
this->targetSpeedXZ = 1.0f;
this->actor.velocity.y = 0.0f;
- this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000);
+ this->actor.world.rot.y = Rand_CenteredFloat(0x10000);
this->timer = 0;
this->secondaryTimer = Rand_ZeroFloat(100.0f);
this->actor.shape.yOffset = 0.0f;
@@ -93,18 +93,18 @@ void EnElforg_Init(Actor* thisx, PlayState* play) {
}
break;
+ case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN:
+ case STRAY_FAIRY_TYPE_BUBBLE:
+ case STRAY_FAIRY_TYPE_CHEST:
+ case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN:
+ break;
+
default:
if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) {
Actor_Kill(thisx);
return;
}
break;
-
- case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN:
- case STRAY_FAIRY_TYPE_BUBBLE:
- case STRAY_FAIRY_TYPE_CHEST:
- case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN:
- break;
}
if (Map_IsInDungeonOrBossArea(play)) {
@@ -176,9 +176,9 @@ void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) {
s32 pad;
s32 index;
- pos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x;
+ pos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x;
pos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y);
- pos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z;
+ pos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z;
index = (this->area < STRAY_FAIRY_AREA_CLOCK_TOWN || this->area >= STRAY_FAIRY_AREA_MAX)
? STRAY_FAIRY_AREA_CLOCK_TOWN
: this->area;
@@ -216,7 +216,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) {
s16 angleAdjustment;
s16 targetAngle;
- this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9);
+ this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer * 0x200);
EnElforg_ApproachTargetYPosition(this, homePos);
xDifference = this->actor.world.pos.x - homePos->x;
zDifference = this->actor.world.pos.z - homePos->z;
@@ -245,7 +245,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) {
void EnElforg_MoveToTarget(EnElforg* this, Vec3f* targetPos) {
s16 targetAngle;
- this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9);
+ this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer * 0x200);
EnElforg_ApproachTargetYPosition(this, targetPos);
targetAngle = Math_Atan2S_XY(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x));
@@ -273,7 +273,7 @@ void EnElforg_TrappedByBubble(EnElforg* this, PlayState* play) {
EnElforg_InitializeParams(this);
this->actionFunc = EnElforg_FreeFloating;
} else {
- this->actor.shape.yOffset += 10.0f * Math_SinS(this->timer << 9);
+ this->actor.shape.yOffset += 10.0f * Math_SinS(this->timer * 0x200);
this->actor.world.pos = this->actor.parent->world.pos;
this->actor.world.pos.y += 12.0f;
}
@@ -391,8 +391,8 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) {
distanceFromPlayer = 20.0f;
}
- this->actor.world.pos.x = (Math_SinS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.x;
- this->actor.world.pos.z = (Math_CosS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.z;
+ this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.x;
+ this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.z;
this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y;
EnElforg_SpawnSparkles(this, play, 16);
}
@@ -561,7 +561,7 @@ void EnElforg_TrappedByEnemy(EnElforg* this, PlayState* play) {
void EnElforg_SetupTrappedByEnemy(EnElforg* this, PlayState* play) {
Actor* enemy = EnElforg_GetHoldingEnemy(this, play);
- if (enemy != NULL && enemy->update != NULL) {
+ if ((enemy != NULL) && (enemy->update != NULL)) {
this->actionFunc = EnElforg_TrappedByEnemy;
this->enemy = enemy;
}
@@ -587,7 +587,7 @@ void EnElforg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if (this->timer == 0 && this->secondaryTimer > 0) {
+ if ((this->timer == 0) && (this->secondaryTimer > 0)) {
this->secondaryTimer--;
} else {
this->timer++;
@@ -626,7 +626,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
switch (this->area) {
case STRAY_FAIRY_AREA_WOODFALL:
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim));
diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
index 834a6449f..737ffd2d3 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
@@ -67,7 +67,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) {
}
if (this->type == EN_ENCOUNT1_SKULLFISH_2) {
this->pathIndex = ENENCOUNT1_GET_PATH_INDEX(&this->actor);
- this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENENCOUNT1_PATH_INDEX_NONE);
this->spawnTotalMax = -1;
this->spawnDistanceMax = -1.0f;
}
@@ -102,15 +102,15 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) {
this->timer = 0;
switch (this->type) {
case EN_ENCOUNT1_GRASSHOPPER:
- scale = randPlusMinusPoint5Scaled(40.0f) + 200.0f;
+ scale = Rand_CenteredFloat(40.0f) + 200.0f;
rotY = player->actor.shape.rot.y;
if (this->spawnActiveCount & 1) {
rotY = -rotY;
- scale = randPlusMinusPoint5Scaled(20.0f) + 100.0f;
+ scale = Rand_CenteredFloat(20.0f) + 100.0f;
}
- spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f);
+ spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f);
spawnPos.y = player->actor.floorHeight + 120.0f;
- spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f);
+ spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f);
floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
if ((floorHeight <= BGCHECK_Y_MIN) ||
((player->actor.depthInWater != BGCHECK_Y_MIN) &&
@@ -125,11 +125,11 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) {
break;
case EN_ENCOUNT1_SKULLFISH:
- scale = randPlusMinusPoint5Scaled(250.0f) + 500.0f;
+ scale = Rand_CenteredFloat(250.0f) + 500.0f;
rotY = player->actor.shape.rot.y;
- spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f);
+ spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f);
spawnPos.y = player->actor.world.pos.y - Rand_ZeroFloat(20.0f);
- spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f);
+ spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f);
floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos);
if (!(player->stateFlags1 & PLAYER_STATE1_8000000) || (floorHeight <= BGCHECK_Y_MIN) ||
(player->actor.depthInWater < floorHeight)) {
diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h
index 5c8e6db83..0eb675272 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h
@@ -10,6 +10,8 @@
#define ENENCOUNT1_GET_SPAWN_TOTAL_MAX(thisx) ((thisx)->params & 0x3F)
#define ENENCOUNT1_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) // Used only by EN_ENCOUNT1_SKULLFISH_2 which doesn't use SpawnTotalMax
+#define ENENCOUNT1_PATH_INDEX_NONE 0x3F
+
#define ENENCOUNT1_GET_SPAWN_TIME_MIN(thisx) ((thisx)->world.rot.x) // Time to wait between spawning
#define ENENCOUNT1_GET_SPAWN_UNUSED_PROP(thisx) ((thisx)->world.rot.y) // Unused spawn property
#define ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(thisx) ((thisx)->world.rot.z) // Negative means infinite distance
@@ -18,7 +20,7 @@ typedef enum EnEncount1Enemy {
/* 0 */ EN_ENCOUNT1_GRASSHOPPER,
/* 1 */ EN_ENCOUNT1_WALLMASTER,
/* 2 */ EN_ENCOUNT1_SKULLFISH,
- /* 3 */ EN_ENCOUNT1_SKULLFISH_2,
+ /* 3 */ EN_ENCOUNT1_SKULLFISH_2
} EnEncount1Enemy;
struct EnEncount1;
diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
index 7450e3427..ad2f48c7f 100644
--- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
+++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
@@ -270,14 +270,15 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
OPEN_DISPS(gfxCtx);
+
sPtr = this->effects;
- func_8012C28C(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) {
if (sPtr->isEnabled) {
Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW);
Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL);
gDPPipeSync(POLY_XLU_DISP++);
@@ -289,5 +290,6 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL);
}
}
+
CLOSE_DISPS(gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
index 8d9a18cf1..5e28850c6 100644
--- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
+++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
@@ -103,11 +103,11 @@ void func_809C4078(EnEncount4* this, PlayState* play) {
return;
}
- fireWallParams = BGFIREWALL_PARAMS_0;
+ fireWallParams = BGFIREWALL_PARAM_0;
if ((this->unk_148 == 0) || (captainKeeta->unk2DC != 0)) {
i = 0;
if (this->unk_148 != 0) {
- fireWallParams = BGFIREWALL_PARAMS_1;
+ fireWallParams = BGFIREWALL_PARAM_1;
i = 2;
}
while (i < ARRAY_COUNT(D_809C46DC)) {
@@ -171,10 +171,10 @@ void func_809C42A8(EnEncount4* this, PlayState* play) {
if (this->unk_14C != 0) {
yRot += 0x8000;
}
- pos.x += Math_SinS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f));
- pos.z += Math_CosS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f));
+ pos.x += Math_SinS(yRot) * (40.0f + Rand_CenteredFloat(40.0f));
+ pos.z += Math_CosS(yRot) * (40.0f + Rand_CenteredFloat(40.0f));
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0,
- ENSKB_PARAMS_0) != NULL) {
+ ENSKB_PARAM_0) != NULL) {
this->unk_14C++;
if (this->unk_14C >= 2) {
this->actionFunc = func_809C4598;
diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c
index 2996ccc23..6121cce9d 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c
@@ -87,8 +87,9 @@ void EnEndingHero_Draw(Actor* thisx, PlayState* play) {
s32 index = 0;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk242]));
diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c
index 0cc20358a..604bcd583 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c
@@ -69,8 +69,8 @@ void EnEndingHero2_Update(Actor* thisx, PlayState* play) {
void EnEndingHero2_Draw(Actor* thisx, PlayState* play) {
EnEndingHero2* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c
index aba7c4488..e95d8a6a7 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c
@@ -69,8 +69,8 @@ void EnEndingHero3_Update(Actor* thisx, PlayState* play) {
void EnEndingHero3_Draw(Actor* thisx, PlayState* play) {
EnEndingHero3* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c
index 39e920b9e..39fd515b1 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c
@@ -69,8 +69,8 @@ void EnEndingHero4_Update(Actor* thisx, PlayState* play) {
void EnEndingHero4_Draw(Actor* thisx, PlayState* play) {
EnEndingHero4* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c
index ddf866f94..dd656f903 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c
@@ -85,26 +85,34 @@ void EnEndingHero5_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
void EnEndingHero5_Draw(Actor* thisx, PlayState* play) {
EnEndingHero5* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
switch (this->unk25C) {
case 0:
gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255);
break;
+
case 1:
gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255);
break;
+
case 2:
gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255);
break;
+
case 3:
gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255);
break;
+
case 4:
gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255);
break;
+
+ default:
+ break;
}
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c
index 5324518de..9c5bbf42e 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c
+++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c
@@ -114,7 +114,7 @@ void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
OPEN_DISPS(play->state.gfxCtx);
- if (this->npcIndex >= 4 && limbIndex == 15) {
+ if ((this->npcIndex >= 4) && (limbIndex == 15)) {
index = this->npcIndex - 4;
gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[index]);
}
@@ -133,28 +133,35 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) {
if (this->isIdle == 1) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
- if (this->objectIndex >= 0 && Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
+ if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment);
switch (this->npcIndex) {
case 4:
gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255);
break;
+
case 5:
gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255);
break;
+
case 6:
gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255);
break;
+
case 7:
gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255);
break;
+
case 8:
gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255);
break;
+
+ default:
+ break;
}
if (this->npcIndex == 0) {
diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c
index 4081bd8e7..64bfdaecc 100644
--- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c
+++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c
@@ -64,10 +64,10 @@ void EnEstone_Init(Actor* thisx, PlayState* play) {
s32 pad;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f);
- this->rotVel.x = this->rotVel.y = this->rotVel.z = randPlusMinusPoint5Scaled(1.0f) * 20.0f;
+ this->rotVel.x = this->rotVel.y = this->rotVel.z = Rand_CenteredFloat(1.0f) * 20.0f;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x2710);
+ this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x2710);
this->actor.shape.rot.y = this->actor.world.rot.y;
if (this->actor.params == ENESTONE_TYPE_LARGE) {
@@ -224,9 +224,9 @@ void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* ac
effect->accel = *accel;
effect->scale = scale;
effect->timer = lifetime;
- effect->rot.x = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.y = randPlusMinusPoint5Scaled(0x7530);
- effect->rot.z = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.x = Rand_CenteredFloat(0x7530);
+ effect->rot.y = Rand_CenteredFloat(0x7530);
+ effect->rot.z = Rand_CenteredFloat(0x7530);
break;
}
}
@@ -266,7 +266,7 @@ void EnEstone_DrawEffects(EnEstone* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isActive) {
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.h b/src/overlays/actors/ovl_En_Estone/z_en_estone.h
index ceb26c9c6..f9b44b944 100644
--- a/src/overlays/actors/ovl_En_Estone/z_en_estone.h
+++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.h
@@ -11,7 +11,7 @@ typedef void (*EnEstoneActionFunc)(struct EnEstone*, PlayState*);
typedef enum {
/* 0 */ ENESTONE_TYPE_LARGE,
- /* 1 */ ENESTONE_TYPE_SMALL,
+ /* 1 */ ENESTONE_TYPE_SMALL
} EnEstoneType;
typedef struct {
diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
index a43d39c7c..03989b01f 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
@@ -52,11 +52,11 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play);
void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play);
typedef struct {
- u8 modelIndex;
- Vec3f pos;
- Vec3f velocity;
- Vec3s rot;
-} EnFallDebrisEffect;
+ /* 0x00 */ u8 modelIndex;
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ Vec3f velocity;
+ /* 0x1C */ Vec3s rot;
+} EnFallDebrisEffect; // size = 0x24
#define EN_FALL_DEBRIS_EFFECT_COUNT 50
@@ -662,16 +662,16 @@ s32 EnFall_RisingDebris_InitializeEffect(EnFall* this) {
debrisEffects[i].pos.x = this->actor.world.pos.x;
debrisEffects[i].pos.y = this->actor.world.pos.y;
debrisEffects[i].pos.z = this->actor.world.pos.z;
- angle = randPlusMinusPoint5Scaled(0x10000);
+ angle = Rand_CenteredFloat(0x10000);
scale = (1.0f - (Rand_ZeroFloat(1.0f) * Rand_ZeroFloat(1.0f))) * 3000.0f;
debrisEffects[i].pos.x += Math_SinS(angle) * scale;
debrisEffects[i].pos.z += Math_CosS(angle) * scale;
debrisEffects[i].velocity.x = 0.0f;
debrisEffects[i].velocity.z = 0.0f;
debrisEffects[i].velocity.y = 80.0f;
- debrisEffects[i].rot.x = randPlusMinusPoint5Scaled(0x10000);
- debrisEffects[i].rot.y = randPlusMinusPoint5Scaled(0x10000);
- debrisEffects[i].rot.z = randPlusMinusPoint5Scaled(0x10000);
+ debrisEffects[i].rot.x = Rand_CenteredFloat(0x10000);
+ debrisEffects[i].rot.y = Rand_CenteredFloat(0x10000);
+ debrisEffects[i].rot.z = Rand_CenteredFloat(0x10000);
this->activeDebrisEffectCount++;
return true;
}
@@ -736,7 +736,7 @@ void EnFall_Moon_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
Matrix_MultVec3f(sFocusOffset, &this->actor.focus.pos);
@@ -754,7 +754,7 @@ void EnFall_OpenMouthMoon_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
primColor = (this->eyeGlowIntensity * 200.0f) + 40.0f;
@@ -772,7 +772,7 @@ void EnFall_LodMoon_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 20, 25, 30, 0, 0x3E7, 0x3200);
@@ -826,7 +826,7 @@ void EnFall_Fireball_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
this->fireballYTexScroll1 += (s32)(4.0f + (this->fireballIntensity * 12.0f));
this->fireballYTexScroll2 += (s32)(2.0f + (this->fireballIntensity * 6.0f));
@@ -864,7 +864,7 @@ void EnFall_RisingDebris_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, gMoonDebrisMaterialDL);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
@@ -890,11 +890,12 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play) {
if (this->fireRingAlpha > 1.0f) {
this->fireRingAlpha = 1.0f;
}
+
OPEN_DISPS(play->state.gfxCtx);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gMoonFireRingTexAnim));
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
@@ -914,13 +915,13 @@ void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play) {
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gFallingMoonsTearTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, gFallingMoonsTearDL);
Matrix_Scale(3.0f, 3.0f, 6.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, gFallingMoonsTearFireDL);
diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.h b/src/overlays/actors/ovl_En_Fall/z_en_fall.h
index c9eaaf44f..60bb7ec33 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h
@@ -19,7 +19,7 @@ typedef enum {
/* 9 */ EN_FALL_TYPE_CLOCK_TOWER_MOON,
/* 10 */ EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH,
/* 11 */ EN_FALL_TYPE_CRASH_FIRE_RING,
- /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER,
+ /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER
} EnFallType;
struct EnFall;
diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c
index 28a6cc74c..bdf742ec3 100644
--- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c
+++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c
@@ -153,13 +153,13 @@ void EnFall2_Draw(Actor* thisx, PlayState* play) {
Mtx* mtx;
if (!(this->alphaLevel <= 0.0f)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840));
mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY);
func_8018450C(play, &this->skeletonInfo, mtx, NULL, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c
index 3d68d34d7..efccfb9d9 100644
--- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c
+++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c
@@ -166,13 +166,13 @@ void EnFamos_Init(Actor* thisx, PlayState* play) {
s32 i;
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (FAMOS_GET_PATH(thisx) != 0xFF) {
- path = &play->setupPathList[this->actor.params];
+ if (FAMOS_GET_PATH_INDEX(&this->actor) != FAMOS_PATH_INDEX_NONE) {
+ path = &play->setupPathList[FAMOS_GET_PATH_INDEX(&this->actor)];
this->pathPoints = Lib_SegmentedToVirtual(path->points);
- this->pathNodeCount = path->count;
- if (this->pathNodeCount == 1) {
+ this->pathCount = path->count;
+ if (this->pathCount == 1) {
this->pathPoints = NULL;
- this->pathNodeCount = 0;
+ this->pathCount = 0;
}
}
@@ -265,7 +265,7 @@ void EnFamos_SetupDeathDebris(EnFamos* this) {
rock->rotation.y = (s32)Rand_Next() >> 0x10;
rock->rotation.z = (s32)Rand_Next() >> 0x10;
rock->pos.x = Math_SinS(randVelDirection) * 20.0f + this->actor.world.pos.x;
- rock->pos.y = randPlusMinusPoint5Scaled(60.0f) + (this->actor.world.pos.y + 40.0f);
+ rock->pos.y = Rand_CenteredFloat(60.0f) + (this->actor.world.pos.y + 40.0f);
rock->pos.z = Math_CosS(randVelDirection) * 20.0f + this->actor.world.pos.z;
rock->scale = Rand_ZeroFloat(0.002f) + (2.5f * 0.001f);
}
@@ -365,15 +365,15 @@ void EnFamos_StillIdle(EnFamos* this, PlayState* play) {
*/
void EnFamos_SetupPathingIdle(EnFamos* this) {
if (this->isCalm) {
- this->currentPathNode++;
- if (this->currentPathNode == this->pathNodeCount) {
- this->currentPathNode = 0;
+ this->waypointIndex++;
+ if (this->waypointIndex == this->pathCount) {
+ this->waypointIndex = 0;
}
} else {
this->isCalm = true;
}
- Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->currentPathNode]);
+ Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->waypointIndex]);
this->targetYaw = Actor_WorldYawTowardPoint(&this->actor, &this->targetDest);
this->actionFunc = EnFamos_PathingIdle;
this->actor.speed = 0.0f;
@@ -489,7 +489,7 @@ void EnFamos_SetupChase(EnFamos* this) {
void EnFamos_Chase(EnFamos* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f abovePlayerPos;
- u32 surfaceType;
+ FloorProperty surfaceType;
EnFamos_UpdateBobbingHeight(this);
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800);
@@ -502,7 +502,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) {
surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough
- (surfaceType != 0xC && surfaceType != 0xD)) {
+ ((surfaceType != FLOOR_PROPERTY_12) && (surfaceType != FLOOR_PROPERTY_13))) {
EnFamos_SetupAttackAim(this);
} else if ((Player_GetMask(play) == PLAYER_MASK_STONE) ||
@@ -545,7 +545,8 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) {
surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
hitFloor = this->actor.bgCheckFlags & BGCHECKFLAG_GROUND;
- if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == 0xC) || (surfaceType == 0xD)) {
+ if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == FLOOR_PROPERTY_12) ||
+ (surfaceType == FLOOR_PROPERTY_13)) {
this->collider1.base.atFlags &= ~AT_ON;
this->collider2.base.atFlags |= AT_ON;
if (hitFloor) {
@@ -686,12 +687,12 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) {
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4);
}
- this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x;
- this->actor.world.pos.z = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.z;
+ this->actor.world.pos.x = Rand_CenteredFloat(5.0f) + this->targetDest.x;
+ this->actor.world.pos.z = Rand_CenteredFloat(5.0f) + this->targetDest.z;
if (this->stateTimer == 1) {
- EnBom* explosion =
- (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY);
+ EnBom* explosion = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
+ this->actor.world.pos.y + 40.0f, this->actor.world.pos.z,
+ BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
if (explosion != NULL) {
explosion->timer = 0; // instant explosion
}
@@ -747,7 +748,7 @@ void EnFamos_Update(Actor* thisx, PlayState* play) {
f32 oldHeight;
s32 oldHoverTimer; // save old value to test if changed
- if (this->debrisTimer <= 0 ||
+ if ((this->debrisTimer <= 0) ||
(this->debrisTimer--, EnFamos_UpdateDebrisPosRot(this), (this->actionFunc != EnFamos_DeathFade))) {
oldHoverTimer = this->hoverTimer;
EnFamos_UpdateFlipStatus(this);
@@ -787,7 +788,7 @@ void EnFamos_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->emblemCollider.base);
}
- if (this->collider2.base.atFlags & AC_ON) {
+ if (this->collider2.base.atFlags & AT_ON) {
Collider_UpdateCylinder(&this->actor, &this->collider2);
this->collider2.dim.pos.y = this->actor.floorHeight;
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base);
@@ -829,9 +830,10 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) {
EnFamosRock* rock;
OPEN_DISPS(play->state.gfxCtx);
+
dispOpa = POLY_OPA_DISP;
- gSPDisplayList(&dispOpa[0], &sSetupDL[6 * 0x19]);
+ gSPDisplayList(&dispOpa[0], gSetupDLs[SETUPDL_25]);
gDPSetPrimColor(&dispOpa[1], 0, 0x80, 255, 255, 255, 255);
@@ -858,7 +860,7 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) {
void EnFamos_Draw(Actor* thisx, PlayState* play) {
EnFamos* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->actionFunc != EnFamos_DeathFade) {
AnimatedMat_Draw(play, sEmblemAnimatedMats[this->animatedMaterialIndex]);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnFamos_OverrideLimbDraw,
diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.h b/src/overlays/actors/ovl_En_Famos/z_en_famos.h
index 874da9034..468356376 100644
--- a/src/overlays/actors/ovl_En_Famos/z_en_famos.h
+++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.h
@@ -15,9 +15,11 @@ typedef struct EnFamosRock {
/* 0x20 */ f32 scale;
} EnFamosRock; // size = 0x24
-#define FAMOS_GET_PATH(thisx) ((thisx)->params)
+#define FAMOS_GET_PATH_INDEX(thisx) ((thisx)->params)
#define FAMOS_GET_AGGRO_DISTANCE(thisx) ((thisx)->shape.rot.x)
+#define FAMOS_PATH_INDEX_NONE 0xFF
+
// stateTimer gets reused:
// after spotting player, counts frames until first attack (8)
// after lost aggro, measures frames looking around before returning to home (60)
@@ -33,8 +35,8 @@ typedef struct EnFamos {
/* 0x1D0 */ EnFamosActionFunc actionFunc;
/* 0x1D4 */ u8 animatedMaterialIndex;
/* 0x1D5 */ u8 hasFinishedRotating; // stable up or down
- /* 0x1D6 */ u8 pathNodeCount;
- /* 0x1D7 */ u8 currentPathNode;
+ /* 0x1D6 */ u8 pathCount;
+ /* 0x1D7 */ u8 waypointIndex;
/* 0x1D8 */ u8 isCalm; // is NOT aware of player
/* 0x1DA */ s16 hoverTimer; // start 30, decr to 0, repeat: for trig height adjustment when hovering
/* 0x1DC */ s16 stateTimer; // reused for different actionFunc
diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c
index 868c43533..491d3c499 100644
--- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c
+++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c
@@ -107,7 +107,7 @@ s32 EnFg_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
s32 ret;
ret = false;
- if (animIndex >= 0 && animIndex < 4) {
+ if ((animIndex >= 0) && (animIndex < 4)) {
ret = true;
frameCount = sAnimationInfo[animIndex].frameCount;
if (frameCount < 0) {
@@ -151,15 +151,19 @@ s32 EnFg_GetDamageEffect(EnFg* this) {
case 1:
ret = FG_DMGEFFECT_DEKUSTICK;
break;
+
case 15:
ret = FG_DMGEFFECT_HOOKSHOT;
break;
+
case 14:
ret = FG_DMGEFFECT_ARROW;
break;
+
case 3:
ret = FG_DMGEFFECT_ICEARROW;
break;
+
default:
ret = FG_DMGEFFECT_EXPLOSION;
break;
@@ -187,8 +191,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
this->actor.world.pos.y = this->actor.floorHeight + 2.0f;
this->actionFunc = EnFg_DoNothing;
break;
+
case FG_DMGEFFECT_HOOKSHOT:
break;
+
case FG_DMGEFFECT_ARROW:
this->actor.flags &= ~ACTOR_FLAG_1;
this->skelAnime.playSpeed = 0.0f;
@@ -202,10 +208,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f);
this->actionFunc = EnFg_DoNothing;
break;
+
case FG_DMGEFFECT_EXPLOSION:
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0);
- if (1) {}
this->actor.params = FG_BLACK;
this->skelAnime.playSpeed = 0.0f;
ac = this->collider.base.ac;
@@ -218,6 +224,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
this->timer = 0;
this->actionFunc = EnFg_Knockback;
break;
+
default:
if (DECR(this->timer) == 0) {
Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP);
@@ -251,8 +258,10 @@ void EnFg_Jump(EnFg* this, PlayState* play) {
this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f);
this->actionFunc = EnFg_DoNothing;
break;
+
case FG_DMGEFFECT_HOOKSHOT:
break;
+
case FG_DMGEFFECT_EXPLOSION:
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0);
@@ -269,6 +278,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) {
this->timer = 0;
this->actionFunc = EnFg_Knockback;
break;
+
default:
if (Animation_OnFrame(&this->skelAnime, 8.0f)) {
this->skelAnime.curFrame = 8.0f;
@@ -377,11 +387,13 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if ((limbIndex == 7) || (limbIndex == 8)) {
OPEN_DISPS(play->state.gfxCtx);
+
Matrix_Push();
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop();
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -403,7 +415,8 @@ void EnFg_Draw(Actor* thisx, PlayState* play) {
Matrix_Pop();
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, envColor[this->actor.params].r, envColor[this->actor.params].g,
envColor[this->actor.params].b, envColor[this->actor.params].a);
@@ -411,6 +424,7 @@ void EnFg_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(object_fr_Tex_0059A0));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnFg_OverrideLimbDraw, EnFg_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -456,29 +470,32 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) {
s16 firstDone = false;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 10; i++, dustEffect++) {
- if (dustEffect->type) {
- if (!firstDone) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
- gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328);
- gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0);
- firstDone = true;
- }
-
- if (1) {}
- alpha = (255.0f / 16.0f) * dustEffect->timer;
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha);
- gDPPipeSync(POLY_XLU_DISP++);
- Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW);
- Matrix_ReplaceRotation(&play->billboardMtxF);
- Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY);
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- index = 0.5f * dustEffect->timer;
- gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index]));
- gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338);
+ if (dustEffect->type == 0) {
+ continue;
}
+
+ if (!firstDone) {
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
+ gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328);
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0);
+ firstDone = true;
+ }
+
+ alpha = (255.0f / 16.0f) * dustEffect->timer;
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha);
+ gDPPipeSync(POLY_XLU_DISP++);
+ Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ index = 0.5f * dustEffect->timer;
+ gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index]));
+ gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.h b/src/overlays/actors/ovl_En_Fg/z_en_fg.h
index 6440812ca..a1917b9bc 100644
--- a/src/overlays/actors/ovl_En_Fg/z_en_fg.h
+++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.h
@@ -9,21 +9,21 @@ typedef void (*EnFgActionFunc)(struct EnFg*, PlayState*);
// Based on the envColor data. Related to params but mostly unused.
typedef enum {
- /* 0x0 */ FG_YELLOW,
- /* 0x1 */ FG_CYAN,
- /* 0x2 */ FG_PINK,
- /* 0x3 */ FG_BLUE,
- /* 0x4 */ FG_WHITE,
- /* 0x5 */ FG_BLACK, // All frogs are blackened when hit by an explosion
+ /* 0 */ FG_YELLOW,
+ /* 1 */ FG_CYAN,
+ /* 2 */ FG_PINK,
+ /* 3 */ FG_BLUE,
+ /* 4 */ FG_WHITE,
+ /* 5 */ FG_BLACK // All frogs are blackened when hit by an explosion
} FrogType;
typedef enum {
- /* 0x0 */ FG_DMGEFFECT_NONE,
- /* 0x1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg
- /* 0x2 */ FG_DMGEFFECT_DEKUSTICK,
- /* 0x3 */ FG_DMGEFFECT_HOOKSHOT,
- /* 0x4 */ FG_DMGEFFECT_ARROW,
- /* 0x5 */ FG_DMGEFFECT_ICEARROW,
+ /* 0 */ FG_DMGEFFECT_NONE,
+ /* 1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg
+ /* 2 */ FG_DMGEFFECT_DEKUSTICK,
+ /* 3 */ FG_DMGEFFECT_HOOKSHOT,
+ /* 4 */ FG_DMGEFFECT_ARROW,
+ /* 5 */ FG_DMGEFFECT_ICEARROW
} FrogDamageEffect;
typedef struct {
diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
index 434ee1b86..fd3b723d8 100644
--- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
+++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
@@ -301,7 +301,7 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y,
Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 0x300);
} else if (rand < 0.8f) {
- this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(1536.0f);
+ this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x600);
}
// Climb if too close to ground
@@ -828,7 +828,7 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_OPA_DISP;
}
- gSPDisplayList(gfx, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx, gSetupDLs[SETUPDL_25]);
if (this->currentType == KEESE_FIRE) {
gDPSetEnvColor(&gfx[1], 0, 0, 0, 0);
diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
index b70ce1ae7..0331ec347 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -948,7 +948,7 @@ void EnFish_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, colour->r, colour->g, colour->b, 255);
diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.h b/src/overlays/actors/ovl_En_Fish/z_en_fish.h
index d3941906c..2a348051e 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h
@@ -7,12 +7,12 @@ struct EnFish;
typedef void (*EnFishUnkFunc)(Actor*, PlayState*);
-enum {
+typedef enum {
/* -1 */ ENFISH_MINUS1 = -1,
/* 0 */ ENFISH_0,
/* 1 */ ENFISH_1,
- /* 2 */ ENFISH_2,
-};
+ /* 2 */ ENFISH_2
+} EnFishParam;
typedef struct EnFish {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
index b7952c1bc..923cfeef2 100644
--- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
+++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
@@ -352,7 +352,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) {
this->unk_2B4 = (s32)Rand_ZeroFloat(20.0f) + 10;
} else if (this->unk_2B4 == 1) {
if ((this->unk_348 == 0) || (Rand_ZeroOne() < 0.6f)) {
- this->unk_348 = randPlusMinusPoint5Scaled(0x2000);
+ this->unk_348 = Rand_CenteredFloat(0x2000);
} else {
this->unk_348 = Math_Vec3f_Pitch(&this->actor.world.pos, &this->unk_324);
if (this->unk_348 < -0x1000) {
@@ -545,8 +545,8 @@ void func_80B295A4(EnFish2* this, PlayState* play) {
Math_ApproachZeroF(&this->actor.speed, 0.3f, 0.3f);
if (this->unk_2B4 != 0) {
Math_Vec3f_Copy(&sp60, &this->unk_318);
- sp60.x += randPlusMinusPoint5Scaled(100.0f);
- sp60.z += randPlusMinusPoint5Scaled(100.0f);
+ sp60.x += Rand_CenteredFloat(100.0f);
+ sp60.z += Rand_CenteredFloat(100.0f);
for (i = 0; i < 2; i++) {
EffectSsBubble_Spawn(play, &sp60, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f);
@@ -912,10 +912,10 @@ void func_80B2A498(EnFish2* this, PlayState* play) {
for (i = 0; i < 10; i++) {
Math_Vec3f_Copy(&sp6C, &this->actor.world.pos);
- sp6C.x += randPlusMinusPoint5Scaled(70.0f);
+ sp6C.x += Rand_CenteredFloat(70.0f);
sp6C.y = this->unk_334 + 10.0f;
- sp6C.z += randPlusMinusPoint5Scaled(70.0f);
- EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)randPlusMinusPoint5Scaled(50.0f) + 350);
+ sp6C.z += Rand_CenteredFloat(70.0f);
+ EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)Rand_CenteredFloat(50.0f) + 350);
}
}
}
@@ -970,11 +970,11 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) {
if ((play->gameplayFrames % 8) == 0) {
Math_Vec3f_Copy(&sp5C, &this->unk_324);
- sp5C.x += randPlusMinusPoint5Scaled(100.0f);
+ sp5C.x += Rand_CenteredFloat(100.0f);
sp5C.y = this->actor.floorHeight;
- sp5C.z += randPlusMinusPoint5Scaled(100.0f);
+ sp5C.z += Rand_CenteredFloat(100.0f);
- for (i = 0; i < (s32)randPlusMinusPoint5Scaled(5.0f) + 10; i++) {
+ for (i = 0; i < (s32)Rand_CenteredFloat(5.0f) + 10; i++) {
EffectSsBubble_Spawn(play, &sp5C, 0, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f);
}
}
@@ -1078,8 +1078,8 @@ void EnFish2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
void EnFish2_Draw(Actor* thisx, PlayState* play) {
EnFish2* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnFish2_OverrideLimbDraw, EnFish2_PostLimbDraw, &this->actor);
func_80B2B180(this, play);
@@ -1102,9 +1102,9 @@ void func_80B2ADB0(EnFish2* this, Vec3f* vec, s16 arg2) {
ptr->unk_20 = VIRTUAL_TO_PHYSICAL(SEGMENTED_TO_VIRTUAL(phi_v0));
ptr->unk_00 = true;
ptr->unk_04 = *vec;
- ptr->unk_04.x += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f));
- ptr->unk_04.y += randPlusMinusPoint5Scaled(20.0f);
- ptr->unk_04.z += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f));
+ ptr->unk_04.x += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f));
+ ptr->unk_04.y += Rand_CenteredFloat(20.0f);
+ ptr->unk_04.z += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f));
ptr->unk_18 = (this->unk_330 * 20.0f) - (Rand_ZeroFloat(5.0f) * 0.01f);
ptr->unk_1C = 0x42;
ptr->unk_10 = arg2;
@@ -1157,7 +1157,7 @@ void func_80B2B180(EnFish2* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
ptr = &this->unk_3F8[0];
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) {
if (ptr->unk_00) {
diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
index 306f1d94d..20edbcbc2 100644
--- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
+++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
@@ -3,7 +3,7 @@
* Overlay: ovl_En_Fishing
* Description: Fishing Pond Elements (Owner, Fish, Props, Effects...)
*/
-#include "prevent_bss_reordering.h"
+
#include "z_en_fishing.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
@@ -25,24 +25,24 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2);
void EnFishing_DrawOwner(Actor* thisx, PlayState* play);
typedef struct {
- /* 0x00 */ u8 unk_00;
- /* 0x02 */ Vec3s pos;
- /* 0x08 */ u8 unk_08;
- /* 0x0C */ f32 unk_0C;
+ /* 0x0 */ u8 unk_00;
+ /* 0x2 */ Vec3s pos;
+ /* 0x8 */ u8 unk_08;
+ /* 0xC */ f32 unk_0C;
} FishingFishInit; // size = 0x10
#define EFFECT_COUNT 130
typedef enum {
- /* 0x00 */ FS_EFF_NONE,
- /* 0x01 */ FS_EFF_RIPPLE,
- /* 0x02 */ FS_EFF_DUST_SPLASH,
- /* 0x03 */ FS_EFF_WATER_DUST,
- /* 0x04 */ FS_EFF_BUBBLE,
- /* 0x05 */ FS_EFF_RAIN_DROP,
- /* 0x06 */ FS_EFF_OWNER_HAT,
- /* 0x07 */ FS_EFF_RAIN_RIPPLE,
- /* 0x08 */ FS_EFF_RAIN_SPLASH
+ /* 0 */ FS_EFF_NONE,
+ /* 1 */ FS_EFF_RIPPLE,
+ /* 2 */ FS_EFF_DUST_SPLASH,
+ /* 3 */ FS_EFF_WATER_DUST,
+ /* 4 */ FS_EFF_BUBBLE,
+ /* 5 */ FS_EFF_RAIN_DROP,
+ /* 6 */ FS_EFF_OWNER_HAT,
+ /* 7 */ FS_EFF_RAIN_RIPPLE,
+ /* 8 */ FS_EFF_RAIN_SPLASH
} FishingEffectType;
typedef struct {
@@ -73,9 +73,9 @@ typedef enum {
} FishingPropType;
typedef struct {
- /* 0x00 */ u8 type;
- /* 0x02 */ Vec3s pos;
-} FishingPropInit; // size = 0x08
+ /* 0x0 */ u8 type;
+ /* 0x2 */ Vec3s pos;
+} FishingPropInit; // size = 0x8
typedef struct {
/* 0x00 */ Vec3f pos;
@@ -93,8 +93,8 @@ typedef struct {
} FishingProp; // size = 0x3C
typedef enum {
- /* 0x00 */ FS_GROUP_FISH_NONE,
- /* 0x01 */ FS_GROUP_FISH_NORMAL
+ /* 0 */ FS_GROUP_FISH_NONE,
+ /* 1 */ FS_GROUP_FISH_NORMAL
} FishingGroupFishType;
#define GROUP_FISH_COUNT 60
@@ -1252,7 +1252,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 30; i < EFFECT_COUNT; i++) {
if (effect->type == FS_EFF_RAIN_DROP) {
if (flag == 0) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 30);
flag++;
@@ -1271,7 +1271,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
effect++;
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
effect = firstEffect + 30;
flag = 0;
@@ -1708,7 +1708,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) {
EnFishing_UpdateSinkingLure(play);
if (sLurePos.y < WATER_SURFACE_Y(play)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentMaterialDL);
@@ -1725,7 +1725,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) {
}
}
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentMaterialDL);
@@ -1757,7 +1757,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Push();
if (D_8090CD54 != 0) {
@@ -1800,7 +1800,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
Matrix_RotateZF(M_PI / 2, MTXMODE_APPLY);
Matrix_RotateYF(M_PI / 2, MTXMODE_APPLY);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gFishingLureFloatDL);
@@ -1821,7 +1821,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
EnFishing_DrawLureHook(play, &hookPos[1], &sLureHookRefPos[1], 1);
}
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 55);
@@ -1838,9 +1838,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
dy = sLurePos.y - sRodTipPos.y;
dz = sLurePos.z - sRodTipPos.z;
- ry = func_80086B30(dx, dz);
+ ry = Math_FAtan2F(dx, dz);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -func_80086B30(dy, dist);
+ rx = -Math_FAtan2F(dy, dist);
dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f;
@@ -1865,9 +1865,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
dy = D_80917218.y - (linePos + i)->y;
dz = D_80917218.z - (linePos + i)->z;
- ry = func_80086B30(dx, dz);
+ ry = Math_FAtan2F(dx, dz);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -func_80086B30(dy, dist);
+ rx = -Math_FAtan2F(dy, dist);
dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f;
@@ -1893,7 +1893,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
}
Matrix_Pop();
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -1949,25 +1949,25 @@ void EnFishing_DrawRod(PlayState* play) {
D_8090CD34 = 0.0f;
}
- spC8 = player->unk_B08[1];
- Math_SmoothStepToF(&player->unk_B08[1], input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f);
- spC8 = player->unk_B08[1] - spC8;
+ spC8 = player->unk_B0C;
+ Math_SmoothStepToF(&player->unk_B0C, input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f);
+ spC8 = player->unk_B0C - spC8;
- spC4 = player->unk_B08[0];
- Math_SmoothStepToF(&player->unk_B08[0], input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f);
- spC4 = player->unk_B08[0] - spC4;
+ spC4 = player->unk_B08;
+ Math_SmoothStepToF(&player->unk_B08, input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f);
+ spC4 = player->unk_B08 - spC4;
- if (player->unk_B08[0] > 1.0f) {
- player->unk_B08[0] = 1.0f;
+ if (player->unk_B08 > 1.0f) {
+ player->unk_B08 = 1.0f;
}
- if (player->unk_B08[1] > 1.0f) {
- player->unk_B08[1] = 1.0f;
+ if (player->unk_B0C > 1.0f) {
+ player->unk_B0C = 1.0f;
}
- if (player->unk_B08[0] < -1.0f) {
- player->unk_B08[0] = -1.0f;
+ if (player->unk_B08 < -1.0f) {
+ player->unk_B08 = -1.0f;
}
- if (player->unk_B08[1] < -1.0f) {
- player->unk_B08[1] = -1.0f;
+ if (player->unk_B0C < -1.0f) {
+ player->unk_B0C = -1.0f;
}
Math_ApproachF(&D_8090CD28, spC4 * 70.0f * -0.01f, 1.0f, D_8090CD30);
@@ -1976,8 +1976,8 @@ void EnFishing_DrawRod(PlayState* play) {
Math_ApproachF(&D_8090CD34, 1.0f, 1.0f, 0.1f);
Math_ApproachZeroF(&D_8090CD38, 1.0f, 0.05f);
} else {
- Math_ApproachZeroF(&player->unk_B08[1], 1.0f, 0.1f);
- Math_ApproachZeroF(&player->unk_B08[0], 1.0f, 0.1f);
+ Math_ApproachZeroF(&player->unk_B0C, 1.0f, 0.1f);
+ Math_ApproachZeroF(&player->unk_B08, 1.0f, 0.1f);
Math_ApproachF(&D_8090CD2C, (Math_SinS(D_809171FE * 3000) * 0.025f) + -0.03f, 1.0f, 0.05f);
Math_ApproachZeroF(&D_8090CD28, 1.0f, 0.05f);
@@ -1988,13 +1988,13 @@ void EnFishing_DrawRod(PlayState* play) {
}
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, gFishingRodSetupDL);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 155, 0, 255);
- Matrix_Mult(&player->mf_CC4, MTXMODE_NEW);
+ Matrix_Mult(&player->leftHandMf, MTXMODE_NEW);
if (sLinkAge != 1) {
Matrix_Translate(0.0f, 400.0f, 0.0f, MTXMODE_APPLY);
@@ -2009,11 +2009,11 @@ void EnFishing_DrawRod(PlayState* play) {
}
Matrix_RotateXFApply(-0.6283185f);
- Matrix_RotateZF((player->unk_B08[0] * 0.5f) + 0.4712389f, MTXMODE_APPLY);
+ Matrix_RotateZF((player->unk_B08 * 0.5f) + 0.4712389f, MTXMODE_APPLY);
Matrix_RotateXFApply((D_8090CD40 + 20.0f) * 0.01f * M_PI);
Matrix_Scale(0.70000005f, 0.70000005f, 0.70000005f, MTXMODE_APPLY);
- spC0 = (D_8090CD3C * (((player->unk_B08[1] - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38);
+ spC0 = (D_8090CD3C * (((player->unk_B0C - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38);
Matrix_Translate(0.0f, 0.0f, -1300.0f, MTXMODE_APPLY);
@@ -3003,9 +3003,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->actor.shape.rot.y = -0x8000;
if ((this->actor.projectedPos.z < 200.0f) && (this->actor.projectedPos.z > 0.0f)) {
- spC4.x = randPlusMinusPoint5Scaled(5.0f) + 130.0f;
+ spC4.x = Rand_CenteredFloat(5.0f) + 130.0f;
spC4.y = 40.0f;
- spC4.z = randPlusMinusPoint5Scaled(5.0f) + 1280.0f;
+ spC4.z = Rand_CenteredFloat(5.0f) + 1280.0f;
EnFishing_SpawnBubble(NULL, play->specialEffects, &spC4, Rand_ZeroFloat(0.02f) + 0.03f, 1);
}
@@ -3080,9 +3080,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
} else {
this->unk_150 = 1;
this->unk_172[0] = Rand_ZeroFloat(30.0f) + 10.0f;
- this->unk_1AC.x = randPlusMinusPoint5Scaled(300.0f);
+ this->unk_1AC.x = Rand_CenteredFloat(300.0f);
this->unk_1AC.y = (WATER_SURFACE_Y(play) - 50.0f) - Rand_ZeroFloat(50.0f);
- this->unk_1AC.z = randPlusMinusPoint5Scaled(300.0f);
+ this->unk_1AC.z = Rand_CenteredFloat(300.0f);
this->unk_188 = 1.0f;
this->unk_18C = 2000.0f;
}
@@ -3144,8 +3144,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
Math_ApproachF(&this->unk_1A8, 4096.0f, 1.0f, 256.0f);
if ((play->gameplayFrames % 32) == 0) {
- this->unk_1AC.x = randPlusMinusPoint5Scaled(600.0f);
- this->unk_1AC.z = randPlusMinusPoint5Scaled(600.0f);
+ this->unk_1AC.x = Rand_CenteredFloat(600.0f);
+ this->unk_1AC.z = Rand_CenteredFloat(600.0f);
this->unk_1AC.y = -120.0f;
}
} else if (sp124 > 50.0f) {
@@ -3600,7 +3600,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
for (spA2 = 0; spA2 < 100; spA2++) {
- Matrix_RotateYF(randPlusMinusPoint5Scaled(0.75f * M_PI) +
+ Matrix_RotateYF(Rand_CenteredFloat(0.75f * M_PI) +
BINANG_TO_RAD_ALT(this->actor.yawTowardsPlayer + 0x8000),
MTXMODE_NEW);
Matrix_MultVec3f(&sp10C, &sp100);
@@ -4067,7 +4067,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
func_80903C60(this, 1);
this->unk_17C = this->actor.velocity.y;
this->actor.velocity.y = 0.0f;
- this->unk_162 = randPlusMinusPoint5Scaled(32768.0f);
+ this->unk_162 = (s16)(s32)Rand_CenteredFloat(0x8000);
} else if ((this->actor.world.pos.y < WATER_SURFACE_Y(play)) &&
(this->actor.prevPos.y >= WATER_SURFACE_Y(play))) {
if (this->unk_17C < -5.0f) {
@@ -4128,10 +4128,10 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if (Rand_ZeroOne() < 0.5f) {
this->unk_15E = 0;
} else {
- this->unk_15E = (s16)randPlusMinusPoint5Scaled(32.0f) + 0x8000;
+ this->unk_15E = (s16)(s32)Rand_CenteredFloat(0x20) + 0x8000;
}
- this->unk_160 = (s16)randPlusMinusPoint5Scaled(16384.0f);
+ this->unk_160 = (s16)(s32)Rand_CenteredFloat(0x4000);
this->unk_188 = 1.0f;
this->unk_18C = 5000.0f;
this->unk_194 = 5000.0f;
@@ -4141,8 +4141,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((this->unk_150 == 5) && !(this->unk_154 & 1)) {
Vec3f pos;
- pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x;
- pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z;
+ pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x;
+ pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z;
pos.y = this->actor.floorHeight + 5.0f;
EnFishing_SpawnWaterDust(&this->actor.projectedPos, play->specialEffects, &pos,
(this->unk_1A4 * 0.005f) + 0.15f);
@@ -4160,9 +4160,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_1CA--;
for (i = 0; i < 2; i++) {
- pos.x = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.x;
- pos.y = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.y;
- pos.z = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.z;
+ pos.x = Rand_CenteredFloat(range) + this->actor.world.pos.x;
+ pos.y = Rand_CenteredFloat(range) + this->actor.world.pos.y;
+ pos.z = Rand_CenteredFloat(range) + this->actor.world.pos.z;
EnFishing_SpawnBubble(&this->actor.projectedPos, play->specialEffects, &pos, Rand_ZeroFloat(0.035f) + 0.04f,
0);
}
@@ -4225,7 +4225,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
void EnFishing_DrawFish(Actor* thisx, PlayState* play) {
EnFishing* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYF(BINANG_TO_RAD_ALT(this->unk_15A + this->actor.shape.rot.y), MTXMODE_APPLY);
@@ -4568,14 +4568,14 @@ void EnFishing_UpdateGroupFishes(PlayState* play) {
spD6 = Math_Atan2S_XY(dist, dy);
if ((dist < 10.0f) || (((fish->timer % 32) == 0) && (Rand_ZeroOne() > 0.5f))) {
- fish->unk_10.y = basePos[groupIndex].y + randPlusMinusPoint5Scaled(10.0f);
+ fish->unk_10.y = basePos[groupIndex].y + Rand_CenteredFloat(10.0f);
if (D_8090CF18 != 0) {
- fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(200.0f);
- fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(200.0f);
+ fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(200.0f);
+ fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(200.0f);
} else {
- fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(100.0f);
- fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(100.0f);
+ fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(100.0f);
+ fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(100.0f);
}
ripplePos = fish->pos;
@@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
((play->gameplayFrames % 2) == 0)) {
Vec3f pos;
- pos.x = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.x;
- pos.z = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.z;
+ pos.x = Rand_CenteredFloat(20.0f) + player->actor.world.pos.x;
+ pos.z = Rand_CenteredFloat(20.0f) + player->actor.world.pos.z;
pos.y = player->actor.floorHeight + 5.0f;
EnFishing_SpawnWaterDust(NULL, play->specialEffects, &pos, 0.5f);
}
@@ -5552,9 +5552,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
rot.z = (Camera_GetInputDirYaw(mainCam) * -(M_PI / 0x8000)) + rot.y;
for (i = 0; i < (u8)D_8090CCD0; i++) {
- pos.x = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.x;
+ pos.x = Rand_CenteredFloat(700.0f) + play->view.eye.x;
pos.y = (Rand_ZeroFloat(100.0f) + 150.0f) - 170.0f;
- pos.z = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.z;
+ pos.z = Rand_CenteredFloat(700.0f) + play->view.eye.z;
if (pos.z < 1160.0f) {
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &projectedPos, &sProjectedW);
@@ -5618,8 +5618,8 @@ void EnFishing_DrawOwner(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if ((this->actor.projectedPos.z < 1500.0f) &&
(fabsf(this->actor.projectedPos.x) < (100.0f + this->actor.projectedPos.z))) {
diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
index ffd456af4..3cf6385e0 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
@@ -1188,7 +1188,7 @@ void EnFloormas_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->collider.base.colType == COLTYPE_HARD) {
func_800AE2A0(play, &D_808D3958, this->unk_190 % 40, 40);
}
@@ -1213,7 +1213,7 @@ void func_808D3754(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->collider.base.colType == COLTYPE_HARD) {
func_800AE5E4(play, &D_808D3958, this->unk_190 % 40, 40);
}
diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h
index 002f9e67c..628cad4f6 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h
@@ -11,12 +11,12 @@ typedef void (*EnFloormasActionFunc)(struct EnFloormas*, PlayState*);
#define ENFLOORMAS_GET_7FFF(thisx) ((thisx)->params & 0x7FFF)
#define ENFLOORMAS_GET_8000(thisx) ((thisx)->params & 0x8000)
-enum {
+typedef enum {
/* 0x00 */ ENFLOORMAS_GET_7FFF_0,
/* 0x10 */ ENFLOORMAS_GET_7FFF_10 = 0x10,
/* 0x20 */ ENFLOORMAS_GET_7FFF_20 = 0x20,
- /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40,
-};
+ /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40
+} EnFloormasParam;
typedef struct EnFloormas {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
index 8130f3cc9..89bf08d7b 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
@@ -126,7 +126,7 @@ static Vec3f sShopItemPositions[3] = {
s32 EnFsn_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) {
+ if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -138,13 +138,17 @@ u16 EnFsn_GetWelcome(PlayState* play) {
switch (Player_GetMask(play)) {
case PLAYER_MASK_NONE:
return 0x29CC;
+
case PLAYER_MASK_DEKU:
return 0x29FC;
+
case PLAYER_MASK_GORON:
case PLAYER_MASK_ZORA:
return 0x29FD;
+
case PLAYER_MASK_KAFEIS_MASK:
return 0x2364;
+
default:
return 0x29FE;
}
@@ -153,64 +157,72 @@ u16 EnFsn_GetWelcome(PlayState* play) {
void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) {
switch (this->textId) {
case 0:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL)) {
this->textId = 0x29E0;
break;
} else {
this->textId = 0x29E4;
this->flags |= ENFSN_END_CONVERSATION;
- break;
}
+ break;
+
case 0x29E0:
if (INV_CONTENT(ITEM_MASK_KEATON) == ITEM_MASK_KEATON) {
this->flags |= ENFSN_GIVE_ITEM;
this->flags |= ENFSN_GAVE_LETTER_TO_MAMA;
this->getItemId = GI_LETTER_TO_MAMA;
- SET_WEEKEVENTREG(WEEKEVENTREG_80_10);
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL);
this->textId = 0x29F1;
break;
} else {
this->textId = 0x29E1;
- break;
}
+ break;
+
case 0x29E1:
this->textId = 0x29E2;
break;
+
case 0x29E2:
this->flags |= ENFSN_GIVE_ITEM;
this->flags |= ENFSN_GAVE_KEATONS_MASK;
this->getItemId = GI_MASK_KEATON;
this->textId = 0x29E3;
break;
+
case 0x29E3:
this->flags |= ENFSN_GIVE_ITEM;
this->flags |= ENFSN_GAVE_LETTER_TO_MAMA;
this->getItemId = GI_LETTER_TO_MAMA;
- SET_WEEKEVENTREG(WEEKEVENTREG_80_10);
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL);
this->textId = 0x29F1;
break;
+
case 0x29F1:
this->textId = 0x29E4;
this->flags |= ENFSN_END_CONVERSATION;
break;
+
+ default:
+ break;
}
Message_StartTextbox(play, this->textId, &this->actor);
if (this->flags & ENFSN_END_CONVERSATION) {
if (this->flags & ENFSN_GAVE_LETTER_TO_MAMA) {
this->flags &= ~ENFSN_GAVE_LETTER_TO_MAMA;
- func_80151BB4(play, 34);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL);
}
if (this->flags & ENFSN_GAVE_KEATONS_MASK) {
this->flags &= ~ENFSN_GAVE_KEATONS_MASK;
- func_80151BB4(play, 33);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK);
}
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
}
}
void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) &&
- this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
+ (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED)) {
Actor_ProcessTalkRequest(&this->actor, &play->state);
func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
if (ENFSN_IS_SHOP(&this->actor)) {
@@ -301,7 +313,7 @@ void EnFsn_CursorLeftRight(EnFsn* this) {
}
s16 EnFsn_GetThirdDayItemId(void) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && CURRENT_DAY == 3) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && (CURRENT_DAY == 3)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
return SI_BOMB_BAG_30_1;
}
@@ -314,16 +326,22 @@ s16 EnFsn_GetStolenItemId(u32 stolenItem) {
switch (stolenItem) {
case ITEM_BOTTLE:
return SI_BOTTLE;
+
case ITEM_SWORD_GREAT_FAIRY:
return SI_SWORD_GREAT_FAIRY;
+
case ITEM_SWORD_KOKIRI:
return SI_SWORD_KOKIRI;
+
case ITEM_SWORD_RAZOR:
return SI_SWORD_RAZOR;
+
case ITEM_SWORD_GILDED:
return SI_SWORD_GILDED;
+
+ default:
+ return SI_NONE;
}
- return SI_NONE;
}
s32 EnFsn_HasItemsToSell(void) {
@@ -407,7 +425,7 @@ s32 EnFsn_TestEndInteraction(EnFsn* this, PlayState* play, Input* input) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1;
Message_StartTextbox(play, this->actor.textId, &this->actor);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
this->actionFunc = EnFsn_SetupEndInteraction;
return true;
}
@@ -450,15 +468,18 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) {
}
Message_StartTextbox(play, this->actor.textId, &this->actor);
return true;
+
case 1:
func_8019F230();
this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1;
Message_StartTextbox(play, this->actor.textId, &this->actor);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
this->actionFunc = EnFsn_SetupEndInteraction;
return true;
+
+ default:
+ return false;
}
- return false;
}
s32 EnFsn_HasPlayerSelectedItem(EnFsn* this, PlayState* play, Input* input) {
@@ -487,10 +508,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) {
s8 stickY = CONTROLLER1(&play->state)->rel.stick_y;
if (this->stickAccumX == 0) {
- if (stickX > 30 || stickX < -30) {
+ if ((stickX > 30) || (stickX < -30)) {
this->stickAccumX = stickX;
}
- } else if (stickX <= 30 && stickX >= -30) {
+ } else if ((stickX <= 30) && (stickX >= -30)) {
this->stickAccumX = 0;
} else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions
this->stickAccumX = stickX;
@@ -503,10 +524,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) {
}
}
if (this->stickAccumY == 0) {
- if (stickY > 30 || stickY < -30) {
+ if ((stickY > 30) || (stickY < -30)) {
this->stickAccumY = stickY;
}
- } else if (stickY <= 30 && stickY >= -30) {
+ } else if ((stickY <= 30) && (stickY >= -30)) {
this->stickAccumY = 0;
} else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions
this->stickAccumY = stickY;
@@ -765,7 +786,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) {
this->animIndex = FSN_ANIM_SLAM_COUNTER_LOOP;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
} else {
- if (this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP && Animation_OnFrame(&this->skelAnime, 18.0f)) {
+ if ((this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP) && Animation_OnFrame(&this->skelAnime, 18.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
if (this->flags & ENFSN_CALM_DOWN) {
@@ -828,20 +849,26 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) {
this->actor.textId = 0x29CD;
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
+
case 0x29CD:
this->actor.textId = 0x29CE;
EnFsn_HandleLookToShopkeeperBuyingCutscene(this);
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
+
case 0x29CE:
this->actor.textId = 0xFF;
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = EnFsn_DeterminePrice;
break;
+
case 0x29CF:
player->exchangeItemId = PLAYER_IA_NONE;
this->actionFunc = EnFsn_SetupDeterminePrice;
break;
+
+ default:
+ break;
}
}
}
@@ -860,6 +887,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
}
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
+
case 0x29D2:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) {
this->actor.textId = 0x2A01;
@@ -870,6 +898,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
}
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
+
case 0x29D3:
case 0x29D4:
case 0x29FA:
@@ -877,6 +906,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
this->actor.textId = 0x29D5;
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
+
+ default:
+ break;
}
}
} else if (talkState == TEXT_STATE_CHOICE) {
@@ -892,6 +924,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = EnFsn_FaceShopkeeperSelling;
break;
+
case 1:
func_8019F208();
this->isSelling = false;
@@ -900,6 +933,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = EnFsn_StartBuying;
break;
+
+ default:
+ break;
}
}
}
@@ -941,7 +977,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) {
this->actor.textId = 0x29D1;
}
Message_StartTextbox(play, this->actor.textId, &this->actor);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
this->actionFunc = EnFsn_SetupEndInteraction;
}
}
@@ -965,21 +1001,29 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) {
case 5:
this->getItemId = GI_RUPEE_BLUE;
break;
+
case 10:
this->getItemId = GI_RUPEE_10;
break;
+
case 20:
this->getItemId = GI_RUPEE_RED;
break;
+
case 50:
this->getItemId = GI_RUPEE_PURPLE;
break;
+
case 200:
this->getItemId = GI_RUPEE_HUGE;
break;
+
+ default:
+ break;
}
this->actionFunc = EnFsn_GiveItem;
break;
+
case 1:
func_8019F230();
player->exchangeItemId = PLAYER_IA_NONE;
@@ -992,8 +1036,8 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) {
void EnFsn_GiveItem(EnFsn* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
if ((this->isSelling == true) && (this->items[this->cursorIndex]->getItemId == GI_MASK_ALL_NIGHT)) {
- func_80151BB4(play, 45);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
}
this->actor.parent = NULL;
if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) {
@@ -1009,7 +1053,7 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) {
void EnFsn_SetupResumeInteraction(EnFsn* this, PlayState* play) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (play->msgCtx.unk120B1 == 0) {
+ if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_HandleSetupResumeInteraction(this, play);
}
} else {
@@ -1146,6 +1190,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) {
case CANBUY_RESULT_SUCCESS_2:
func_8019F208();
SET_WEEKEVENTREG(WEEKEVENTREG_33_04);
+ // fallthrough
case CANBUY_RESULT_SUCCESS_1:
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
CutsceneManager_Stop(this->csId);
@@ -1171,16 +1216,21 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) {
this->itemIds[this->cursorIndex] = -1;
this->actionFunc = EnFsn_GiveItem;
break;
+
case CANBUY_RESULT_NEED_RUPEES:
play_sound(NA_SE_SY_ERROR);
Message_ContinueTextbox(play, 0x29F0);
this->actionFunc = EnFsn_PlayerCannotBuy;
break;
+
case CANBUY_RESULT_CANNOT_GET_NOW:
play_sound(NA_SE_SY_ERROR);
Message_ContinueTextbox(play, 0x29DD);
this->actionFunc = EnFsn_PlayerCannotBuy;
break;
+
+ default:
+ break;
}
}
@@ -1189,7 +1239,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) {
if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (play->msgCtx.unk120B1 == 0) {
+ if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
play->msgCtx.msgMode = 0x43;
@@ -1211,10 +1261,15 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) {
case 0:
EnFsn_HandleCanPlayerBuyItem(this, play);
break;
+
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
+ break;
+
+ default:
+ break;
}
}
}
@@ -1251,17 +1306,21 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = EnFsn_DeterminePrice;
break;
+
case 1:
func_8019F230();
this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1;
Message_StartTextbox(play, this->actor.textId, &this->actor);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
+ break;
+
+ default:
break;
}
}
} else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (play->msgCtx.unk120B1 == 0) {
+ if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
play->msgCtx.msgMode = 0x43;
@@ -1298,17 +1357,21 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = EnFsn_StartBuying;
break;
+
case 1:
func_8019F230();
this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1;
Message_StartTextbox(play, this->actor.textId, &this->actor);
- func_80151BB4(play, 3);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN);
+ break;
+
+ default:
break;
}
}
} else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if (play->msgCtx.unk120B1 == 0) {
+ if (play->msgCtx.bombersNotebookEventQueueCount == 0) {
EnFsn_EndInteraction(this, play);
} else {
play->msgCtx.msgMode = 0x43;
@@ -1341,6 +1404,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) {
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actor.textId = 0x29D6;
Message_StartTextbox(play, this->actor.textId, &this->actor);
+ //! FAKE:
if (play) {}
}
}
@@ -1470,7 +1534,7 @@ void EnFsn_DrawCursor(EnFsn* this, PlayState* play, f32 x, f32 y, f32 z, u8 draw
OPEN_DISPS(play->state.gfxCtx);
if (drawCursor != 0) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b,
this->cursorColor.a);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP,
@@ -1527,7 +1591,7 @@ void EnFsn_DrawStickDirectionPrompts(EnFsn* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (drawStickRightPrompt || drawStickLeftPrompt) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD,
@@ -1576,12 +1640,15 @@ s32 EnFsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
case FSN_LIMB_TORSO:
limbRotTableIdx = 0;
break;
+
case FSN_LIMB_LEFT_HAND:
limbRotTableIdx = 1;
break;
+
case FSN_LIMB_HEAD:
limbRotTableIdx = 2;
break;
+
default:
limbRotTableIdx = 9;
break;
@@ -1622,7 +1689,7 @@ void EnFsn_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
index 97f996ff1..bfc157fcb 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -171,7 +171,7 @@ void func_809619D0(EnFu* this, PlayState* play) {
}
for (i = 0; i < this->unk_542; i++) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
this->unk_520 = path->count;
@@ -426,23 +426,24 @@ void func_80962340(EnFu* this, PlayState* play) {
}
void func_80962588(EnFu* this, PlayState* play) {
- if (Message_ShouldAdvance(play) && (this->unk_552 == 0x2871)) {
- if (1) {}
- if (play->msgCtx.choiceIndex == 0) {
- if (gSaveContext.save.saveInfo.playerData.rupees >= 10) {
- func_8019F208();
- Rupees_ChangeBy(-10);
- func_80963DE4(this, play);
- } else {
- play_sound(NA_SE_SY_ERROR);
- Message_StartTextbox(play, 0x2873, &this->actor);
- this->unk_552 = 0x2873;
- }
+ if (!Message_ShouldAdvance(play) || (this->unk_552 != 0x2871)) {
+ return;
+ }
+
+ if (play->msgCtx.choiceIndex == 0) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 10) {
+ func_8019F208();
+ Rupees_ChangeBy(-10);
+ func_80963DE4(this, play);
} else {
- func_8019F230();
- Message_StartTextbox(play, 0x2872, &this->actor);
- this->unk_552 = 0x2872;
+ play_sound(NA_SE_SY_ERROR);
+ Message_StartTextbox(play, 0x2873, &this->actor);
+ this->unk_552 = 0x2873;
}
+ } else {
+ func_8019F230();
+ Message_StartTextbox(play, 0x2872, &this->actor);
+ this->unk_552 = 0x2872;
}
}
@@ -1385,7 +1386,7 @@ void EnFu_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0));
@@ -1449,7 +1450,7 @@ void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len) {
OPEN_DISPS(play->state.gfxCtx);
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
for (i = 0; i < len; i++, ptr++) {
if (ptr->unk_36 == 1) {
diff --git a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c
index e976e01dc..576e307b2 100644
--- a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c
+++ b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c
@@ -364,7 +364,7 @@ void func_80AD0340(EnFuKago* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(D_80AD061C); i++, ptr++) {
Matrix_Push();
@@ -390,7 +390,7 @@ void EnFuKago_Draw(Actor* thisx, PlayState* play) {
if (this->unk_33A == 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_fu_mato_DL_0006A0);
diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c
index c42278805..52e947dbd 100644
--- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c
+++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c
@@ -406,7 +406,7 @@ void func_80ACF1F4(EnFuMato* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < 2; i++) {
Matrix_Push();
@@ -449,7 +449,7 @@ void func_80ACF3F4(EnFuMato* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(D_80ACF63C); i++, ptr++) {
Matrix_Push();
@@ -471,7 +471,7 @@ void EnFuMato_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
index fe4e6636b..00b54400d 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
@@ -306,14 +306,14 @@ void func_809328F4(EnFz* this, PlayState* play, Vec3f* arg2, s32 arg3, f32 arg4)
sp88.b = 200;
for (i = 0; i < arg3; i++) {
- temp_f24 = randPlusMinusPoint5Scaled(0.3f) + 0.6f;
- temp_s1 = (s32)randPlusMinusPoint5Scaled(5.0f) + 12;
- spA8.x = randPlusMinusPoint5Scaled(arg4) + arg2->x;
+ temp_f24 = Rand_CenteredFloat(0.3f) + 0.6f;
+ temp_s1 = (s32)Rand_CenteredFloat(5.0f) + 12;
+ spA8.x = Rand_CenteredFloat(arg4) + arg2->x;
spA8.y = Rand_ZeroFloat(arg4) + arg2->y;
- spA8.z = randPlusMinusPoint5Scaled(arg4) + arg2->z;
- sp9C.x = randPlusMinusPoint5Scaled(10.0f);
+ spA8.z = Rand_CenteredFloat(arg4) + arg2->z;
+ sp9C.x = Rand_CenteredFloat(10.0f);
sp9C.y = Rand_ZeroFloat(10.0f) + 2.0f;
- sp9C.z = randPlusMinusPoint5Scaled(10.0f);
+ sp9C.z = Rand_CenteredFloat(10.0f);
EffectSsEnIce_Spawn(play, &spA8, temp_f24, &sp9C, &sp90, &sp8C, &sp88, temp_s1);
}
@@ -329,9 +329,9 @@ void func_80932AF4(EnFz* this) {
Vec3f sp2C;
if (!(this->unk_BC6 & 0xF)) {
- sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x;
- sp44.y = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.y + 30.0f;
- sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z;
+ sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x;
+ sp44.y = Rand_CenteredFloat(40.0f) + this->actor.world.pos.y + 30.0f;
+ sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z;
sp2C.x = sp2C.z = 0.0f;
sp2C.y = 0.1f;
sp38.x = sp38.y = sp38.z = 0.0f;
@@ -345,9 +345,9 @@ void func_80932BD4(EnFz* this) {
Vec3f sp2C;
if (!(this->unk_BC6 & 3)) {
- sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x;
+ sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x;
sp44.y = this->unk_BB4;
- sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z;
+ sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z;
sp2C.x = sp2C.z = 0.0f;
sp2C.y = 0.1f;
sp38.x = sp38.y = sp38.z = 0.0f;
@@ -401,7 +401,7 @@ void func_80932C98(EnFz* this, PlayState* play) {
}
if (this->unk_BCE != 0) {
- if (ENFZ_GET_8000(&this->actor) && (this->collider1.base.atFlags & AC_HIT)) {
+ if (ENFZ_GET_8000(&this->actor) && (this->collider1.base.atFlags & AT_HIT)) {
this->unk_BCD = 0;
this->unk_BBC = 0.0f;
this->collider1.base.acFlags &= ~AC_HIT;
@@ -846,7 +846,7 @@ void EnFz_Draw(Actor* thisx, PlayState* play) {
if (this->unk_BD7 != 0) {
func_800B8118(&this->actor, play, 0);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, play->state.frames % 128, 0x20, 0x20, 1, 0,
@@ -993,7 +993,7 @@ void func_80934464(EnFz* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER);
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN);
diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.h b/src/overlays/actors/ovl_En_Fz/z_en_fz.h
index 539560c88..ac1cb0648 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.h
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.h
@@ -13,12 +13,12 @@ typedef void (*EnFzUnkFunc)(struct EnFz*);
#define ENFZ_GET_4000(thisx) ((thisx)->params & 0x4000)
#define ENFZ_GET_8000(thisx) ((thisx)->params & 0x8000)
-enum {
+typedef enum {
/* 0 */ ENFZ_F_0,
/* 1 */ ENFZ_F_1,
/* 2 */ ENFZ_F_2,
- /* 3 */ ENFZ_F_3,
-};
+ /* 3 */ ENFZ_F_3
+} EnFzParam;
typedef struct {
/* 0x00 */ u8 unk_00;
diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h
index 04d9c7159..5602a3b4f 100644
--- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h
+++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h
@@ -10,8 +10,8 @@ typedef void (*EnGakufuActionFunc)(struct EnGakufu*, PlayState*);
#define GAKUFU_GET_TYPE(thisx) ((thisx)->params & 0xF)
typedef enum {
- /* 0x0 */ GAKUFU_TERMINA_FIELD,
- /* 0x1 */ GAKUFU_MILK_BAR
+ /* 0 */ GAKUFU_TERMINA_FIELD,
+ /* 1 */ GAKUFU_MILK_BAR
} GakufuType;
typedef struct EnGakufu {
diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c
index 9f45748df..b9936c53c 100644
--- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c
+++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c
@@ -181,7 +181,7 @@ void EnGamelupy_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeTextures[this->rupeeIndex]));
diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
index 9c2d7fe37..11fa876d4 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
@@ -615,24 +615,24 @@ void func_80B10868(EnGb2* this, PlayState* play) {
}
void func_80B10924(EnGb2* this, PlayState* play) {
- s32 sp24;
+ s32 getItemId;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_40)) {
- sp24 = 5;
+ getItemId = GI_RUPEE_PURPLE;
} else {
- sp24 = 12;
+ getItemId = GI_HEART_PIECE;
}
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- if (sp24 == 12) {
+ if (getItemId == GI_HEART_PIECE) {
SET_WEEKEVENTREG(WEEKEVENTREG_54_40);
} else {
Rupees_ChangeBy(50);
}
this->actionFunc = func_80B109DC;
} else {
- Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f);
}
}
@@ -1007,7 +1007,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->unk_28A == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
@@ -1016,7 +1016,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGb2_OverrideLimbDraw, EnGb2_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, this->unk_28A);
diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
index 87cee9e99..a257ab3d4 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
@@ -10,11 +10,11 @@ typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*);
#define ENGB2_GET_7(thisx) ((thisx)->params & 7)
#define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3)
-enum {
+typedef enum {
/* 0 */ ENGB2_7_0,
/* 1 */ ENGB2_7_1,
- /* 2 */ ENGB2_7_2,
-};
+ /* 2 */ ENGB2_7_2
+} EnGb2Param;
typedef struct EnGb2 {
/* 0x0000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
index 6cfbb4718..c78f14048 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
@@ -69,8 +69,8 @@ typedef enum {
/* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING,
/* 7 */ GERUDO_WHITE_ANIM_SALUTE,
/* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT,
- /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY,
-} GerudoWhiteAnimations;
+ /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY
+} GerudoWhiteAnimation;
void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames);
void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play);
@@ -191,8 +191,8 @@ void EnGe1_SetupPath(EnGe1* this, PlayState* play) {
this->curPointIndex = 0;
- if (GERUDO_WHITE_GET_PATH(&this->picto.actor) != 0x3F) {
- this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH(&this->picto.actor)];
+ if (GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_WHITE_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor)];
if (this->path != NULL) {
point = Lib_SegmentedToVirtual(this->path->points);
Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, point);
@@ -441,6 +441,9 @@ void EnGe1_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLs[this->hairstyle]);
Matrix_MultVec3f(&sInitialFocusPos, &this->picto.actor.focus.pos);
break;
+
+ default:
+ break;
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -457,7 +460,7 @@ void EnGe1_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, &this->picto.actor);
diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
index 63a2a3c7f..f1684315b 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
@@ -6,7 +6,9 @@
#include "objects/object_ge1/object_ge1.h"
#define GERUDO_WHITE_GET_TYPE(thisx) (((thisx)->params) & 0xF)
-#define GERUDO_WHITE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10)
+#define GERUDO_WHITE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10)
+
+#define GERUDO_WHITE_PATH_INDEX_NONE 0x3F
//! Only the first type is used
typedef enum {
diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
index 922472f9a..facc4def2 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -200,8 +200,8 @@ s32 EnGe2_LookForPlayer(PlayState* play, Actor* actor, Vec3f* pos, s16 yaw, s16
* @return true if path is set up in reverse
*/
s32 EnGe2_SetupPath(EnGe2* this, PlayState* play) {
- if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) {
- this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)];
+ if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)];
if (this->path != NULL) {
Path* path = this->path;
Vec3s* points = Lib_SegmentedToVirtual(path->points);
@@ -228,14 +228,14 @@ void EnGe2_GetNextPath(EnGe2* this, PlayState* play) {
Path* curPath;
Path* nextPath;
Vec3s* points;
- u8 unk1;
+ u8 nextPathIndex;
this->curPointIndex = 0;
- if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) {
- curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)];
- unk1 = curPath->unk1;
- nextPath = &play->setupPathList[unk1];
+ if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) {
+ curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)];
+ nextPathIndex = curPath->additionalPathIndex;
+ nextPath = &play->setupPathList[nextPathIndex];
this->path = nextPath;
points = Lib_SegmentedToVirtual(nextPath->points);
this->picto.actor.world.pos.x = points[0].x;
@@ -252,8 +252,8 @@ void EnGe2_SetupBlownAwayPath(EnGe2* this, PlayState* play) {
this->curPointIndex = 0;
- if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) {
- this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)];
+ if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)];
if (this->path != NULL) {
points = Lib_SegmentedToVirtual(this->path->points);
Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, points);
@@ -767,7 +767,7 @@ void EnGe2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
func_800B8050(&this->picto.actor, play, 0);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
index 0a85e3bfe..ee0d99d00 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
@@ -11,12 +11,12 @@ typedef void (*EnGe2ActionFunc)(struct EnGe2*, PlayState*);
#define GERUDO_PURPLE_GET_EXIT(thisx) (((thisx)->params) & 0x1F) //!< Exit to send Player to when caught
#define GERUDO_PURPLE_GET_TYPE(thisx) (((thisx)->params & 0xE0) >> 5)
-#define GERUDO_PURPLE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10)
+#define GERUDO_PURPLE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10)
-#define GERUDO_PURPLE_PARAMS(path, type, exit) (((path) & 0x1F) | (((type) & 7) << 5) | (((exit) & 0x3F) << 10))
+#define GERUDO_PURPLE_PARAMS(exit, type, pathIndex) (((exit) & 0x1F) | (((type) & 7) << 5) | (((pathIndex) & 0x3F) << 10))
#define GERUDO_PURPLE_EXIT_NONE 0x1F
-#define GERUDO_PURPLE_PATH_NONE 0x3F
+#define GERUDO_PRUPLE_PATH_INDEX_NONE 0x3F
typedef enum {
/* 0 */ GERUDO_PURPLE_TYPE_CUTSCENE,
diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
index 4b5e8e311..6621ecc93 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
@@ -135,17 +135,17 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
};
@@ -951,7 +951,7 @@ void EnGeg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 17) {
if (!(this->unk_230 & 0x40)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -1045,7 +1045,7 @@ void func_80BB3BE0(EnGeg* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BB4088[this->unk_23E]));
gDPPipeSync(POLY_OPA_DISP++);
@@ -1062,7 +1062,7 @@ void func_80BB3CB4(EnGeg* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset,
this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c
index 81d1c6bb6..e9e37ddb4 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c
@@ -527,7 +527,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -551,7 +551,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -604,7 +604,7 @@ void func_80B3610C(EnGgStruct* ptr, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -791,7 +791,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) {
}
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2]));
@@ -799,7 +799,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_308 == 1)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2]));
@@ -807,7 +807,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_XLU_DISP);
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.h b/src/overlays/actors/ovl_En_Gg/z_en_gg.h
index cc744cffa..802024897 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h
@@ -21,7 +21,7 @@ typedef struct EnGgStruct {
/* 0x40 */ s32 unk_40;
/* 0x44 */ s32 unk_44;
/* 0x48 */ u8 unk_48;
-} EnGgStruct; // size == 0x4C
+} EnGgStruct; // size = 0x4C
typedef struct EnGg {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
index fdd099fff..3540b1a24 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
@@ -183,14 +183,14 @@ void func_80B3B0A0(EnGg2* this, PlayState* play) {
void func_80B3B120(EnGg2* this, PlayState* play) {
Vec3s sp30;
- if (this->unk_1D8 != NULL) {
- func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30);
+ if (this->path != NULL) {
+ func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30);
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1);
this->actor.world.rot.x = -this->actor.shape.rot.x;
- if (func_80B3B648(this, this->unk_1D8, this->unk_1DC) != 0) {
- if (this->unk_1DC >= (this->unk_1D8->count - 2)) {
+ if (func_80B3B648(this, this->path, this->unk_1DC) != 0) {
+ if (this->unk_1DC >= (this->path->count - 2)) {
this->actionFunc = func_80B3AE60;
this->actor.speed = 0.0f;
} else {
@@ -227,15 +227,15 @@ void func_80B3B294(EnGg2* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_20_10);
}
- if (this->unk_1D8 != NULL) {
- func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30);
+ if (this->path != NULL) {
+ func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30);
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1);
this->actor.world.rot.x = -this->actor.shape.rot.x;
- if (func_80B3B648(this, this->unk_1D8, this->unk_1DC)) {
- if (this->unk_1DC < (this->unk_1D8->count - 1)) {
+ if (func_80B3B648(this, this->path, this->unk_1DC)) {
+ if (this->unk_1DC < (this->path->count - 1)) {
this->unk_1DC++;
} else {
this->unk_2F1 = 1;
@@ -310,7 +310,7 @@ s32 func_80B3B648(EnGg2* this, Path* path, s32 arg2_) {
phi_f14 = points[arg2 + 1].z - points[arg2 - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
@@ -369,7 +369,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable,
this->morphTable, 20);
- this->unk_1D8 = SubS_GetPathByIndex(play, ENGG2_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENGG2_GET_PATH_INDEX(&this->actor), ENGG2_PATH_INDEX_NONE);
this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->unk_2F0 = 0;
this->unk_2F1 = 0;
@@ -479,7 +479,7 @@ void EnGg2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_2F0 == 1)) {
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B3C0AC[this->unk_2EA]));
diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
index ff7aec4a6..83b4bad42 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
@@ -7,14 +7,16 @@ struct EnGg2;
typedef void (*EnGg2ActionFunc)(struct EnGg2*, PlayState*);
-#define ENGG2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENGG2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENGG2_PATH_INDEX_NONE 0x3F
typedef struct EnGg2 {
/* 0x000 */ Actor actor;
/* 0x144 */ UNK_TYPE1 unk144[0x4C];
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnGg2ActionFunc actionFunc;
- /* 0x1D8 */ Path* unk_1D8;
+ /* 0x1D8 */ Path* path;
/* 0x1DC */ s32 unk_1DC;
/* 0x1E0 */ Vec3s unk_1E0;
/* 0x1E6 */ Vec3s unk_1E6;
diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
index 07c01b288..29f7059a5 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
@@ -114,6 +114,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
return true;
}
break;
+
case GIANT_TYPE_MOUNTAIN_TERMINA_FIELD:
case GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING:
@@ -122,6 +123,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
return true;
}
break;
+
case GIANT_TYPE_OCEAN_TERMINA_FIELD:
case GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING:
@@ -130,6 +132,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
return true;
}
break;
+
case GIANT_TYPE_CANYON_TERMINA_FIELD:
case GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING:
@@ -138,6 +141,9 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
return true;
}
break;
+
+ default:
+ break;
}
return false;
@@ -229,11 +235,13 @@ void EnGiant_Init(Actor* thisx, PlayState* play) {
case 10:
this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE2 - SFX_FLAG;
break;
+
case 1:
case 2:
case 3:
this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE1 - SFX_FLAG;
break;
+
default:
this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE0 - SFX_FLAG;
break;
@@ -361,47 +369,56 @@ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) {
case GIANT_CUE_ID_LOOKING_UP:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START);
break;
+
case GIANT_CUE_ID_RAISING_ARMS:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START);
break;
+
case GIANT_CUE_ID_STRUGGLING:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START);
break;
+
case GIANT_CUE_ID_FALLING_OVER:
// Unused
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER);
break;
+
case GIANT_CUE_ID_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP);
break;
+
case GIANT_CUE_ID_DONE_TALKING:
case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
+
case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP);
break;
+
+ default:
+ break;
}
SkelAnime_Update(&this->skelAnime);
}
}
void EnGiant_PlaySound(EnGiant* this) {
- if (this->actor.draw != NULL && this->alpha > 0) {
- if (this->animIndex == GIANT_ANIM_WALKING_LOOP &&
+ if ((this->actor.draw != NULL) && (this->alpha > 0)) {
+ if ((this->animIndex == GIANT_ANIM_WALKING_LOOP) &&
(Animation_OnFrame(&this->skelAnime, 40.0f) || Animation_OnFrame(&this->skelAnime, 100.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_WALK);
}
- if (this->animIndex == GIANT_ANIM_FALLING_OVER && Animation_OnFrame(&this->skelAnime, 40.0f)) {
+ if ((this->animIndex == GIANT_ANIM_FALLING_OVER) && Animation_OnFrame(&this->skelAnime, 40.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_VOICE_FAIL);
}
- if (this->sfxId != 0xFFFF &&
- ((this->animIndex == GIANT_ANIM_BIG_CALL_START && this->skelAnime.curFrame >= 18.0f) ||
- this->animIndex == GIANT_ANIM_BIG_CALL_LOOP)) {
+ if ((this->sfxId != 0xFFFF) &&
+ (((this->animIndex == GIANT_ANIM_BIG_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) ||
+ (this->animIndex == GIANT_ANIM_BIG_CALL_LOOP))) {
func_800B9010(&this->actor, this->sfxId);
}
- if ((this->animIndex == GIANT_ANIM_SMALL_CALL_START && this->skelAnime.curFrame >= 18.0f) ||
- this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP) {
+ if (((this->animIndex == GIANT_ANIM_SMALL_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) ||
+ (this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP)) {
func_800B9010(&this->actor, NA_SE_EV_KYOJIN_SIGN - SFX_FLAG);
}
}
@@ -509,7 +526,7 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->alpha >= 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex]));
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
Scene_SetRenderModeXlu(play, 0, 1);
@@ -517,10 +534,10 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) {
this->skelAnime.dListCount, NULL, EnGiant_PostLimbDrawOpa, thisx);
} else if (this->alpha > 0) {
if (this->alpha >= 129) {
- func_8012C2B4(POLY_XLU_DISP++);
+ Gfx_SetupDL71(POLY_XLU_DISP++);
Scene_SetRenderModeXlu(play, 2, 2);
} else {
- func_8012C304(POLY_XLU_DISP++);
+ Gfx_SetupDL72(POLY_XLU_DISP++);
Scene_SetRenderModeXlu(play, 1, 2);
}
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex]));
diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.h b/src/overlays/actors/ovl_En_Giant/z_en_giant.h
index 45e89dd55..5842a62da 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h
@@ -35,7 +35,7 @@ typedef enum {
/* 12 */ GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE,
/* 13 */ GIANT_TYPE_CANYON_CLOCK_TOWER_FAILURE,
/* 14 */ GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE,
- /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE,
+ /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE
} GiantType;
struct EnGiant;
diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
index fba0c1118..b40c2287a 100644
--- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
+++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
@@ -47,7 +47,7 @@ typedef enum {
/* 1 */ GINKO_ANIM_SITTING,
/* 2 */ GINKO_ANIM_REACHING,
/* 3 */ GINKO_ANIM_AMAZED,
- /* 4 */ GINKO_ANIM_ADVERTISING,
+ /* 4 */ GINKO_ANIM_ADVERTISING
} GinkoAnimation;
static AnimationInfo sAnimationInfo[] = {
@@ -668,7 +668,7 @@ void EnGinkoMan_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0));
diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
index 90e449be3..1859cf83f 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -234,7 +234,7 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) {
}
s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) {
- if (CUR_CAPACITY(UPG_NUTS) != 0 && CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT)) {
+ if ((CUR_CAPACITY(UPG_NUTS) != 0) && (CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT))) {
return CANBUY_RESULT_NO_ROOM;
}
if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
@@ -257,7 +257,7 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) {
}
s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) {
- if (CUR_CAPACITY(UPG_STICKS) != 0 && AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) {
+ if ((CUR_CAPACITY(UPG_STICKS) != 0) && (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS))) {
return CANBUY_RESULT_NO_ROOM;
}
if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
@@ -385,18 +385,24 @@ void EnGirlA_BuyBottleItem(PlayState* play, EnGirlA* this) {
case SI_POTION_RED_6:
Item_Give(play, ITEM_POTION_RED);
break;
+
case SI_POTION_GREEN_1:
case SI_POTION_GREEN_2:
case SI_POTION_GREEN_3:
Item_Give(play, ITEM_POTION_GREEN);
break;
+
case SI_POTION_BLUE:
Item_Give(play, ITEM_POTION_BLUE);
break;
+
case SI_FAIRY_1:
case SI_FAIRY_2:
Item_Give(play, ITEM_FAIRY);
break;
+
+ default:
+ break;
}
Rupees_ChangeBy(-play->msgCtx.unk1206C);
}
@@ -411,9 +417,13 @@ void EnGirlA_BuyNuts(PlayState* play, EnGirlA* this) {
case 5:
Item_Give(play, ITEM_NUTS_5);
break;
+
case 10:
Item_Give(play, ITEM_NUTS_10);
break;
+
+ default:
+ break;
}
Rupees_ChangeBy(-play->msgCtx.unk1206C);
}
@@ -439,12 +449,17 @@ void EnGirlA_BuyBombBag(PlayState* play, EnGirlA* this) {
case 20:
Item_Give(play, ITEM_BOMB_BAG_20);
break;
+
case 21:
Item_Give(play, ITEM_BOMB_BAG_30);
break;
+
case 22:
Item_Give(play, ITEM_BOMB_BAG_40);
break;
+
+ default:
+ break;
}
Rupees_ChangeBy(-play->msgCtx.unk1206C);
}
@@ -461,15 +476,21 @@ void EnGirlA_BuyBombs(PlayState* play, EnGirlA* this) {
case 5:
Item_Give(play, ITEM_BOMBS_5);
break;
+
case 10:
Item_Give(play, ITEM_BOMBS_10);
break;
+
case 20:
Item_Give(play, ITEM_BOMBS_20);
break;
+
case 30:
Item_Give(play, ITEM_BOMBS_30);
break;
+
+ default:
+ break;
}
Rupees_ChangeBy(-play->msgCtx.unk1206C);
}
@@ -484,15 +505,21 @@ void EnGirlA_BuySword(PlayState* play, EnGirlA* this) {
case 1:
Item_Give(play, ITEM_SWORD_KOKIRI);
break;
+
case 2:
Item_Give(play, ITEM_SWORD_RAZOR);
break;
+
case 3:
Item_Give(play, ITEM_SWORD_GILDED);
break;
+
case 4:
Item_Give(play, ITEM_SWORD_GREAT_FAIRY);
break;
+
+ default:
+ break;
}
Rupees_ChangeBy(-play->msgCtx.unk1206C);
}
diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
index f61b50b5a..e155ef6df 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
@@ -48,16 +48,16 @@ typedef struct EnGirlA {
} EnGirlA; // size = 0x1CC
typedef enum {
- /* 0x0 */ CANBUY_RESULT_SUCCESS_1,
- /* 0x1 */ CANBUY_RESULT_SUCCESS_2,
- /* 0x2 */ CANBUY_RESULT_NO_ROOM,
- /* 0x3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE,
- /* 0x4 */ CANBUY_RESULT_NEED_RUPEES,
- /* 0x5 */ CANBUY_RESULT_CANNOT_GET_NOW,
- /* 0x6 */ CANBUY_RESULT_CANNOT_GET_NOW_2,
- /* 0x7 */ CANBUY_RESULT_NO_ROOM_2,
- /* 0x8 */ CANBUY_RESULT_ALREADY_HAVE,
- /* 0x9 */ CANBUY_RESULT_HAVE_BETTER
+ /* 0 */ CANBUY_RESULT_SUCCESS_1,
+ /* 1 */ CANBUY_RESULT_SUCCESS_2,
+ /* 2 */ CANBUY_RESULT_NO_ROOM,
+ /* 3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE,
+ /* 4 */ CANBUY_RESULT_NEED_RUPEES,
+ /* 5 */ CANBUY_RESULT_CANNOT_GET_NOW,
+ /* 6 */ CANBUY_RESULT_CANNOT_GET_NOW_2,
+ /* 7 */ CANBUY_RESULT_NO_ROOM_2,
+ /* 8 */ CANBUY_RESULT_ALREADY_HAVE,
+ /* 9 */ CANBUY_RESULT_HAVE_BETTER
} EnGirlACanBuyResult;
typedef enum {
diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c
index 40cf72a98..8697f5d74 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c
@@ -374,7 +374,7 @@ s32 func_80B50C78(EnGk* this, Path* path, s32 arg2_) {
phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
@@ -534,8 +534,6 @@ void func_80B51510(EnGk* this, PlayState* play) {
s32 pad;
s32 cueChannel;
- if (this) {}
-
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_479)) {
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_479);
@@ -577,6 +575,9 @@ void func_80B51510(EnGk* this, PlayState* play) {
case 7:
Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor));
break;
+
+ default:
+ break;
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_31A);
}
@@ -830,7 +831,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) {
}
void func_80B51FD0(EnGk* this, PlayState* play) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (this->unk_1E4 & 2) {
func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
} else {
@@ -897,7 +898,7 @@ void func_80B5227C(EnGk* this, PlayState* play) {
func_800B14D4(play, 20.0f, &this->actor.home.pos);
this->unk_350 = 60;
if (!(this->unk_1E4 & 0x80)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON);
}
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
this->unk_350 = 0x4000;
@@ -955,22 +956,22 @@ void func_80B52430(EnGk* this, PlayState* play) {
}
void func_80B5253C(EnGk* this, PlayState* play) {
- s32 sp24;
+ s32 getItemId;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08)) {
- sp24 = 0x93;
+ getItemId = GI_GOLD_DUST_2;
} else {
- sp24 = 0x6A;
+ getItemId = GI_GOLD_DUST;
}
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- if (sp24 == 0x6A) {
+ if (getItemId == GI_GOLD_DUST) {
SET_WEEKEVENTREG(WEEKEVENTREG_41_08);
}
this->actionFunc = func_80B525E0;
} else {
- Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f);
}
}
@@ -987,7 +988,7 @@ void func_80B525E0(EnGk* this, PlayState* play) {
void func_80B52654(EnGk* this, PlayState* play) {
this->unk_350 += 0x400;
if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON);
}
this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f;
@@ -1025,7 +1026,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
} else {
this->csId = this->actor.csId;
- this->path = SubS_GetPathByIndex(play, ENGK_GET_F0(&this->actor), 0xF);
+ this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE);
this->actionFunc = func_80B51760;
}
} else if (play->sceneId == SCENE_GORONRACE) {
@@ -1044,7 +1045,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
} else if (ENGK_GET_F(&this->actor) == ENGK_F_2) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFunc = func_80B51FD0;
this->actor.draw = NULL;
this->actor.flags |= ACTOR_FLAG_10;
@@ -1052,7 +1053,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
} else {
Actor_Kill(&this->actor);
}
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->unk_2E4 = 0;
this->csId = this->actor.csId;
this->actor.flags |= ACTOR_FLAG_10;
@@ -1076,7 +1077,7 @@ void EnGk_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((ENGK_GET_F(&this->actor) == ENGK_F_1) ||
- ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
+ ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) {
func_80B507A0(this, play);
SkelAnime_Update(&this->skelAnime);
Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos);
@@ -1233,16 +1234,16 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
- if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
Matrix_RotateXS(-0x4000, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006688);
gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006680);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
pos = this->actor.world.pos;
scale.x = 0.2f;
@@ -1258,7 +1259,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
EnGk_TransformLimbDraw, &this->actor);
if (ENGK_GET_F(&this->actor) != ENGK_F_2) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) ||
(this->unk_2E4 == 4)) {
pos.x = this->actor.world.pos.x - 15.0f;
diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h
index 0f74c1d65..130b97675 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h
@@ -8,17 +8,19 @@ struct EnGk;
typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*);
#define ENGK_GET_F(thisx) ((thisx)->params & 0xF)
-#define ENGK_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4)
+#define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4)
#define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8)
-enum {
+#define ENGK_PATH_INDEX_NONE 0xF
+
+typedef enum {
/* 0 */ ENGK_F_0,
/* 1 */ ENGK_F_1,
/* 2 */ ENGK_F_2,
/* 3 */ ENGK_F_3,
/* 4 */ ENGK_F_4,
- /* 5 */ ENGK_F_5,
-};
+ /* 5 */ ENGK_F_5
+} EnGkParam;
typedef struct EnGk {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
index f31dd7cd2..bcdb20431 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
@@ -973,7 +973,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
}
s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 arg3, s16 arg4) {
- u8 sp4F = ENGM_GET_FF(&this->actor);
+ u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor);
Vec3s* sp48;
Vec3f sp3C;
Vec3f sp30;
@@ -985,7 +985,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u
actor = func_8094DEE0(this, play, arg3, arg4);
if (D_80951A0C[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]);
}
if ((actor != NULL) && (actor->update != NULL)) {
@@ -1004,7 +1004,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u
s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp56 = SCHEDULE_TIME_NOW;
- u8 sp55 = ENGM_GET_FF(&this->actor);
+ u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor);
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
@@ -1016,10 +1016,10 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
door = func_8094DF90(play, scheduleOutput->result);
if (D_80951A0C[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp55, D_80951A0C[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]);
}
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if (this->timePath != NULL) {
sp4C = Lib_SegmentedToVirtual(this->timePath->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@@ -1029,7 +1029,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
- if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) {
+ if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) {
this->unk_261 = -75;
} else {
this->unk_261 = 75;
@@ -1051,14 +1051,14 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp2E = SCHEDULE_TIME_NOW;
u16 phi_v1;
- u8 sp2B = ENGM_GET_FF(&this->actor);
+ u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor);
u16 tmp;
s16 pad;
s32 ret = false;
this->timePath = NULL;
if (D_80951A0C[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80951A0C[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]);
}
if ((this->timePath != NULL) && (this->timePath->count < 3)) {
@@ -1152,7 +1152,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
static Vec3f D_80951D9C = { 64.0f, 0.0f, -122.0f };
- u8 sp4F = ENGM_GET_FF(&this->actor);
+ u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor);
Vec3s* sp48;
Vec3f sp3C;
Vec3f sp30;
@@ -1162,7 +1162,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
if (D_80951A0C[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]);
}
if (this->timePath != NULL) {
@@ -1450,7 +1450,7 @@ s32 func_80950804(EnGm* this, PlayState* play) {
door = func_8094DF90(play, this->unk_258);
if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) {
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if ((this->unk_3BA / (f32)this->unk_3B8) <= 0.9f) {
door->unk_1A7 = this->unk_261;
} else {
@@ -1832,7 +1832,7 @@ void EnGm_Draw(Actor* thisx, PlayState* play) {
if ((this->unk_258 != 0) && (this->unk_262 >= 0)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80951E30[this->unk_3CE]));
diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h
index 6eede0744..760c9d91c 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h
@@ -9,7 +9,7 @@ typedef void (*EnGmActionFunc)(struct EnGm*, PlayState*);
typedef s32 (*EnGmUnkFunc)(struct EnGm*, PlayState*);
typedef void (*EnGmUnkFunc2)(struct EnGm*, PlayState*);
-#define ENGM_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define ENGM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
typedef struct EnGm {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c
index 3f993ae3a..ec5905594 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.c
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.c
@@ -2,41 +2,135 @@
* File: z_en_go.c
* Overlay: ovl_En_Go
* Description: Goron
+ *
+ * This actor handles multiple (but not all) Gorons. The Gorons included are:
+ * - Athletics Goron: Gorons in the racetrack performing stretches before/after a race.
+ * - Spectator Goron: Gorons scattered throughout the racetrack watching the race.
+ * - Gatekeeper Goron: The Gatekeeper of the Goron Shrine.
+ * - Graveyard Goron: Both Gorons outside the Goron Graveyard (one of which is initially frozen).
+ * - Shrine Goron: Gorons in the Goron Shrine (specifically, one in the elders room, one outside the elder's room, and
+ * one outside the shop, not all Gorons in the Goron Shrine are covered by this actor).
+ * - Medigoron: The Powder Keg making Medigoron in Goron Village.
*/
-
#include "z_en_go.h"
#include "z64quake.h"
-#include "objects/object_oF1d_map/object_oF1d_map.h"
+#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "objects/object_hakugin_demo/object_hakugin_demo.h"
#include "objects/object_taisou/object_taisou.h"
#include "objects/gameplay_keep/gameplay_keep.h"
+#include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000)
-
#define THIS ((EnGo*)thisx)
+#define ENGO_STANDING_Y_OFFSET 0.0f // Actor shape offset in use when a Goron is in any standing state.
+#define ENGO_ROLLEDUP_Y_OFFSET 14.0f // Actor shape offset in use when a Goron is "rolled up".
+#define ENGO_SNOWBALL_Y_OFFSET 46.0f // Actor shape offset in use when a Goron is in a snowball.
+
+#define ENGO_NORMAL_SCALE 0.01f // "Unit Scale" of a normal Goron.
+#define ENGO_MEDIGORON_SCALE_MULTIPLIER 5.0f // Scale factor for the Medigoron in the Powder Keg Shop.
+
+#define ENGO_POUND_INITIAL_RISE_VEL 10.0f // Velocity at which the Gatekeeper's pound surges into the air.
+#define ENGO_POUND_INITIAL_FALL_VEL -6.0f // Velocity at which the Gatekeeper's pound surges to the ground.
+
+#define ENGO_DUST_STEAM_LIFETIME 16 // Lifetime in frames of the Dust and Steam effects.
+
+#define ENGO_FLAG_ENGAGED (1 << 3)
+#define ENGO_FLAG_FACE_TARGET (1 << 4)
+#define ENGO_FLAG_EYES_OPEN (1 << 5)
+#define ENGO_FLAG_LOST_ATTENTION (1 << 6)
+#define ENGO_FLAG_STANDING (1 << 7)
+#define ENGO_FLAG_SNOWBALLED (1 << 8)
+#define ENGO_FLAG_ROLLED_UP (1 << 9)
+#define ENGO_FLAG_FROZEN (1 << 10)
+#define ENGO_FLAG_HIT_OTHER (1 << 11)
+#define ENGO_FLAG_HIT_BY_OTHER (1 << 12)
+#define ENGO_FLAG_HIT_OBJ (1 << 13)
+#define ENGO_FLAG_ROLLING_UP (1 << 14)
+#define ENGO_FLAG_UNROLLING (1 << 15)
+
void EnGo_Init(Actor* thisx, PlayState* play);
void EnGo_Destroy(Actor* thisx, PlayState* play);
void EnGo_Update(Actor* thisx, PlayState* play);
+void EnGo_Draw(Actor* thisx, PlayState* play);
-void func_80A14798(EnGo* this, PlayState* play);
-void func_80A149B0(EnGo* this, PlayState* play);
-void func_80A14B30(EnGo* this, PlayState* play);
-void func_80A14E14(EnGo* this, PlayState* play);
-void func_80A14E74(EnGo* this, PlayState* play);
-void func_80A14EB0(EnGo* this, PlayState* play);
-void func_80A14FC8(EnGo* this, PlayState* play);
-void func_80A153FC(EnGo* this, PlayState* play);
-void func_80A157C4(EnGo* this, PlayState* play);
-void func_80A15FEC(Actor* thisx, PlayState* play);
+typedef enum EnGoEyeTexture {
+ /* 0 */ ENGO_EYETEX_OPEN,
+ /* 1 */ ENGO_EYETEX_HALF,
+ /* 2 */ ENGO_EYETEX_CLOSED,
+ /* 3 */ ENGO_EYETEX_HALF2,
+ /* 4 */ ENGO_EYETEX_CLOSED2
+} EnGoEyeTexture;
-static s32 D_80A16100[] = {
+typedef enum EnGoSleepState {
+ /* -1 */ ENGO_ASLEEP_NEG = -1,
+ /* 0 */ ENGO_AWAKE,
+ /* 1 */ ENGO_ASLEEP_POS
+} EnGoSleepState;
+
+typedef enum EnGoEffectType {
+ /* 0 */ ENGO_EFFECT_NONE,
+ /* 1 */ ENGO_EFFECT_SNOW1,
+ /* 2 */ ENGO_EFFECT_SNOW2,
+ /* 3 */ ENGO_EFFECT_SNOW3,
+ /* 4 */ ENGO_EFFECT_DUST_MIN,
+ /* 4 */ ENGO_EFFECT_DUST1 = ENGO_EFFECT_DUST_MIN,
+ /* 5 */ ENGO_EFFECT_DUST2,
+ /* 6 */ ENGO_EFFECT_DUST3,
+ /* 7 */ ENGO_EFFECT_STEAM_MIN,
+ /* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN
+} EnGoEffectType;
+
+typedef enum EnGoAnimationIndex {
+ /* -1 */ ENGO_ANIM_INVALID = -1,
+ /* 0 */ ENGO_ANIM_GORON_MIN,
+ /* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN,
+ /* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM,
+ /* 2 */ ENGO_ANIM_UNROLL,
+ /* 3 */ ENGO_ANIM_UNROLL_IMM,
+ /* 4 */ ENGO_ANIM_ROLL,
+ /* 5 */ ENGO_ANIM_SHIVER,
+ /* 6 */ ENGO_ANIM_SHIVER_IMM,
+ /* 7 */ ENGO_ANIM_DROPKEG,
+ /* 8 */ ENGO_ANIM_COVEREARS,
+ /* 9 */ ENGO_ANIM_SHIVERINGSURPRISED,
+ /* 10 */ ENGO_ANIM_ATHLETICS_MIN,
+ /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN,
+ /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE,
+ /* 12 */ ENGO_ANIM_SHAKE_LIMBS,
+ /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND,
+ /* 14 */ ENGO_ANIM_SITTING_STRETCH,
+ /* 15 */ ENGO_ANIM_CHEER,
+ /* 16 */ ENGO_ANIM_SHOUT,
+ /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH,
+ /* 18 */ ENGO_ANIM_SPRING_MIN,
+ /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN,
+ /* 19 */ ENGO_ANIM_SHOW_LOOPED,
+ /* 20 */ ENGO_ANIM_LOOK_AROUND,
+ /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED
+} EnGoAnimationIndex;
+
+void EnGo_Idle(EnGo* this, PlayState* play);
+void EnGo_Sleep(EnGo* this, PlayState* play);
+void EnGo_Frozen(EnGo* this, PlayState* play);
+void EnGo_AwaitThaw(EnGo* this, PlayState* play);
+void EnGo_Thaw(EnGo* this, PlayState* play);
+
+void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play);
+
+void EnGo_Snowball(EnGo* this, PlayState* play);
+
+void EnGo_Talk(EnGo* this, PlayState* play);
+
+// MsgEvent script for the Goron who made Darmani's grave in the mountain village.
+static s32 sMsgScriptGoronGravemaker[] = {
0x00150800, 0x40010022, 0x00150200, 0x180E0E10, 0x0C0F0E11, 0x0C0F0E12, 0x0C0F0E13, 0x0C0F0E14, 0x0C111502,
0x100E0E15, 0x0C100015, 0x0400110E, 0x0E160C0F, 0x0E170C0F, 0x0E180C11, 0x15041610, 0x0E0E190C, 0x10001504,
0x000D0100, 0x050E0E31, 0x0C100E0E, 0x2F0C1001, 0x00050E0E, 0x2D0C100E, 0x0E2B0C10,
};
-static s32 D_80A16164[] = {
+// MsgEvent script for the frozen Goron aside the gravemaker in the mountain village.
+static s32 sMsgScriptGoronFrozen[] = {
0x00150800, 0x7E01004D, 0x00150400, 0x180E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C12, 0x16111508,
0x100E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C17, 0x0F0E260C, 0x180F0E27, 0x0C170F0E, 0x280C180F,
0x0E290C17, 0x0F0E2A0C, 0x16111508, 0x100E0E1A, 0x0C170F0E, 0x1B0C180F, 0x0E1C0C0F, 0x0E1D0C0F, 0x0E1E0C17,
@@ -44,19 +138,23 @@ static s32 D_80A16164[] = {
0x0E0E300C, 0x10010005, 0x0E0E2E0C, 0x100E0E2C, 0x0C100000,
};
-static s32 D_80A16208[2] = { 0xE0E520C, 0x10000000 };
+// MsgEvent script for the shrine Goron standing aside the store.
+static s32 sMsgScriptGoronAsideStore[] = { 0xE0E520C, 0x10000000 };
-static s32 D_80A16210[17] = {
+// MsgEvent script for the shrine Goron standing aside the Elder's son.
+static s32 sMsgScriptGoronAsideEldersSon[] = {
0x160400, 0x38010010, 0xE0E430C, 0xF0E440C, 0xF0E450C, 0x11188010, 0x160800, 0x1B0E0E46, 0xC0F0E47,
0xC0F0E48, 0xC0F0E49, 0xC0F0E4A, 0xC111608, 0x11188010, 0xE0E4B0C, 0x100E0E42, 0xC100000,
};
-static s32 D_80A16254[11] = {
+// MsgEvent script for the shrine Goron standing aside the Elder's room.
+static s32 sMsgScriptGoronAsideEldersRoom[] = {
0x160400, 0x22010009, 0xE0E4D0C, 0xF0E4E0C, 0x10001701, 0xC0E0E,
0x4F0C0F0E, 0x500C1117, 0x1100E0E, 0x510C100E, 0xE4C0C10,
};
-static s32 D_80A16280[52] = {
+// MsgEvent script for the Goron in Goron Village who sells Powder Kegs.
+static s32 sMsgScriptGoronMedigoron[] = {
0x1001200, 0x12200008, 0xE0C8E0C, 0x11122010, 0xE0C8F0C, 0x10001240, 0x1D0E0C, 0x800C1112, 0x40001280,
0x742500, 0xC006F00, 0x13010045, 0xF0C810C, 0x19001300, 0x1280005E, 0x25000C00, 0x59001301, 0x2F0E0C,
0x810C0F0C, 0x820C0500, 0x1A00, 0x1A300E0C, 0x830C1209, 0x700, 0xE0C84, 0x160C1113, 0x1100E0C,
@@ -65,18 +163,30 @@ static s32 D_80A16280[52] = {
0x14FF9C12, 0x6003400, 0x130034, 0x700000E, 0xC870C16, 0x100E0C8B, 0xC100000,
};
-static s32 D_80A16350[27] = {
+// MsgEvent script for the gatekeeper Goron in Goron Village who opens the shrine gate.
+static s32 sMsgScriptGoronGatekeeper[] = {
0x584000, 0x2903000E, 0x2001301, 0x180058, 0x80005119, 0x1E0059, 0x1004919, 0x160059, 0x2004119,
0xE0059, 0x4003919, 0x2F0E0D, 0x4D0C1210, 0xE0D480C, 0xF0D490C, 0xF0D4A0C, 0x5000000, 0xF000F30,
0xE0D4B0C, 0x15090000, 0xE0D4D0C, 0x1210310E, 0xD4C0C12, 0x100E0D4E, 0xC19FFD8, 0xE0D4F0C, 0x19FFD500,
};
-static s32 D_80A163BC[4] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 };
-static s32 D_80A163CC[4] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 };
-static s32 D_80A163DC[4] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 };
-static s32 D_80A163EC[4] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 };
-static s32 D_80A163FC[4] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 };
-static s32 D_80A1640C[2] = { 0xE023A0C, 0x12100000 };
+// MsgEvent script for one of the Goron stretchers at the racetrack (Initially stretching side to side while squatting).
+static s32 sMsgScriptGoronAthleticA[] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 };
+
+// MsgEvent script for one of the Goron stretchers at the racetrack (Initially doing sidebend stretches with one arm).
+static s32 sMsgScriptGoronAthleticB[] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 };
+
+// MsgEvent script for one of the Goron stretchers at the racetrack (Initially shaking out their limbs).
+static s32 sMsgScriptGoronAthleticC[] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 };
+
+// MsgEvent script for one of the Goron stretchers (Initially doing sidebend stretches with both arms).
+static s32 sMsgScriptGoronAthleticD[] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 };
+
+// MsgEvent script for the pair of Gorons stretching one Goron's hamstrings.
+static s32 sMsgScriptGoronAthleticHamstring[] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 };
+
+// MsgEvent script for any sleeping Goron.
+static s32 sMsgScriptGoronSleeping[] = { 0xE023A0C, 0x12100000 };
ActorInit En_Go_InitVars = {
ACTOR_EN_GO,
@@ -110,7 +220,8 @@ static ColliderSphereInit sSphereInit = {
{ 0, { { 0, 0, 0 }, 0 }, 100 },
};
-static ColliderCylinderInit sCylinderInit1 = {
+// Collider for the frozen solid Gorons.
+static ColliderCylinderInit sCylinderInitFrozen = {
{
COLTYPE_METAL,
AT_ON | AT_TYPE_ENEMY,
@@ -130,7 +241,8 @@ static ColliderCylinderInit sCylinderInit1 = {
{ 0, 0, 0, { 0, 0, 0 } },
};
-static ColliderCylinderInit sCylinderInit2 = {
+// Collider for normal Gorons.
+static ColliderCylinderInit sCylinderInit = {
{
COLTYPE_HIT1,
AT_NONE,
@@ -152,42 +264,55 @@ static ColliderCylinderInit sCylinderInit2 = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
+typedef enum {
+ /* 0x0 */ ENGO_DMGEFF_NONE,
+ /* 0x2 */ ENGO_DMGEFF_FIRE = 0x2,
+ /* 0xF */ ENGO_DMGEFF_BREAK = 0xF
+} EnGoDamageEffect;
+
static DamageTable sDamageTable = {
- /* Deku Nut */ DMG_ENTRY(1, 0x0),
- /* Deku Stick */ DMG_ENTRY(1, 0x0),
- /* Horse trample */ DMG_ENTRY(1, 0x0),
- /* Explosives */ DMG_ENTRY(1, 0x0),
- /* Zora boomerang */ DMG_ENTRY(1, 0x0),
- /* Normal arrow */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x06 */ DMG_ENTRY(1, 0x0),
- /* Hookshot */ DMG_ENTRY(1, 0x0),
- /* Goron punch */ DMG_ENTRY(1, 0xF),
- /* Sword */ DMG_ENTRY(1, 0x0),
- /* Goron pound */ DMG_ENTRY(1, 0xF),
- /* Fire arrow */ DMG_ENTRY(1, 0x2),
- /* Ice arrow */ DMG_ENTRY(1, 0x0),
- /* Light arrow */ DMG_ENTRY(1, 0x0),
- /* Goron spikes */ DMG_ENTRY(1, 0xF),
- /* Deku spin */ DMG_ENTRY(1, 0x0),
- /* Deku bubble */ DMG_ENTRY(1, 0x0),
- /* Deku launch */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x12 */ DMG_ENTRY(1, 0x0),
- /* Zora barrier */ DMG_ENTRY(1, 0x0),
- /* Normal shield */ DMG_ENTRY(1, 0x0),
- /* Light ray */ DMG_ENTRY(1, 0x0),
- /* Thrown object */ DMG_ENTRY(1, 0x0),
- /* Zora punch */ DMG_ENTRY(1, 0x0),
- /* Spin attack */ DMG_ENTRY(1, 0x0),
- /* Sword beam */ DMG_ENTRY(1, 0x0),
- /* Normal Roll */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(1, 0x0),
- /* Unblockable */ DMG_ENTRY(1, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(1, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0x0),
+ /* Deku Nut */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Deku Stick */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Goron punch */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK),
+ /* Sword */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Goron pound */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK),
+ /* Fire arrow */ DMG_ENTRY(1, ENGO_DMGEFF_FIRE),
+ /* Ice arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Light arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Goron spikes */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK),
+ /* Deku spin */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Deku bubble */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Zora barrier */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Normal shield */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Sword beam */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, ENGO_DMGEFF_NONE),
};
+/**
+ * Animations used in the actor.
+ *
+ * @see EnGoAnimationIndex
+ */
static AnimationInfoS sAnimationInfo[] = {
+
+ /* Animations for generic Goron actions */
{ &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 },
@@ -199,366 +324,456 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ /* Animations for stretching Gorons at the racetrack */
+ { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_hakugin_demo_Anim_001420, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_hakugin_demo_Anim_001A4C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ /* Animations for the Goron during the spring arrival cutscene */
+ { &gGoronSpringShowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gGoronSpringShowLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
-EnGoStruct* func_80A10FD0(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6) {
+/**
+ * Initialize the latter section of the effects in 'effectTable' to be of type ENGO_EFFECT_STEAM.
+ *
+ * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT])
+ * @param pos Initial pos
+ * @param accel Initial acceleration
+ * @param velocity Initial velocity
+ * @param scale Initial scale
+ * @param deltaScale How much the effect scales per frame (additive)
+ * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be between 'maxFrames / 3' and
+ * 'maxFrames'
+ */
+EnGoEffect* EnGo_InitSteam(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f velocity,
+ f32 scale, f32 deltaScale, s32 maxFrames) {
s32 i;
- for (i = 16; i < 32; i++, ptr++) {
- if (ptr->unk_00 == 0) {
- ptr->unk_00 = 7;
- ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f);
- ptr->unk_02 = ptr->unk_01;
- ptr->unk_10 = arg1;
- ptr->unk_1C = arg2;
- ptr->unk_28 = arg3;
- ptr->unk_34 = arg4;
- ptr->unk_38 = arg5;
- break;
+ // Steam effects are from the end of the snow effects to the end of all effects
+ for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) {
+ if (effect->type != ENGO_EFFECT_NONE) {
+ continue;
}
- }
- return ptr;
+ effect->type = ENGO_EFFECT_STEAM;
+ effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f);
+ effect->alphaNumer = effect->alphaDenom;
+ effect->pos = pos;
+ effect->accel = accel;
+ effect->velocity = velocity;
+ effect->scaleXY = scale;
+ effect->scaleXYDelta = deltaScale;
+ break;
+ }
+ return effect;
}
-void func_80A11144(EnGoStruct* ptr, PlayState* play) {
- s32 pad;
+/**
+ * Draw all effects of type ENGO_EFFECT_STEAM.
+ *
+ * @param effect The EnGoEffect table
+ */
+void EnGo_DrawSteam(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) {
+ PlayState* play = play2;
s32 i;
- s32 flag = false;
- f32 temp;
+ s32 isMaterialSet = false;
+ f32 alpha;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
-
- for (i = 0; i < 32; i++, ptr++) {
-
- if (ptr->unk_00 == 7) {
- gDPPipeSync(POLY_XLU_DISP++);
-
- if (!flag) {
- gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL);
- flag = true;
- }
-
- Matrix_Push();
-
- temp = ((f32)ptr->unk_02 / ptr->unk_01);
- temp *= 255;
-
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)temp);
- gSPSegment(POLY_XLU_DISP++, 0x08,
- Gfx_TwoTexScroll(play->state.gfxCtx, 0, (ptr->unk_02 + (i * 3)) * 3,
- (ptr->unk_02 + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20));
-
- Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW);
- Matrix_ReplaceRotation(&play->billboardMtxF);
- Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL);
-
- Matrix_Pop();
- if (play->state.gfxCtx) {}
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) {
+ if (effect->type != ENGO_EFFECT_STEAM) {
+ continue;
}
+
+ gDPPipeSync(POLY_XLU_DISP++);
+ if (!isMaterialSet) {
+ gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL);
+ isMaterialSet = true;
+ }
+
+ Matrix_Push();
+
+ alpha = (f32)effect->alphaNumer / effect->alphaDenom;
+ alpha *= 255.0f;
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha);
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, 0, (effect->alphaNumer + (i * 3)) * 3,
+ (effect->alphaNumer + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20));
+
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL);
+
+ Matrix_Pop();
}
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_80A1143C(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6, s32 arg7) {
+/**
+ * Initialize the first available effect to be of type 'ENGO_EFFECT_DUST1'/'2'/'3'.
+ *
+ * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT])
+ * @param pos Initial pos
+ * @param accel Initial acceleration
+ * @param velocity Initial velocity
+ * @param scale Initial scale
+ * @param deltaScale How much the effect scales per frame (additive)
+ * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be 1/3 * maxFrames -> maxFrames
+ * @param parentEffectType Type of the parent effect, determines which of the possible dust effects correspond
+ */
+void EnGo_InitDust(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale,
+ f32 deltaScale, s32 maxFrames, EnGoEffectType parentEffectType) {
s32 i;
- for (i = 16; i < 32; i++, ptr++) {
- if (ptr->unk_00 == 0) {
- ptr->unk_00 = arg7 + 4;
-
- ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f);
- ptr->unk_02 = ptr->unk_01;
-
- ptr->unk_10 = arg1;
- ptr->unk_1C = arg2;
- ptr->unk_28 = arg3;
- ptr->unk_34 = arg4;
- ptr->unk_38 = arg5;
- break;
+ // Dust effects are from the end of the snow effects to the end of all effects.
+ for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) {
+ if (effect->type != ENGO_EFFECT_NONE) {
+ continue;
}
+
+ effect->type = parentEffectType + ENGO_EFFECT_DUST_MIN;
+ effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f);
+ effect->alphaNumer = effect->alphaDenom;
+ effect->pos = pos;
+ effect->accel = accel;
+ effect->velocity = vel;
+ effect->scaleXY = scale;
+ effect->scaleXYDelta = deltaScale;
+ break;
}
}
-void func_80A115B4(EnGoStruct* ptr, PlayState* play) {
+/**
+ * Draw all effects of type 'ENGO_EFFECT_DUST1'/'2'/'3'.
+ *
+ * @param effect The EnGoEffect table
+ */
+void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) {
static TexturePtr sDustTextures[] = {
gEffDust8Tex, gEffDust7Tex, gEffDust6Tex, gEffDust5Tex, gEffDust4Tex, gEffDust3Tex, gEffDust2Tex, gEffDust1Tex,
};
- static Color_RGBA8 D_80A16664[] = {
- { 255, 255, 255, 0 },
- { 170, 130, 90, 0 },
- { 0, 0, 0, 0 },
+ static Color_RGBA8 sEnGoDustPrimColor[] = {
+ { 255, 255, 255, 0 }, // White
+ { 170, 130, 90, 0 }, // Light Brown
+ { 0, 0, 0, 0 }, // Black
};
- static Color_RGBA8 D_80A16670[] = {
- { 255, 255, 255, 0 },
- { 100, 60, 20, 0 },
- { 0, 0, 0, 0 },
+ static Color_RGBA8 sEnGoDustEnvColor[] = {
+ { 255, 255, 255, 0 }, // White
+ { 100, 60, 20, 0 }, // Dark Brown
+ { 0, 0, 0, 0 }, // Black
};
+ PlayState* play = play2;
s32 i;
- u8 flag = false;
- f32 temp;
+ u8 isMaterialSet = false;
+ f32 alpha;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
-
- for (i = 0; i < 32; i++, ptr++) {
- if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) {
- if (!flag) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
- gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL);
- flag = true;
- }
- Matrix_Push();
-
- temp = (f32)ptr->unk_02 / ptr->unk_01;
-
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80A16664[(s32)ptr->unk_00 - 4].r,
- D_80A16664[(s32)ptr->unk_00 - 4].g, D_80A16664[(s32)ptr->unk_00 - 4].b, (u8)(temp * 255));
- gDPSetEnvColor(POLY_XLU_DISP++, D_80A16670[(s32)ptr->unk_00 - 4].r, D_80A16670[(s32)ptr->unk_00 - 4].g,
- D_80A16670[(s32)ptr->unk_00 - 4].b, 0);
-
- Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW);
- Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY);
- Matrix_ReplaceRotation(&play->billboardMtxF);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(temp * 7.0f)]));
- gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL);
-
- Matrix_Pop();
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) {
+ if ((effect->type < ENGO_EFFECT_DUST_MIN) || (effect->type >= ENGO_EFFECT_STEAM_MIN)) {
+ continue;
}
- if (play->state.gfxCtx) {}
+
+ if (!isMaterialSet) {
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
+ gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL);
+ isMaterialSet = true;
+ }
+
+ Matrix_Push();
+
+ alpha = (f32)effect->alphaNumer / effect->alphaDenom;
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r,
+ sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g,
+ sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, (u8)(alpha * UINT8_MAX));
+ gDPSetEnvColor(POLY_XLU_DISP++, sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r,
+ sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g,
+ sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, 0);
+
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(alpha * 7.0f)]));
+ gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL);
+
+ Matrix_Pop();
}
CLOSE_DISPS(play->state.gfxCtx);
}
-#ifdef NON_MATCHING
-void func_80A118F8(EnGoStruct* ptr, Vec3f arg1) {
- static u8 D_80A1667C[] = {
- 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2,
+/**
+ * Initialize the snowball break effects.
+ *
+ * Half of the elements will be 'ENGO_EFFECT_SNOW1'/'2'/'3' randomly generated around the character. The second half
+ * will be dedicated 'ENGO_EFFECT_DUST1'/'2'/'3' paired with the snow.
+ *
+ * @param effect The EnGoEffect table
+ * @param pos Position around which the effects appear
+ */
+void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) {
+ static u8 effectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = {
+ ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
+ ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
+ ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
+ ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2,
};
- EnGoStruct* ptr2 = &ptr[16];
+ EnGoEffect* dustEffects = &effect[ENGO_SNOW_EFFECT_COUNT];
s32 i;
- Vec3f spB4;
- Vec3f spA8;
- f32 temp_f20;
+ Vec3f randRelativeToWorldPos;
+ Vec3f randYOneToFour;
+ f32 velMagnitude;
- for (i = 0; i < 16; i++, ptr++) {
- if (ptr->unk_00 == 0) {
- ptr->unk_10 = arg1;
- ptr->unk_10.y += 56.0f;
-
- ptr->unk_04.x = (Rand_ZeroOne() - 0.5f) * 5460.0f;
- ptr->unk_04.y = (Rand_ZeroOne() - 0.5f) * 5460.0f;
- ptr->unk_04.z = (Rand_ZeroOne() - 0.5f) * 5460.0f;
-
- temp_f20 = (Rand_ZeroOne() * 4.0f) + 6.0f;
- ptr->unk_28.x = Math_SinS(i * 0x1000) * temp_f20;
- ptr->unk_28.z = Math_CosS(i * 0x1000) * temp_f20;
- ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 6.0f;
-
- ptr->unk_1C = gZeroVec3f;
- ptr->unk_1C.y = -0.8f;
-
- ptr->unk_01 = ptr->unk_02 = 1;
- ptr->unk_00 = D_80A1667C[i];
-
- spB4.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.x;
- spB4.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + ptr->unk_10.y;
- spB4.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.z;
-
- spA8 = gZeroVec3f;
- spA8.y = (Rand_ZeroOne() * 3.0f) + 1.0f;
-
- func_80A1143C(ptr2, spB4, gZeroVec3f, spA8, 0.6f, 0.2f, 16, 0);
+ // Snow effects consume the first part of the effects table, and are paired with dust effects in the latter part
+ for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) {
+ if (effect->type != ENGO_EFFECT_NONE) {
+ continue;
}
+
+ effect->pos = pos;
+ effect->pos.y += 56.0f;
+
+ // Generate a +-15 degree rotational velocity
+ effect->rotVelocity.x = (Rand_ZeroOne() - 0.5f) * (f32)0x1554;
+ effect->rotVelocity.y = (Rand_ZeroOne() - 0.5f) * (f32)0x1554;
+ effect->rotVelocity.z = (Rand_ZeroOne() - 0.5f) * (f32)0x1554;
+
+ // Generate a radially outward velocity for each of the effects
+ velMagnitude = (Rand_ZeroOne() * 4.0f) + 6.0f;
+ effect->velocity.x = Math_SinS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude;
+ effect->velocity.z = Math_CosS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude;
+ effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 6.0f;
+
+ // No acceleration on the X,Z axis, negative acceleration on the Y axis
+ effect->accel = gZeroVec3f;
+ effect->accel.y = -0.8f;
+
+ // Full visibility (1/1)
+ effect->alphaDenom = effect->alphaNumer = 1;
+
+ // Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3'
+ effect->type = effectIndexToSnowEffectTable[i];
+
+ // Initialize the parameters for the paired element
+ randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x;
+ randRelativeToWorldPos.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + effect->pos.y;
+ randRelativeToWorldPos.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.z;
+
+ randYOneToFour = gZeroVec3f;
+ randYOneToFour.y = (Rand_ZeroOne() * 3.0f) + 1.0f;
+
+ // Initialize the paired element.
+ EnGo_InitDust(dustEffects, randRelativeToWorldPos, gZeroVec3f, randYOneToFour, 0.6f, 0.2f,
+ ENGO_DUST_STEAM_LIFETIME, 0);
}
}
-#else
-static u8 D_80A1667C[] = {
- 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2,
-};
-void func_80A118F8(EnGoStruct* ptr, Vec3f arg1);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A118F8.s")
-#endif
-void func_80A11BF8(EnGoStruct* ptr, f32 arg1) {
- f32 test;
- f32 test2;
+/**
+ * Update the snow effect's movement.
+ *
+ * When the snow drops to the ground, it is converted to dust.
+ *
+ * @param effect Pointer to the effect to update
+ * @param dustConversionHeight Height above the ground at which to convert the effect to dust
+ */
+void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight) {
f32 x;
f32 z;
- ptr->unk_10.x += ptr->unk_28.x;
- ptr->unk_10.y += ptr->unk_28.y;
- ptr->unk_10.z += ptr->unk_28.z;
+ effect->pos.x += effect->velocity.x;
+ effect->pos.y += effect->velocity.y;
+ effect->pos.z += effect->velocity.z;
- ptr->unk_28.y += ptr->unk_1C.y;
- ptr->unk_34 += ptr->unk_38;
+ effect->velocity.y += effect->accel.y;
+ effect->scaleXY += effect->scaleXYDelta;
- if (ptr->unk_10.y < arg1) {
- ptr->unk_10.y = arg1;
+ if (effect->pos.y < dustConversionHeight) {
+ effect->pos.y = dustConversionHeight;
- ptr->unk_00 = 4;
- ptr->unk_01 = (Rand_ZeroOne() * 8.0f) + 4.0f;
- ptr->unk_02 = ptr->unk_01;
+ effect->type = ENGO_EFFECT_DUST1;
+ effect->alphaDenom = (Rand_ZeroOne() * 8.0f) + 4.0f;
+ effect->alphaNumer = effect->alphaDenom;
- ptr->unk_28 = gZeroVec3f;
- ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 1.0f;
+ effect->velocity = gZeroVec3f;
+ effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 1.0f;
- ptr->unk_34 = 0.4f;
- ptr->unk_38 = 0.1f;
+ effect->scaleXY = 0.4f;
+ effect->scaleXYDelta = 0.1f;
return;
}
- if (ptr->unk_28.x != 0.0f) {
- x = ptr->unk_28.x / fabsf(ptr->unk_28.x);
- x *= ((sREG(13) + 140) * 0.01f);
- Math_StepToF(&ptr->unk_28.x, x, (sREG(14) + 40) * 0.01f);
+ if (effect->velocity.x != 0.0f) {
+ x = effect->velocity.x / fabsf(effect->velocity.x);
+ x *= (sREG(13) + 140) * 0.01f;
+ Math_StepToF(&effect->velocity.x, x, (sREG(14) + 40) * 0.01f);
}
- if (ptr->unk_28.z != 0.0f) {
- z = ptr->unk_28.z / fabsf(ptr->unk_28.z);
+ if (effect->velocity.z != 0.0f) {
+ z = effect->velocity.z / fabsf(effect->velocity.z);
z *= ((sREG(13) + 140) * 0.01f);
- Math_StepToF(&ptr->unk_28.z, z, (sREG(14) + 40) * 0.01f);
+ Math_StepToF(&effect->velocity.z, z, (sREG(14) + 40) * 0.01f);
}
- ptr->unk_0A.x += ptr->unk_04.x;
- ptr->unk_0A.y += ptr->unk_04.y;
- ptr->unk_0A.z += ptr->unk_04.z;
+ effect->rotAngle.x += effect->rotVelocity.x;
+ effect->rotAngle.y += effect->rotVelocity.y;
+ effect->rotAngle.z += effect->rotVelocity.z;
}
-#ifdef NON_MATCHING
-void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4) {
+/**
+ * Draw all effects of type 'ENGO_EFFECT_SNOW1'/'2'/'3'.
+ *
+ * @param effect The EnGoEffect table
+ * @param material Snow Material
+ * @param model Snow Model
+ * @param type Snow Effect type to draw
+ */
+void EnGo_DrawSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], PlayState* play, Gfx* material, Gfx* model,
+ u8 effectType) {
s32 i;
- u8 flag = false;
+ u8 isMaterialSet = false;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
- for (i = 0; i < 16; i++, ptr++) {
- if (ptr->unk_00 == arg4) {
- if (!flag) {
- gSPDisplayList(POLY_OPA_DISP++, arg2);
- flag = true;
- }
-
- Matrix_Push();
- Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW);
- Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY);
- Matrix_RotateZS(ptr->unk_0A.z, MTXMODE_APPLY);
- Matrix_RotateXS(ptr->unk_0A.x, MTXMODE_APPLY);
- Matrix_RotateYS(ptr->unk_0A.y, MTXMODE_APPLY);
-
- if (1) {
- gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, arg3);
- }
-
- Matrix_Pop();
+ for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) {
+ if (effect->type != effectType) {
+ continue;
}
+
+ if (!isMaterialSet) {
+ gSPDisplayList(POLY_OPA_DISP++, material);
+ isMaterialSet = true;
+ }
+
+ Matrix_Push();
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY);
+ Matrix_RotateZS(effect->rotAngle.z, MTXMODE_APPLY);
+ Matrix_RotateXS(effect->rotAngle.x, MTXMODE_APPLY);
+ Matrix_RotateYS(effect->rotAngle.y, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, model);
+
+ Matrix_Pop();
}
CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A11EC0.s")
-#endif
-void func_80A1203C(EnGo* this) {
- EnGoStruct* ptr = this->unk_3F8;
+/**
+ * Update all effects, potentially fading them away to nothing.
+ */
+void EnGo_UpdateEffects(EnGo* this) {
+ EnGoEffect* effect = this->effectTable;
s32 i;
- for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) {
- if (ptr->unk_00 != 0) {
- if (ptr->unk_02 == 0) {
- ptr->unk_00 = 0;
- } else if ((ptr->unk_00 > 0) && (ptr->unk_00 < 4)) {
- func_80A11BF8(ptr, this->actor.world.pos.y);
- } else {
- ptr->unk_10.x += ptr->unk_28.x;
- ptr->unk_10.y += ptr->unk_28.y;
- ptr->unk_10.z += ptr->unk_28.z;
+ for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) {
+ if (effect->type == ENGO_EFFECT_NONE) {
+ continue;
+ }
- ptr->unk_28.x += ptr->unk_1C.x;
- ptr->unk_28.y += ptr->unk_1C.y;
- ptr->unk_28.z += ptr->unk_1C.z;
+ if (effect->alphaNumer == 0) {
+ // End usage of the effect
+ effect->type = ENGO_EFFECT_NONE;
+ } else if ((effect->type > ENGO_EFFECT_NONE) && (effect->type < ENGO_EFFECT_DUST_MIN)) {
+ // Snow rotates, and changes to dust upon dropping below the actor position
+ EnGo_UpdateSnow(effect, this->actor.world.pos.y);
+ } else {
+ // Dust and steam move according to their initial values
+ effect->pos.x += effect->velocity.x;
+ effect->pos.y += effect->velocity.y;
+ effect->pos.z += effect->velocity.z;
- ptr->unk_34 += ptr->unk_38;
- ptr->unk_02--;
- }
+ effect->velocity.x += effect->accel.x;
+ effect->velocity.y += effect->accel.y;
+ effect->velocity.z += effect->accel.z;
+
+ effect->scaleXY += effect->scaleXYDelta;
+ effect->alphaNumer--;
}
}
}
-void func_80A1213C(EnGo* this, PlayState* play) {
- func_80A11EC0(this->unk_3F8, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL, 1);
- func_80A11EC0(this->unk_3F8, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL, 2);
- func_80A11EC0(this->unk_3F8, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL, 3);
- func_80A11144(this->unk_3F8, play);
- func_80A115B4(this->unk_3F8, play);
+/**
+ * Draw all effects.
+ */
+void EnGo_DrawEffects(EnGo* this, PlayState* play) {
+ EnGo_DrawSnow(this->effectTable, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL,
+ ENGO_EFFECT_SNOW1);
+ EnGo_DrawSnow(this->effectTable, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL,
+ ENGO_EFFECT_SNOW2);
+ EnGo_DrawSnow(this->effectTable, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL,
+ ENGO_EFFECT_SNOW3);
+ EnGo_DrawSteam(this->effectTable, play);
+ EnGo_DrawDust(this->effectTable, play);
}
-s32 func_80A121F4(PlayState* play) {
+/**
+ * Check if the Goron can hurt the player.
+ */
+s32 EnGo_CanSnowballHurtPlayer(PlayState* play) {
Player* player = GET_PLAYER(play);
if ((player->transformation == PLAYER_FORM_GORON) && (player->stateFlags3 & PLAYER_STATE3_2000000)) {
return false;
+ } else {
+ return true;
}
- return true;
}
-s32 func_80A1222C(EnGo* this, PlayState* play) {
+/**
+ * Check if the Goron is falling asleep.
+ */
+s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s32 ret = false;
+ s32 isFallingAsleep = false;
if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
- (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) &&
+ (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) &&
(this->actor.xzDistToPlayer < 400.0f)) ||
- (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) &&
- (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.scriptIndex == 1))) {
- ret = true;
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) &&
+ (gSaveContext.sceneLayer == 0) && (this->sleepState == ENGO_AWAKE) && (play->csCtx.scriptIndex == 1))) {
+ isFallingAsleep = true;
}
- return ret;
+ return isFallingAsleep;
}
-s32 func_80A122EC(EnGo* this) {
- static Vec3f D_80A1668C = { 0.0f, 100.0f, 160.0f };
+/**
+ * Update the actor's focus.
+ */
+s32 EnGo_UpdateFocus(EnGo* this) {
+ static Vec3f sMedigoronPos = { 0.0f, 100.0f, 160.0f };
s32 pad;
- f32 sp20 = 58.0f;
+ f32 yAxisOffsetToFocusPoint = 58.0f;
- if (ENGO_GET_F(&this->actor) == ENGO_F_8) {
- Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A1668C,
+ if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) {
+ Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sMedigoronPos,
&this->actor.focus.pos);
} else {
- if ((this->unk_390 & 0x200) || (this->unk_390 & 0x100)) {
- sp20 = this->actor.shape.yOffset;
+ if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) || (this->actionFlags & ENGO_FLAG_SNOWBALLED)) {
+ yAxisOffsetToFocusPoint = this->actor.shape.yOffset;
}
Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
- this->actor.focus.pos.y += sp20;
+ this->actor.focus.pos.y += yAxisOffsetToFocusPoint;
}
this->actor.focus.rot.x = this->actor.world.rot.x;
@@ -567,21 +782,24 @@ s32 func_80A122EC(EnGo* this) {
return false;
}
-void func_80A123A0(EnGo* this, PlayState* play) {
- Vec3f sp2C;
+/**
+ * Update the collider for the snowball form of the Goron Shrine gatekeeper.
+ */
+void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play) {
+ Vec3f worldPos;
- Math_Vec3f_Copy(&sp2C, &this->actor.world.pos);
+ Math_Vec3f_Copy(&worldPos, &this->actor.world.pos);
- this->colliderSphere.dim.worldSphere.center.x = sp2C.x;
- this->colliderSphere.dim.worldSphere.center.y = sp2C.y;
+ this->colliderSphere.dim.worldSphere.center.x = worldPos.x;
+ this->colliderSphere.dim.worldSphere.center.y = worldPos.y;
this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset;
- this->colliderSphere.dim.worldSphere.center.z = sp2C.z;
+ this->colliderSphere.dim.worldSphere.center.z = worldPos.z;
this->colliderSphere.dim.modelSphere.radius = 48;
this->colliderSphere.dim.worldSphere.radius =
this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale;
- if (func_80A121F4(play)) {
+ if (EnGo_CanSnowballHurtPlayer(play)) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderSphere.base);
}
@@ -589,175 +807,203 @@ void func_80A123A0(EnGo* this, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base);
}
-void func_80A124A0(EnGo* this, PlayState* play) {
+/**
+ * Update the collider for the Medigoron in the Powder Keg Shop.
+ */
+void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play) {
this->colliderSphere.dim.worldSphere.radius =
this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base);
}
-void func_80A124FC(EnGo* this, PlayState* play) {
- Vec3f sp1C;
+/**
+ * Update the collider for the rolled up form of a Goron.
+ */
+void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play) {
+ Vec3f worldPos;
- Math_Vec3f_Copy(&sp1C, &this->actor.world.pos);
-
- this->colliderSphere.dim.worldSphere.center.x = sp1C.x;
- this->colliderSphere.dim.worldSphere.center.y = sp1C.y;
+ Math_Vec3f_Copy(&worldPos, &this->actor.world.pos);
+ this->colliderSphere.dim.worldSphere.center.x = worldPos.x;
+ this->colliderSphere.dim.worldSphere.center.y = worldPos.y;
this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset;
- this->colliderSphere.dim.worldSphere.center.z = sp1C.z;
-
+ this->colliderSphere.dim.worldSphere.center.z = worldPos.z;
this->colliderSphere.dim.modelSphere.radius = 20;
this->colliderSphere.dim.worldSphere.radius =
this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale;
-
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base);
}
-void func_80A125BC(EnGo* this, PlayState* play) {
+/**
+ * Update the collider for the frozen form of a Goron.
+ */
+void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play) {
s32 pad;
Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos);
-
this->colliderCylinder.dim.radius = 46;
this->colliderCylinder.dim.height = 78;
-
- if (this->unk_3C6 == 0) {
+ if (this->harmlessTimer == 0) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderCylinder.base);
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderCylinder.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
}
-void func_80A12660(EnGo* this, PlayState* play) {
+/**
+ * Update the collider for all standing forms of a Goron.
+ */
+void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play) {
Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos);
this->colliderCylinder.dim.radius = 24;
this->colliderCylinder.dim.height = 62;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
}
-void func_80A126BC(EnGo* this, PlayState* play) {
+/**
+ * Update the collider for the Goron.
+ *
+ * Both the rolling snowball and frozen forms can hurt Player on collision, others do not.
+ */
+void EnGo_UpdateCollider(EnGo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (!(player->stateFlags2 & PLAYER_STATE2_4000)) {
- if (this->unk_3C6 != 0) {
- this->unk_3C6--;
- }
+ DECR(this->harmlessTimer);
}
-
- if (ENGO_GET_F(&this->actor) == ENGO_F_8) {
- func_80A124A0(this, play);
- } else if (this->unk_390 & 0x100) {
- func_80A123A0(this, play);
- } else if (this->unk_390 & 0x200) {
- func_80A124FC(this, play);
- } else if (this->unk_390 & 0x400) {
- func_80A125BC(this, play);
+ if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) {
+ EnGo_UpdateMedigoronCollider(this, play);
+ } else if (this->actionFlags & ENGO_FLAG_SNOWBALLED) {
+ EnGo_UpdateSnowballCollider(this, play);
+ } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) {
+ EnGo_UpdateRolledUpCollider(this, play);
+ } else if (this->actionFlags & ENGO_FLAG_FROZEN) {
+ EnGo_UpdateFrozenCollider(this, play);
} else {
- func_80A12660(this, play);
+ EnGo_UpdateStandingCollider(this, play);
}
}
-s32 func_80A12774(EnGo* this, PlayState* play) {
- if (!(this->unk_390 & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+/**
+ * Check if the actor is talking, and if so set the action function to handle it.
+ *
+ * @return True if talking
+ */
+s32 EnGo_UpdateTalking(EnGo* this, PlayState* play) {
+ if (!(this->actionFlags & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) {
return false;
}
- if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_1)) {
- if (!(this->unk_390 & 0x200)) {
- this->unk_390 |= 8;
+ if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) {
+ if (!(this->actionFlags & ENGO_FLAG_ROLLED_UP)) {
+ this->actionFlags |= ENGO_FLAG_ENGAGED;
}
}
- if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) ||
- (ENGO_GET_F(&this->actor) == ENGO_F_7)) {
- this->unk_3BC = 0;
- this->unk_3BE = 0;
- this->unk_390 |= 0x20;
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) ||
+ (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) {
+ this->blinkTimer = 0;
+ this->eyeTexIndex = ENGO_EYETEX_OPEN;
+ this->actionFlags |= ENGO_FLAG_EYES_OPEN;
}
- SubS_UpdateFlags(&this->unk_390, 0, 7);
- this->unk_3C0 = 0;
- this->unk_3C4 = 0;
- this->unk_18C = this->actionFunc;
- this->actionFunc = func_80A157C4;
+ SubS_UpdateFlags(&this->actionFlags, 0, 7);
+ this->cutsceneState = 0;
+ this->gatekeeperAnimState = 0;
+ this->interruptedActionFunc = this->actionFunc;
+ this->actionFunc = EnGo_Talk;
return true;
}
-s32 func_80A12868(EnGo* this, PlayState* play) {
- this->unk_390 &= ~0x800;
- this->unk_390 &= ~0x1000;
- this->unk_390 &= ~0x2000;
+/**
+ * Detect any collisions, and convert detections to object specific 'actionFlags'.
+ */
+s32 EnGo_DetectCollisions(EnGo* this, PlayState* play) {
+ this->actionFlags &= ~ENGO_FLAG_HIT_OTHER;
+ this->actionFlags &= ~ENGO_FLAG_HIT_BY_OTHER;
+ this->actionFlags &= ~ENGO_FLAG_HIT_OBJ;
if ((this->colliderCylinder.base.atFlags & AT_HIT) || (this->colliderSphere.base.atFlags & AT_HIT)) {
this->colliderCylinder.base.atFlags &= ~AT_HIT;
this->colliderSphere.base.atFlags &= ~AT_HIT;
- this->unk_390 |= 0x800;
- this->unk_3C6 = 0x28;
+ this->actionFlags |= ENGO_FLAG_HIT_OTHER;
+ this->harmlessTimer = 40;
}
if ((this->colliderCylinder.base.acFlags & AC_HIT) || (this->colliderSphere.base.acFlags & AC_HIT)) {
this->colliderCylinder.base.acFlags &= ~AC_HIT;
this->colliderSphere.base.acFlags &= ~AC_HIT;
- this->unk_390 |= 0x1000;
+ this->actionFlags |= ENGO_FLAG_HIT_BY_OTHER;
}
if ((this->colliderCylinder.base.ocFlags1 & OC1_HIT) || (this->colliderSphere.base.ocFlags1 & OC1_HIT)) {
this->colliderCylinder.base.ocFlags1 &= ~OC1_HIT;
this->colliderSphere.base.ocFlags1 &= ~OC1_HIT;
- this->unk_390 |= 0x2000;
+ this->actionFlags |= ENGO_FLAG_HIT_OBJ;
}
return false;
}
-s32 func_80A12954(EnGo* this, PlayState* play) {
- if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != CS_STATE_IDLE) && (this->actor.draw != NULL) &&
- (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) &&
+/**
+ * Start, or finish, the cutscene for the arrival of springtime.
+ */
+s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) {
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && (play->csCtx.state != CS_STATE_IDLE) &&
+ (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) &&
(play->csCtx.scriptIndex == 0)) {
- if (this->unk_3F0 == 0) {
+ if (!this->springArrivalCutsceneActive) {
this->actor.flags &= ~ACTOR_FLAG_1;
- this->cueId = 255;
- this->unk_3F0 = 1;
- this->unk_18C = this->actionFunc;
+ this->springArrivalCueId = 255;
+ this->springArrivalCutsceneActive = true;
+ this->interruptedActionFunc = this->actionFunc;
}
- SubS_UpdateFlags(&this->unk_390, 0, 7);
- this->actionFunc = func_80A14FC8;
- } else if (this->unk_3F0 != 0) {
+ SubS_UpdateFlags(&this->actionFlags, 0, 7);
+ this->actionFunc = EnGo_HandleSpringArrivalCutscene;
+ } else if (this->springArrivalCutsceneActive) {
this->actor.flags |= ACTOR_FLAG_1;
- this->cueId = 255;
- this->unk_3F0 = 0;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- this->actionFunc = this->unk_18C;
+ this->springArrivalCueId = 255;
+ this->springArrivalCutsceneActive = false;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ this->actionFunc = this->interruptedActionFunc;
}
return false;
}
-s32 func_80A12A64(EnGo* this, PlayState* play) {
- s8 objIdx = this->actor.objBankIndex;
- s8 objIdx2 = -1;
- s32 ret = 0;
+/**
+ * Update the animation to the actor's currently set value.
+ *
+ * @return True if non-repeating animation has finished
+ */
+s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) {
+ s8 objIndex = this->actor.objBankIndex;
+ s8 extraObjIndex = -1;
+ s32 ret = false;
- if ((this->unk_3DC >= 18) && (this->unk_289 >= 0)) {
- objIdx2 = this->unk_289;
- } else if ((this->unk_3DC >= 10) && (this->unk_288 >= 0)) {
- objIdx2 = this->unk_288;
- } else if (this->unk_3DC < 10) {
- objIdx2 = this->actor.objBankIndex;
+ if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) {
+ extraObjIndex = this->hakuginDemoObjIndex;
+ } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) {
+ extraObjIndex = this->taisouObjIndex;
+ } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) {
+ extraObjIndex = this->actor.objBankIndex;
}
- if (objIdx2 >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment);
- this->skelAnime.playSpeed = this->unk_398;
+ if (extraObjIndex >= 0) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment);
+ this->skelAnime.playSpeed = this->curAnimPlaySpeed;
ret = SkelAnime_Update(&this->skelAnime);
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
}
return ret;
}
-s32 func_80A12B78(EnGo* this, PlayState* play) {
+/**
+ * Update sound effects based on animation.
+ */
+s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) {
if (play->csCtx.state == CS_STATE_IDLE) {
- if (this->unk_3DC == 4) {
+ if (this->curAnimIndex == ENGO_ANIM_ROLL) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE);
}
@@ -765,7 +1011,7 @@ s32 func_80A12B78(EnGo* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
}
- } else if ((this->unk_3DC == 2) || (this->unk_3DC == 3)) {
+ } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF);
}
@@ -778,189 +1024,231 @@ s32 func_80A12B78(EnGo* this, PlayState* play) {
return 0;
}
-s32 func_80A12C48(EnGo* this, PlayState* play, s32 arg2) {
- s8 objIdx = this->actor.objBankIndex;
- s8 objIdx2 = -1;
+/**
+ * Change the Goron's animation.
+ *
+ * Goron animations come from one of three categories:
+ * - Basic Goron animations
+ * - Goron athletics like stretches, cheers, etc...
+ * - Spring arrival cutscene animations
+ * Changing animations with this function handles the transitions between the three categories.
+ *
+ * @return True if animation was changed
+ */
+s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) {
+ s8 objIndex = this->actor.objBankIndex;
+ s8 extraObjIndex = -1;
s32 ret = false;
- if ((arg2 >= 18) && (this->unk_289 >= 0)) {
- objIdx2 = this->unk_289;
- } else if ((arg2 >= 10) && (this->unk_288 >= 0)) {
- objIdx2 = this->unk_288;
- } else if (arg2 < 10) {
- objIdx2 = this->actor.objBankIndex;
+ if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) {
+ extraObjIndex = this->hakuginDemoObjIndex;
+ } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) {
+ extraObjIndex = this->taisouObjIndex;
+ } else if (animIndex < ENGO_ANIM_ATHLETICS_MIN) {
+ extraObjIndex = this->actor.objBankIndex;
}
- if (objIdx2 >= 0) {
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment);
- this->unk_3DC = arg2;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2);
- this->unk_398 = this->skelAnime.playSpeed;
- gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment);
+ if (extraObjIndex >= 0) {
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment);
+ this->curAnimIndex = animIndex;
+ ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->curAnimPlaySpeed = this->skelAnime.playSpeed;
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
}
return ret;
}
-void func_80A12D6C(EnGo* this) {
- if ((this->unk_390 & 0x20) && (DECR(this->unk_3BC) == 0)) {
- this->unk_3BE++;
- if (this->unk_3BE >= 4) {
- this->unk_3BC = Rand_S16Offset(30, 30);
- this->unk_3BE = 0;
+/**
+ * Update the eye textures to blink.
+ */
+void EnGo_UpdateEyes(EnGo* this) {
+ if (this->actionFlags & ENGO_FLAG_EYES_OPEN) {
+ if (DECR(this->blinkTimer) == 0) {
+ this->eyeTexIndex++;
+ if (this->eyeTexIndex >= ENGO_EYETEX_CLOSED2) {
+ this->blinkTimer = Rand_S16Offset(30, 30);
+ this->eyeTexIndex = ENGO_EYETEX_OPEN;
+ }
}
}
}
-void func_80A12DF4(EnGo* this, PlayState* play) {
- if (this->unk_3D4 == 0) {
- func_80A12C48(this, play, 9);
- this->unk_3D4++;
- } else if ((this->unk_3D4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A12C48(this, play, 6);
- this->unk_3D4++;
+/**
+ * Play the surprise animation then return to shivering.
+ */
+void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play) {
+ if (this->surprisePhase == 0) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVERINGSURPRISED);
+ this->surprisePhase++;
+ } else if ((this->surprisePhase == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER_IMM);
+ this->surprisePhase++;
}
}
-s32 func_80A12E80(EnGo* this, PlayState* play) {
- u16 temp = play->msgCtx.currentTextId;
+/**
+ * Change the attention target, and dialog reactions of the Gorons outside Darmani's grave.
+ */
+s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play) {
+ u16 textId = play->msgCtx.currentTextId;
Player* player = GET_PLAYER(play);
- if (ENGO_GET_F(&this->actor) != ENGO_F_4) {
+ if (ENGO_GET_TYPE(&this->actor) != ENGO_GRAVEYARD) {
return false;
}
if (player->stateFlags1 & PLAYER_STATE1_40) {
- if (this->unk_392 != temp) {
- switch (temp) {
- case 0xE1A:
- this->unk_390 |= 8;
- this->unk_38C = this->actor.child;
+ if (this->lastTextId != textId) {
+ switch (textId) {
+ case 0xE1A: // Awakening from frozen form, confused, turn to other Goron
+ this->actionFlags |= ENGO_FLAG_ENGAGED;
+ this->attentionTarget = this->actor.child;
break;
- case 0xE1D:
- case 0xE25:
- if (ENGO_GET_70(&this->actor) == ENGO_70_1) {
- this->unk_38C = &GET_PLAYER(play)->actor;
+ case 0xE1D: // Turn to player (Goron form) while stating Darmani is dead
+ case 0xE25: // Turn to player (Other form) while thanking player
+ if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) {
+ this->attentionTarget = &GET_PLAYER(play)->actor;
}
break;
- case 0xE27:
- if (ENGO_GET_70(&this->actor) == ENGO_70_1) {
- this->unk_38C = this->actor.child;
+ case 0xE27: // (spoken) "What's this?..."
+ if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) {
+ this->attentionTarget = this->actor.child;
}
- case 0xE16:
- case 0xE1E:
- this->unk_190 = func_80A12DF4;
+ case 0xE16: // Surprised, questioning if player is Darmani
+ case 0xE1E: // Surprised, seeing Darmani
+ this->graveyardDialogActionFunc = EnGo_UpdateShiverSurprisedAnimation;
break;
- case 0xE1F:
- if (ENGO_GET_70(&this->actor) == ENGO_70_0) {
- this->unk_38C = &GET_PLAYER(play)->actor;
+ case 0xE1F: // Turn to player stating Darmani is not dead
+ if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_GRAVEMAKER) {
+ this->attentionTarget = &GET_PLAYER(play)->actor;
}
break;
+
+ default:
+ break;
}
}
- this->unk_3F4 = 1;
- this->unk_392 = temp;
- } else if (this->unk_3F4 != 0) {
- this->unk_3F4 = 0;
- this->unk_190 = NULL;
- this->unk_392 = 0;
- func_80A12C48(this, play, 5);
- this->unk_390 &= ~8;
+ this->changedText = true;
+ this->lastTextId = textId;
+ } else if (this->changedText) {
+ // If the player isn't talking, and the text has changed, its the last text.
+ // Set everything back to the "Idle" behavior.
+ this->changedText = false;
+ this->graveyardDialogActionFunc = NULL;
+ this->lastTextId = 0;
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER);
+ this->actionFlags &= ~ENGO_FLAG_ENGAGED;
}
- if (this->unk_190 != NULL) {
- this->unk_190(this, play);
+ if (this->graveyardDialogActionFunc != NULL) {
+ this->graveyardDialogActionFunc(this, play);
}
return false;
}
-s32 func_80A12FE8(EnGo* this, PlayState* play) {
+/**
+ * Update the actor's rotation to point towards the target.
+ */
+s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play) {
s32 pad;
- Vec3f sp40;
- Vec3f sp34;
- s16 sp32;
+ Vec3f targetPos;
+ Vec3f thisPos;
+ s16 desiredYaw;
- Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos);
- Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
- sp32 = Math_Vec3f_Yaw(&sp34, &sp40);
+ Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos);
+ Math_Vec3f_Copy(&thisPos, &this->actor.world.pos);
+ desiredYaw = Math_Vec3f_Yaw(&thisPos, &targetPos);
- Math_ApproachS(&this->unk_3B2, (sp32 - this->unk_3B6) - this->actor.shape.rot.y, 4, 0x2AA8);
- this->unk_3B2 = CLAMP(this->unk_3B2, -0x1FFE, 0x1FFE);
+ Math_ApproachS(&this->headRotY, (desiredYaw - this->bodyRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
+ this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE);
- Math_ApproachS(&this->unk_3B6, (sp32 - this->unk_3B2) - this->actor.shape.rot.y, 4, 0x2AA8);
- this->unk_3B6 = CLAMP(this->unk_3B6, -0x1C70, 0x1C70);
+ Math_ApproachS(&this->bodyRotY, (desiredYaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
+ this->bodyRotY = CLAMP(this->bodyRotY, -0x1C70, 0x1C70);
- Math_Vec3f_Copy(&sp34, &this->actor.focus.pos);
-
- if (this->unk_38C->id == ACTOR_PLAYER) {
- sp40.y = ((Player*)this->unk_38C)->bodyPartsPos[7].y + 3.0f;
+ Math_Vec3f_Copy(&thisPos, &this->actor.focus.pos);
+ if (this->attentionTarget->id == ACTOR_PLAYER) {
+ targetPos.y = ((Player*)this->attentionTarget)->bodyPartsPos[7].y + 3.0f;
} else {
- Math_Vec3f_Copy(&sp40, &this->unk_38C->focus.pos);
+ Math_Vec3f_Copy(&targetPos, &this->attentionTarget->focus.pos);
}
- Math_ApproachS(&this->unk_3B0, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B4, 4, 0x2AA8);
- this->unk_3B0 = CLAMP(this->unk_3B0, -0x1554, 0x1554);
+ Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->bodyRotZ, 4, 0x2AA8);
+ this->headRotZ = CLAMP(this->headRotZ, -0x1554, 0x1554);
- Math_ApproachS(&this->unk_3B4, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B0, 4, 0x2AA8);
- this->unk_3B4 = CLAMP(this->unk_3B4, -0xE38, 0xE38);
+ Math_ApproachS(&this->bodyRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->headRotZ, 4, 0x2AA8);
+ this->bodyRotZ = CLAMP(this->bodyRotZ, -0xE38, 0xE38);
return false;
}
-s32 func_80A131F8(EnGo* this, PlayState* play) {
- if (this->unk_3F4 == 0) {
- this->unk_38C = &GET_PLAYER(play)->actor;
+/**
+ * Handle updating of Goron's attention target, and reactions during dialog.
+ */
+s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play) {
+ if (!this->changedText) {
+ this->attentionTarget = &GET_PLAYER(play)->actor;
}
- func_80A12E80(this, play);
+ EnGo_UpdateGraveyardAttentionTargetAndReactions(this, play);
- if (this->unk_390 & 8) {
- this->unk_390 &= ~0x40;
- this->unk_390 |= 0x10;
- func_80A12FE8(this, play);
- } else if (this->unk_390 & 0x10) {
- this->unk_390 &= ~0x10;
- this->unk_3B0 = 0;
- this->unk_3B2 = 0;
- this->unk_3B4 = 0;
- this->unk_3B6 = 0;
- this->unk_3BA = 0x14;
- } else if (DECR(this->unk_3BA) == 0) {
- this->unk_390 |= 0x40;
- this->unk_3BA = 0x14;
+ if (this->actionFlags & ENGO_FLAG_ENGAGED) {
+ this->actionFlags &= ~ENGO_FLAG_LOST_ATTENTION;
+ this->actionFlags |= ENGO_FLAG_FACE_TARGET;
+ EnGo_UpdateRotationToTarget(this, play);
+ } else if (this->actionFlags & ENGO_FLAG_FACE_TARGET) {
+ this->actionFlags &= ~ENGO_FLAG_FACE_TARGET;
+ this->headRotZ = 0;
+ this->headRotY = 0;
+ this->bodyRotZ = 0;
+ this->bodyRotY = 0;
+ this->loseAttentionTimer = 20;
+ } else if (DECR(this->loseAttentionTimer) == 0) {
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->loseAttentionTimer = 20;
}
return true;
}
-void func_80A132C8(EnGo* this, PlayState* play) {
+/**
+ * Idle action function for the gravemaker at the Goron Graveyard.
+ */
+void EnGo_GravemakerIdle(EnGo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y);
+ s16 deltaYaw = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y);
if ((fabsf(this->actor.playerHeightRel) > 20.0f) || (this->actor.xzDistToPlayer > 300.0f)) {
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(temp_v1) >= 0x1C70) ||
- CHECK_WEEKEVENTREG(WEEKEVENTREG_21_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) {
- SubS_UpdateFlags(&this->unk_390, 3, 7);
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(deltaYaw) >= 0x1C70) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) {
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
} else {
- SubS_UpdateFlags(&this->unk_390, 4, 7);
+ SubS_UpdateFlags(&this->actionFlags, 4, 7);
}
}
-void func_80A133A8(EnGo* this, PlayState* play) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) {
- SubS_UpdateFlags(&this->unk_390, 3, 7);
+/**
+ * Idle action function for the Goron frozen at the Goron Graveyard
+ */
+void EnGo_FrozenIdle(EnGo* this, PlayState* play) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) {
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
} else {
- SubS_UpdateFlags(&this->unk_390, 4, 7);
+ SubS_UpdateFlags(&this->actionFlags, 4, 7);
}
}
-Actor* func_80A13400(EnGo* this, PlayState* play) {
+/**
+ * Obtain a pointer to the gravemaker at the Goron Graveyard.
+ */
+Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play) {
Actor* actor;
Actor* retActor = NULL;
@@ -968,8 +1256,8 @@ Actor* func_80A13400(EnGo* this, PlayState* play) {
actor = SubS_FindActor(play, retActor, ACTORCAT_NPC, ACTOR_EN_GO);
retActor = actor;
- if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_F(actor) == ENGO_F_4) &&
- (ENGO_GET_70(actor) == ENGO_70_0)) {
+ if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_TYPE(actor) == ENGO_GRAVEYARD) &&
+ (ENGO_GET_SUBTYPE(actor) == ENGO_GRAVEYARD_GRAVEMAKER)) {
return retActor;
}
@@ -987,15 +1275,27 @@ Actor* func_80A13400(EnGo* this, PlayState* play) {
return NULL;
}
-void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) {
+/**
+ * The Medigoron's collider radius is greater when it needs to be able to drop the Powder Keg in front of the player.
+ */
+void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES) ||
+ (play->actorCtx.flags & ACTORCTX_FLAG_0) // Same check occurs in Powder Keg ammo check MsgScript Command
+ || isGivenPowderKeg) {
this->colliderSphere.dim.modelSphere.radius = 300;
} else {
this->colliderSphere.dim.modelSphere.radius = 380;
}
}
-s32 func_80A134F4(EnGo* this, s16 csId) {
+/**
+ * Helper to change a cutscene.
+ *
+ * @returns Status of cutscene change
+ * @retval true Cutscene has started
+ * @retval false Cutscene is queued to start
+ */
+s32 EnGo_ChangeCutscene(EnGo* this, s16 csId) {
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
} else if (CutsceneManager_IsNext(csId)) {
@@ -1006,44 +1306,66 @@ s32 func_80A134F4(EnGo* this, s16 csId) {
return false;
}
-s32 func_80A13564(EnGo* this, f32 arg1, f32 arg2, s32 arg3) {
+/**
+ * Handle the animation of the "Goron Pound".
+ *
+ * There are Several Phases to the pound:
+ * - Phase 1: (Once in Rolled-Up form) the pound starts by leaping into the air.
+ * - The Goron rotates until its back faces the ground at its peak.
+ * - The Goron distorts shape until at its peak.
+ * - Transition: At the peak, all movement is halted.
+ * - Phase 2: While hanging, the Goron reverts back to normal shape.
+ * - Transition: At reaching maxHangTime, ENGO_POUND_INITIAL_FALL_VEL is applied.
+ * - Phase 3: The Goron falls to the ground.
+ * - Transition: At reaching the ground.
+ *
+ * @param initialVelocity Initial +Y velocity of the pound.
+ * @param maxDistortion Maximum distortion of the Goron's shape.
+ * @param maxHangtime Maximum hangtime at the peak of the pound.
+ * @returns True when pound finishes.
+ */
+s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime) {
s32 pad;
- f32 temp_f0 = 1.0f;
- f32 temp_f14 = this->actor.velocity.y + this->actor.gravity;
- s32 ret;
+ f32 rotAndDistortFactor = 1.0f;
+ f32 velocity = this->actor.velocity.y + this->actor.gravity;
+ s32 isFinished;
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
- ret = true;
+ // Transition 3->DONE
+ isFinished = true;
} else {
- if (temp_f14 > 0.0f) {
- temp_f0 = temp_f14 / arg1;
- this->actor.shape.rot.x += (s16)(9100.0f * temp_f0);
- this->unk_3AE = 0;
+ if (velocity > 0.0f) {
+ // PHASE 1: Goron is rising
+ rotAndDistortFactor = velocity / initialVelocity;
+ this->actor.shape.rot.x += (s16)(0x238C * rotAndDistortFactor);
+ this->elapsedHangtime = 0;
} else if ((s32)this->actor.velocity.y == 0) {
- if (arg3 >= this->unk_3AE) {
- temp_f0 = (f32)this->unk_3AE / arg3;
+ if (maxHangtime >= this->elapsedHangtime) {
+ // PHASE 2: Goron is hanging in the air
+ rotAndDistortFactor = (f32)this->elapsedHangtime / maxHangtime;
} else {
- this->actor.gravity = -6.0f;
+ // Transition 2->3: Hanging is complete
+ this->actor.gravity = ENGO_POUND_INITIAL_FALL_VEL;
}
- this->unk_3AE++;
- } else if (this->unk_3AE == 0) {
+ this->elapsedHangtime++;
+ } else if (this->elapsedHangtime == 0) {
+ // Transition 1->2: Goron has reached the peak
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
- temp_f0 = temp_f14 / arg1;
+ rotAndDistortFactor = velocity / initialVelocity;
+ } else {
+ // PHASE 3: Goron is falling (Just letting gravity take effect)
}
- ret = false;
+ isFinished = false;
}
- this->unk_3A8 = (1.0f - temp_f0) * arg2;
- this->actor.scale.x = this->unk_3A4 - this->unk_3A8;
- this->actor.scale.y = this->unk_3A4 + this->unk_3A8;
+ // Handle shape distortions
+ this->scaleFactorPoundDistortion = (1.0f - rotAndDistortFactor) * maxDistortion;
+ this->actor.scale.x = this->scaleFactor - this->scaleFactorPoundDistortion;
+ this->actor.scale.y = this->scaleFactor + this->scaleFactorPoundDistortion;
+ this->actor.scale.z = MAX(this->actor.scale.x, this->actor.scale.y);
- if (this->actor.scale.y < this->actor.scale.x) {
- this->actor.scale.z = this->actor.scale.x;
- } else {
- this->actor.scale.z = this->actor.scale.y;
- }
- return ret;
+ return isFinished;
}
void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) {
@@ -1054,7 +1376,10 @@ void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) {
Quake_SetPerturbations(quakeIndex, y, 0, 0, 0);
}
-void func_80A13728(EnGo* this, PlayState* play) {
+/**
+ * Create the visual effects caused by the gatekeeper's pound.
+ */
+void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play) {
EnGo_RequestQuake(play, 27767, 7, 20);
play->actorCtx.unk2 = 4;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y,
@@ -1062,27 +1387,30 @@ void func_80A13728(EnGo* this, PlayState* play) {
EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f);
}
-void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) {
- u32 frames1;
- u32 frames2;
+/**
+ * Draw the ice encasing a frozen Goron.
+ */
+void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha) {
+ u32 y1;
+ u32 y2;
- if (this->unk_390 & 0x400) {
+ if (this->actionFlags & ENGO_FLAG_FROZEN) {
Matrix_Push();
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
- Matrix_Scale(arg2 * 0.7f, arg2 * 0.8f, arg2, MTXMODE_APPLY);
+ Matrix_Scale(scale * 0.7f, scale * 0.8f, scale, MTXMODE_APPLY);
func_800B8118(&this->actor, play, 0);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- frames1 = play->gameplayFrames % 256;
- frames2 = (play->gameplayFrames * 2) % 256;
+ y1 = play->gameplayFrames % 256;
+ y2 = (play->gameplayFrames * 2) % 256;
gSPSegment(POLY_XLU_DISP++, 0x08,
- Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, frames1, 0x20, 0x10, 1, 0, frames2, 0x40, 0x20));
- gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)arg3);
+ Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, y1, 0x20, 0x10, 1, 0, y2, 0x40, 0x20));
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)alpha);
gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL);
CLOSE_DISPS(play->state.gfxCtx);
@@ -1091,154 +1419,172 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) {
}
}
-void func_80A139E4(EnGo* this) {
- static Vec3f D_80A16698 = { 0.0f, 0.06f, 0.0f };
- Vec3f sp54;
- Vec3f sp48;
- s16 sp46 = Rand_ZeroOne() * 360.0f * 182.0f;
+/**
+ * Initialize the steam effect used for melting ice.
+ */
+void EnGo_MakeSteam(EnGo* this) {
+ static Vec3f sAccel = { 0.0f, 0.06f, 0.0f };
+ Vec3f tempPos;
+ Vec3f effectPos;
+ s16 rotAngle = Rand_ZeroOne() * 360.0f * 182.0f;
- Math_Vec3f_Copy(&sp54, &gZeroVec3f);
- sp54.z = 28.0f;
- Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, sp46, &sp54, &sp48);
- sp48.y = (Rand_ZeroOne() * 10.0f) + 4.0f;
- sp48.y += this->actor.floorHeight;
- func_80A10FD0(&this->unk_3F8[16], sp48, D_80A16698, gZeroVec3f, 0.01f, 0.002f, 16);
+ Math_Vec3f_Copy(&tempPos, &gZeroVec3f);
+ tempPos.z = 28.0f;
+ Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, rotAngle, &tempPos, &effectPos);
+ effectPos.y = (Rand_ZeroOne() * 10.0f) + 4.0f;
+ effectPos.y += this->actor.floorHeight;
+ EnGo_InitSteam(&this->effectTable[ENGO_SNOW_EFFECT_COUNT], effectPos, sAccel, gZeroVec3f, ENGO_NORMAL_SCALE,
+ (0.2f * ENGO_NORMAL_SCALE), ENGO_DUST_STEAM_LIFETIME);
}
-s32 func_80A13B1C(EnGo* this, PlayState* play) {
+/**
+ * Transition through the cutscenes when the gatekeeper is opening the shrine.
+ *
+ * @return True when cutscenes end.
+ */
+s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
- s32 pad;
+ EnGo* this = THIS;
s32 ret = false;
- switch (this->unk_3C0) {
+ switch (this->cutsceneState) {
case 0:
this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
- if (func_80A134F4(this, this->csId)) {
- this->unk_3C4 = 1;
- this->unk_3C0 = 1;
- } else {
+ if (!EnGo_ChangeCutscene(this, this->csId)) {
break;
}
-
+ this->gatekeeperAnimState = 1;
+ this->cutsceneState = 1;
+ // fallthrough
case 1:
- if (CutsceneManager_GetCurrentCsId() != this->csId) {
- this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
- this->unk_3C0 = 2;
- } else {
+ if (CutsceneManager_GetCurrentCsId() == this->csId) {
break;
}
-
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ this->cutsceneState = 2;
+ // fallthrough
case 2:
- if (func_80A134F4(this, this->csId)) {
- this->unk_3C0 = 3;
- } else {
+ if (!EnGo_ChangeCutscene(this, this->csId)) {
break;
}
-
+ this->cutsceneState = 3;
+ // fallthrough
case 3:
if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_TALK, NULL);
- this->unk_3C0 = 4;
+ this->cutsceneState = 4;
} else if (CutsceneManager_GetCurrentCsId() == this->csId) {
CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
}
+ // fallthrough
+ default:
+ break;
}
- switch (this->unk_3C4) {
+ switch (this->gatekeeperAnimState) {
case 1:
- func_80A12C48(this, play, 4);
- this->unk_390 |= 0x4000;
- this->unk_3C4++;
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL);
+ this->actionFlags |= ENGO_FLAG_ROLLING_UP;
+ this->gatekeeperAnimState++;
break;
case 2:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->unk_390 &= ~0x4000;
- this->unk_390 &= ~0x80;
- this->unk_390 |= 0x200;
- this->unk_3C4++;
- this->unk_3C2 = 0;
- this->actor.shape.yOffset = 14.0f;
+ this->actionFlags &= ~ENGO_FLAG_ROLLING_UP;
+ this->actionFlags &= ~ENGO_FLAG_STANDING;
+ this->actionFlags |= ENGO_FLAG_ROLLED_UP;
+ this->gatekeeperAnimState++;
+ this->cutsceneDelayTimer = 0;
+ this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET;
}
break;
case 3:
- this->unk_3C2++;
- if (this->unk_3C2 >= 10) {
+ this->cutsceneDelayTimer++;
+ if (this->cutsceneDelayTimer >= 10) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_JUMP);
- this->actor.velocity.y = 10.0f;
+ this->actor.velocity.y = ENGO_POUND_INITIAL_RISE_VEL;
this->actor.gravity = -1.0f;
- this->unk_3C4++;
+ this->gatekeeperAnimState++;
}
break;
case 4:
- if (func_80A13564(this, 10.0f, 0.004f, 6)) {
+ if (EnGo_HandleGatekeeperPoundCutscene(this, ENGO_POUND_INITIAL_RISE_VEL, (0.4f) * ENGO_NORMAL_SCALE, 6)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_LAND_BIG);
- func_80A13728(this, play);
- this->unk_3C4++;
- this->unk_3C2 = 0;
- SET_WEEKEVENTREG(WEEKEVENTREG_88_40);
+ EnGo_CreateGatekeeperPoundEffects(this, play);
+ this->gatekeeperAnimState++;
+ this->cutsceneDelayTimer = 0;
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE);
}
break;
case 5:
- this->unk_3C2++;
- if (this->unk_3C2 >= 10) {
- func_80A12C48(this, play, 5);
+ this->cutsceneDelayTimer++;
+ if (this->cutsceneDelayTimer >= 10) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER);
this->actor.shape.rot.x = 0;
- this->unk_390 &= ~0x200;
- this->unk_390 |= 0x80;
- this->unk_3C4++;
+ this->actionFlags &= ~ENGO_FLAG_ROLLED_UP;
+ this->actionFlags |= ENGO_FLAG_STANDING;
+ this->gatekeeperAnimState++;
}
break;
case 6:
- this->unk_3C0++;
- if (this->unk_3C0 >= 65) {
+ this->cutsceneState++;
+ if (this->cutsceneState >= 65) {
switch (player->transformation) {
case PLAYER_FORM_HUMAN:
- SET_WEEKEVENTREG(WEEKEVENTREG_88_80);
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN);
break;
case PLAYER_FORM_GORON:
- SET_WEEKEVENTREG(WEEKEVENTREG_89_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON);
break;
case PLAYER_FORM_ZORA:
- SET_WEEKEVENTREG(WEEKEVENTREG_89_02);
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA);
break;
case PLAYER_FORM_DEKU:
- SET_WEEKEVENTREG(WEEKEVENTREG_89_01);
+ SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU);
+ break;
+
+ default:
break;
}
ret = true;
}
break;
+
+ default:
+ break;
}
Actor_MoveWithGravity(&this->actor);
return ret;
}
-s32 func_80A13E80(EnGo* this, PlayState* play) {
- static Vec3f D_80A166A4 = { 0.0f, 200.0f, 280.0f };
- s32 pad;
- Vec3f sp48;
+/**
+ * Medigoron's MsgEvent callback to give the Powder Keg for the test.
+ */
+s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play) {
+ static Vec3f sPowderKegSpawnOffset = { 0.0f, 200.0f, 280.0f };
+ EnGo* this = THIS;
+ Vec3f powderKegSpawnPos;
s32 ret = false;
- switch (this->unk_3C0) {
+ switch (this->cutsceneState) {
case 0:
this->csId = this->actor.csId;
- if (func_80A134F4(this, this->csId)) {
- this->unk_3C0++;
+ if (EnGo_ChangeCutscene(this, this->csId)) {
+ this->cutsceneState++;
}
break;
case 1:
- func_80A12C48(this, play, 7);
- this->unk_3C0++;
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_DROPKEG);
+ this->cutsceneState++;
case 2:
if (Animation_OnFrame(&this->skelAnime, 16.0f)) {
@@ -1246,262 +1592,349 @@ s32 func_80A13E80(EnGo* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A12C48(this, play, 1);
- Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166A4, &sp48);
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE_IMM);
+ Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sPowderKegSpawnOffset,
+ &powderKegSpawnPos);
gSaveContext.powderKegTimer = 2400;
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, 1, 0, 0, 0);
- func_80A134B0(this, play, 1);
- this->unk_3C2 = 0;
- this->unk_3C0++;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, powderKegSpawnPos.x, powderKegSpawnPos.y,
+ powderKegSpawnPos.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, 0, 0, BOMB_TYPE_BODY);
+ EnGo_UpdateMedigoronColliderRadius(this, play, true);
+ this->cutsceneDelayTimer = 0;
+ this->cutsceneState++;
}
break;
case 3:
- if (this->unk_3C2 >= 60) {
+ if (this->cutsceneDelayTimer >= 60) {
CutsceneManager_Stop(this->csId);
- this->unk_3C2 = 0;
- this->unk_3C0 = 0;
+ this->cutsceneDelayTimer = 0;
+ this->cutsceneState = 0;
ret = true;
} else {
- this->unk_3C2++;
+ this->cutsceneDelayTimer++;
}
break;
+
+ default:
+ break;
}
return ret;
}
-void func_80A14018(EnGo* this, PlayState* play) {
- static Vec3f D_80A166B0 = { 0.0f, 0.0f, 40.0f };
- static s32 D_80A166BC[] = { 11, 10, 12, 13, 14, 17 };
- Vec3f sp2C;
- s32 phi_v0 = ENGO_GET_70(&this->actor) % 6;
+/**
+ * Update the stretching racer's animation and actionFlags.
+ *
+ * 'ENGO_ATHLETIC_A' through 'ENGO_ATHLETIC_D' exchange animations before and after the race, while the hamstring
+ * stretchers have the same animation every time.
+ *
+ * @see EnGo_Idle
+ */
+void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) {
+ static Vec3f sStretchingGoronOffset = { 0.0f, 0.0f, 40.0f };
+ static s32 sSubtypeToAnimIndex[] = {
+ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, ENGO_ANIM_DOUBLE_ARM_SIDEBEND, ENGO_ANIM_SHAKE_LIMBS,
+ ENGO_ANIM_SINGLE_ARM_SIDEBEND, ENGO_ANIM_SITTING_STRETCH, ENGO_ANIM_HELP_SITTING_STRETCH,
+ };
+ Vec3f newSittingStretcherPos;
- if (phi_v0 < 4) {
- phi_v0 = ((gSaveContext.eventInf[2] & 0xF) + phi_v0) % 4;
+ // The first four Racer Gorons have different stretches depending on context
+ // The last two remain the same (since they are dependent on one-another)
+ s32 subtypeLookup = ENGO_GET_SUBTYPE(&this->actor) % 6;
+
+ if (subtypeLookup < 4) {
+ subtypeLookup = ((gSaveContext.eventInf[2] & 0xF) + subtypeLookup) % 4;
}
- func_80A12C48(this, play, D_80A166BC[phi_v0]);
+ EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]);
- if (this->unk_3DC == 14) {
- Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166B0, &sp2C);
- Math_Vec3f_Copy(&this->actor.world.pos, &sp2C);
+ // Move the sitting Goron forward, since their spawn location is the same as their standing counterpart.
+ if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) {
+
+ Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset,
+ &newSittingStretcherPos);
+ Math_Vec3f_Copy(&this->actor.world.pos, &newSittingStretcherPos);
}
+
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_SetScale(&this->actor, this->unk_3A4);
- this->unk_3EC = 0;
- this->unk_390 = 0;
- this->unk_390 |= (0x40 | 0x20);
+ Actor_SetScale(&this->actor, this->scaleFactor);
+ this->sleepState = ENGO_AWAKE;
+ this->actionFlags = 0;
+ this->actionFlags |= (ENGO_FLAG_LOST_ATTENTION | ENGO_FLAG_EYES_OPEN);
this->actor.gravity = 0.0f;
}
-void func_80A14104(EnGo* this, PlayState* play) {
- static s32 D_80A166D4[] = { 15, 16 };
- s16 temp;
+/**
+ * Update the Goron's animation and actionFlags to 'spectating'.
+ *
+ * Spectators engage in one of two cheering animations. Either cheering with their hands above their head, or
+ * cupping their hands infront of their face and shouting.
+ *
+ * @see EnGo_Idle
+ */
+void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) {
+ static s32 sSubtypeToAnimIndex[] = { ENGO_ANIM_CHEER, ENGO_ANIM_SHOUT };
+ s16 animFrame;
+
+ EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[ENGO_GET_SUBTYPE(&this->actor) % 2]);
+ animFrame = Rand_ZeroOne() * this->skelAnime.endFrame;
+ this->skelAnime.curFrame = animFrame;
- func_80A12C48(this, play, D_80A166D4[ENGO_GET_70(&this->actor) % 2]);
- temp = Rand_ZeroOne() * this->skelAnime.endFrame;
- this->skelAnime.curFrame = temp;
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_SetScale(&this->actor, this->unk_3A4);
- this->unk_3EC = 0;
- this->unk_390 = 0;
- this->unk_390 |= 0x40;
- this->unk_390 |= 0x20;
+ Actor_SetScale(&this->actor, this->scaleFactor);
+ this->sleepState = ENGO_AWAKE;
+ this->actionFlags = 0;
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->actionFlags |= ENGO_FLAG_EYES_OPEN;
this->actor.gravity = 0.0f;
}
-void func_80A141D4(EnGo* this, PlayState* play) {
- Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit1);
+/**
+ * Update the Goron's animation and actionFlags to 'frozen'.
+ *
+ * The Goron will shiver upon awakening, but is otherwise encased in a block of ice which deals damage upon contact.
+ *
+ * @see EnGo_Frozen
+ */
+void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) {
+ Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->unk_3DC = -1;
- func_80A12C48(this, play, 5);
- this->unk_3EC = 0;
- this->unk_39C = (this->unk_3A4 / 0.01f) * 0.9f;
- this->unk_3BE = 2;
- this->unk_390 = 0;
- this->unk_390 |= 0x40;
- this->unk_390 |= 0x400;
- this->unk_3A0 = 100.0f;
+ this->curAnimIndex = -1;
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER);
+ this->sleepState = ENGO_AWAKE;
+ this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f;
+ this->eyeTexIndex = ENGO_EYETEX_CLOSED;
+ this->actionFlags = 0;
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->actionFlags |= ENGO_FLAG_FROZEN;
+ this->iceBlockAlpha = 100.0f;
}
-void func_80A1428C(EnGo* this, PlayState* play) {
- s16 temp;
- Vec3f sp30;
- Vec3f sp24;
+/**
+ * Update the Goron Gatekeeper's animation and actionFlags to 'snowball'.
+ *
+ * @see EnGo_Snowball
+ */
+void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play) {
+ s16 yawToPathPoint;
+ Vec3f currentPos;
+ Vec3f startingPathPoint;
- Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
- if (this->unk_284 != NULL) {
+ Math_Vec3f_Copy(¤tPos, &this->actor.world.pos);
+ if (this->gatekeeperPath != NULL) {
this->actor.flags &= ~ACTOR_FLAG_2000000;
- SubS_CopyPointFromPathCheckBounds(this->unk_284, 0, &sp24);
- temp = Math_Vec3f_Yaw(&sp30, &sp24);
- this->actor.shape.rot.y = temp;
- this->actor.world.rot.y = temp;
+ SubS_CopyPointFromPathCheckBounds(this->gatekeeperPath, 0, &startingPathPoint);
+ yawToPathPoint = Math_Vec3f_Yaw(¤tPos, &startingPathPoint);
+ this->actor.shape.rot.y = yawToPathPoint;
+ this->actor.world.rot.y = yawToPathPoint;
}
- this->unk_390 = 0;
- this->unk_390 |= 0x100;
- this->actor.shape.yOffset = 46.0f;
+ this->actionFlags = 0;
+ this->actionFlags |= ENGO_FLAG_SNOWBALLED;
+ this->actor.shape.yOffset = ENGO_SNOWBALL_Y_OFFSET;
this->actor.gravity = -1.0f;
}
-void func_80A14324(EnGo* this, PlayState* play) {
- func_80A12C48(this, play, 8);
- Actor_SetScale(&this->actor, this->unk_3A4);
- this->unk_390 = 0;
+/**
+ * Update the Goron's animation and actionFlags to 'covering ears'.
+ *
+ * @see EnGo_Idle
+ */
+void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_COVEREARS);
+ Actor_SetScale(&this->actor, this->scaleFactor);
+ this->actionFlags = 0;
this->actor.gravity = -1.0f;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- this->unk_3EC = 0;
- this->unk_390 |= 0x40;
- this->unk_3BC = 0;
- this->unk_3BE = 4;
- this->unk_39C = 0.0f;
- this->unk_3A0 = 0.0f;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ this->sleepState = ENGO_AWAKE;
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->blinkTimer = 0;
+ this->eyeTexIndex = ENGO_EYETEX_CLOSED2;
+ this->iceBlockScale = 0.0f;
+ this->iceBlockAlpha = 0.0f;
}
-void func_80A143A8(EnGo* this, PlayState* play) {
- func_80A12C48(this, play, 5);
- Actor_SetScale(&this->actor, this->unk_3A4);
- this->unk_390 = 0;
+/**
+ * Update the Goron's animation and actionFlags to 'shivering'.
+ *
+ * @see EnGo_Idle
+ */
+void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER);
+ Actor_SetScale(&this->actor, this->scaleFactor);
+ this->actionFlags = 0;
this->actor.gravity = -1.0f;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- this->unk_3EC = 0;
- this->unk_390 |= 0x40;
- this->unk_390 |= 0x20;
- this->unk_3BC = 0;
- this->unk_3BE = 0;
- this->unk_39C = 0.0f;
- this->unk_3A0 = 0.0f;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ this->sleepState = ENGO_AWAKE;
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->actionFlags |= ENGO_FLAG_EYES_OPEN;
+ this->blinkTimer = 0;
+ this->eyeTexIndex = ENGO_EYETEX_OPEN;
+ this->iceBlockScale = 0.0f;
+ this->iceBlockAlpha = 0.0f;
}
-void func_80A14430(EnGo* this, PlayState* play) {
+/**
+ * Setup a Goron stretching at the racetrack.
+ *
+ * Stretching Gorons placed in the starting area of the racetrack doing various stretches.
+ */
+void EnGo_SetupAthletic(EnGo* this, PlayState* play) {
if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) ||
(gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) &&
(CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) {
- func_80A14018(this, play);
- this->actionFunc = func_80A149B0;
+ EnGo_ChangeToStretchingAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
} else {
Actor_Kill(&this->actor);
}
}
-void func_80A1449C(EnGo* this, PlayState* play) {
+/**
+ * Setup a Goron spectating at the racetrack.
+ *
+ * Spectators to the Goron races cannot be engaged, they simply stand idle and cheer.
+ */
+void EnGo_SetupSpectator(EnGo* this, PlayState* play) {
if ((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) ||
(gSaveContext.save.entrance == ENTRANCE(CUTSCENE, 0))) {
- func_80A14104(this, play);
- this->actionFunc = func_80A149B0;
+ EnGo_ChangeToSpectatingAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
} else {
Actor_Kill(&this->actor);
}
}
-void func_80A144F4(EnGo* this, PlayState* play) {
+/**
+ * Setup the Goron Shrine's Gatekeeper.
+ *
+ * When spoken to, can open the Goron Shrine for the player.
+ * - On Day 1: Can be found in the open, shivering.
+ * - On Days 2,3: Can be found in a snowball.
+ */
+void EnGo_SetupGatekeeper(EnGo* this, PlayState* play) {
if (gSaveContext.save.day >= 2) {
- this->unk_284 = SubS_GetDayDependentPath(play, ENGO_GET_7F80(&this->actor), 0xFF, &this->unk_3E4);
- if (this->unk_284 != NULL) {
- this->unk_3E4 = 1;
+ this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH_INDEX(&this->actor), ENGO_PATH_INDEX_NONE,
+ &this->indexPathPoint);
+ if (this->gatekeeperPath != NULL) {
+ this->indexPathPoint = 1;
}
- func_80A1428C(this, play);
- this->actionFunc = func_80A153FC;
- this->unk_3D8 = func_80A13B1C;
+ EnGo_ChangeToSnowballAnimation(this, play);
+ this->actionFunc = EnGo_Snowball;
+ this->msgEventFunc = EnGo_HandleOpenShrineCutscene;
} else {
- func_80A143A8(this, play);
- this->actionFunc = func_80A149B0;
- this->unk_3D8 = func_80A13B1C;
+ EnGo_ChangeToShiveringAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
+ this->msgEventFunc = EnGo_HandleOpenShrineCutscene;
}
}
-void func_80A145AC(EnGo* this, PlayState* play) {
- if ((ENGO_GET_70(&this->actor) == ENGO_70_1) &&
+/**
+ * Setup a Goron at the graveyard
+ *
+ * The Gorons are together, one shivering from the cold, another frozen solid.
+ */
+void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play) {
+ if ((ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) &&
(((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) &&
(play->csCtx.scriptIndex == 0)) ||
- !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) {
- this->actor.child = func_80A13400(this, play);
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON))) {
+ this->actor.child = EnGo_FindGravemaker(this, play);
this->actor.child->child = &this->actor;
- func_80A141D4(this, play);
- this->actionFunc = func_80A14E14;
+ EnGo_ChangeToFrozenAnimation(this, play);
+ this->actionFunc = EnGo_Frozen;
} else {
- func_80A143A8(this, play);
- this->actionFunc = func_80A149B0;
+ EnGo_ChangeToShiveringAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
}
}
-void func_80A14668(EnGo* this, PlayState* play) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
- func_80A14324(this, play);
- this->actionFunc = func_80A149B0;
+/**
+ * Setup a shrine Goron.
+ *
+ * There are three, but they all behave the same way aside from dialog.
+ */
+void EnGo_SetupShrineGoron(EnGo* this, PlayState* play) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
+ EnGo_ChangeToCoveringEarsAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
} else {
- func_80A143A8(this, play);
- this->actionFunc = func_80A149B0;
+ EnGo_ChangeToShiveringAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
}
}
-void func_80A146CC(EnGo* this, PlayState* play) {
- func_80A134B0(this, play, 0);
- func_80A12C48(this, play, 0);
- this->unk_3A4 *= 5.0f;
- Actor_SetScale(&this->actor, this->unk_3A4);
+/**
+ * Setup the Medigoron in the Powder Keg Shop.
+ *
+ * This Goron sells Powder Kegs, and gives the player a Powder Keg as part of a challenge to gain
+ * the privilege to buy them.
+ */
+void EnGo_SetupMedigoron(EnGo* this, PlayState* play) {
+ EnGo_UpdateMedigoronColliderRadius(this, play, false);
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE);
+ this->scaleFactor *= ENGO_MEDIGORON_SCALE_MULTIPLIER;
+ Actor_SetScale(&this->actor, this->scaleFactor);
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.targetMode = 3;
- this->unk_390 = 0;
+ this->actionFlags = 0;
this->actor.gravity = -1.0f;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- this->unk_390 |= 0x40;
- this->unk_390 |= 0x20;
- this->unk_3D8 = func_80A13E80;
- this->actionFunc = func_80A149B0;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->actionFlags |= ENGO_FLAG_EYES_OPEN;
+ this->msgEventFunc = EnGo_HandleGivePowderKegCutscene;
+ this->actionFunc = EnGo_Idle;
}
-void func_80A14798(EnGo* this, PlayState* play) {
- EffectTireMarkInit sp38 = {
- 0,
- 62,
- { 0, 0, 15, 100 },
- };
+/**
+ * Default setup function as the initial action function.
+ */
+void EnGo_SetupInitialAction(EnGo* this, PlayState* play) {
+ EffectTireMarkInit tireMarkInit = { 0, 62, { 0, 0, 15, 100 } };
- if ((this->unk_288 < 0) || SubS_IsObjectLoaded(this->unk_288, play) || (this->unk_289 < 0) ||
- SubS_IsObjectLoaded(this->unk_289, play)) {
+ if (((this->taisouObjIndex < 0) || SubS_IsObjectLoaded(this->taisouObjIndex, play)) ||
+ ((this->hakuginDemoObjIndex < 0) || SubS_IsObjectLoaded(this->hakuginDemoObjIndex, play))) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable,
GORON_LIMB_MAX);
- this->unk_3DC = -1;
- func_80A12C48(this, play, 2);
- this->actor.draw = func_80A15FEC;
+ this->curAnimIndex = ENGO_ANIM_INVALID;
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL);
+ this->actor.draw = EnGo_Draw;
Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit);
- Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit2);
+ Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- Effect_Add(play, &this->unk_3E8, EFFECT_TIRE_MARK, 0, 0, &sp38);
+ Effect_Add(play, &this->indexEffect, EFFECT_TIRE_MARK, 0, 0, &tireMarkInit);
this->actor.targetMode = 1;
- this->unk_3A4 = 0.01f;
- this->unk_3D8 = NULL;
+ this->scaleFactor = ENGO_NORMAL_SCALE;
+ this->msgEventFunc = NULL;
- switch (ENGO_GET_F(&this->actor)) {
- case ENGO_F_1:
- func_80A14430(this, play);
+ switch (ENGO_GET_TYPE(&this->actor)) {
+ case ENGO_ATHLETIC:
+ EnGo_SetupAthletic(this, play);
break;
- case ENGO_F_2:
- func_80A1449C(this, play);
+ case ENGO_SPECTATOR:
+ EnGo_SetupSpectator(this, play);
break;
- case ENGO_F_3:
- func_80A144F4(this, play);
+ case ENGO_GATEKEEPER:
+ EnGo_SetupGatekeeper(this, play);
break;
- case ENGO_F_4:
- func_80A145AC(this, play);
+ case ENGO_GRAVEYARD:
+ EnGo_SetupGraveyardGoron(this, play);
break;
- case ENGO_F_5:
- case ENGO_F_6:
- case ENGO_F_7:
- func_80A14668(this, play);
+ case ENGO_ASIDE_STORE:
+ case ENGO_ASIDE_ELDERSROOM:
+ case ENGO_ASIDE_ELDERSSON:
+ EnGo_SetupShrineGoron(this, play);
break;
- case ENGO_F_8:
- func_80A146CC(this, play);
+ case ENGO_MEDIGORON:
+ EnGo_SetupMedigoron(this, play);
break;
default:
@@ -1511,147 +1944,192 @@ void func_80A14798(EnGo* this, PlayState* play) {
}
}
-void func_80A149B0(EnGo* this, PlayState* play) {
- s16 sp26 = this->actor.world.rot.y;
+/**
+ * Default action for the Gorons. Different types have different default actions.
+ *
+ * The default action possibilities include:
+ * - Shivering
+ * - Covering ears
+ * - Spectating (cheering or shouting)
+ * - Stretching (side-to-side squatting, two-arm side bend, limb shake, one-arm side bend, hamstring stretching while
+ * sitting, and helping the hamstring stretching Goron.)
+ */
+void EnGo_Idle(EnGo* this, PlayState* play) {
+ s16 targetRot = this->actor.world.rot.y;
- if ((ENGO_GET_F(&this->actor) == ENGO_F_2) && (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) {
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_SPECTATOR) &&
+ (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) {
+ // Spectators only cheer. No other interactions
Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_CHEER - SFX_FLAG);
- } else if (ENGO_GET_F(&this->actor) != ENGO_F_8) {
- if (func_80A1222C(this, play)) {
- SubS_UpdateFlags(&this->unk_390, 0, 7);
- this->unk_3EC = 1;
- this->actionFunc = func_80A14B30;
- } else if (ENGO_GET_F(&this->actor) == ENGO_F_4) {
- switch (ENGO_GET_70(&this->actor)) {
- case ENGO_70_0:
- func_80A132C8(this, play);
+ } else if (ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) {
+ // All others besides the Medigoron in the Powder Keg Shop can fall asleep
+ if (EnGo_IsFallingAsleep(this, play)) {
+ SubS_UpdateFlags(&this->actionFlags, 0, 7);
+ this->sleepState = ENGO_ASLEEP_POS;
+ this->actionFunc = EnGo_Sleep;
+ } else if (ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) {
+ switch (ENGO_GET_SUBTYPE(&this->actor)) {
+ case ENGO_GRAVEYARD_GRAVEMAKER:
+ EnGo_GravemakerIdle(this, play);
break;
- case ENGO_70_1:
- func_80A133A8(this, play);
+ case ENGO_GRAVEYARD_FROZEN:
+ EnGo_FrozenIdle(this, play);
+ break;
+
+ default:
break;
}
- } else if (ENGO_GET_F(&this->actor) == ENGO_F_1) {
+ } else if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) {
if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 0x3FFC) {
- SubS_UpdateFlags(&this->unk_390, 3, 7);
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
} else {
- SubS_UpdateFlags(&this->unk_390, 0, 7);
+ SubS_UpdateFlags(&this->actionFlags, 0, 7);
}
}
}
- Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8);
+ Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8);
}
-void func_80A14B30(EnGo* this, PlayState* play) {
- s16 sp26 = this->actor.world.rot.y;
+/**
+ * Handles falling asleep, as well as snoring while asleep.
+ */
+void EnGo_Sleep(EnGo* this, PlayState* play) {
+ s16 targetRot = this->actor.world.rot.y;
u16 sfxId;
- if (func_80A1222C(this, play)) {
- this->unk_3EC = 1;
+ if (EnGo_IsFallingAsleep(this, play)) {
+ this->sleepState = ENGO_ASLEEP_POS;
}
- if (this->unk_390 & 0x4000) {
+ if (this->actionFlags & ENGO_FLAG_ROLLING_UP) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->unk_390 &= ~0x4000;
- this->unk_390 |= 0x200;
- if (this->unk_3EC != 0) {
- this->unk_3AE = 0;
+ this->actionFlags &= ~ENGO_FLAG_ROLLING_UP;
+ this->actionFlags |= ENGO_FLAG_ROLLED_UP;
+ if (this->sleepState != ENGO_AWAKE) {
+ this->snorePhase = 0;
}
- this->actor.shape.yOffset = 14.0f;
+ this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET;
}
- } else if (this->unk_390 & 0x8000) {
+ } else if (this->actionFlags & ENGO_FLAG_UNROLLING) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->unk_390 |= 0x80;
- this->unk_390 &= ~0x8000;
+ this->actionFlags |= ENGO_FLAG_STANDING;
+ this->actionFlags &= ~ENGO_FLAG_UNROLLING;
}
- } else if (this->unk_390 & 0x200) {
- if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) && (this->unk_3EC == 0)) {
- func_80A12C48(this, play, 3);
- this->unk_390 &= ~0x80;
- this->unk_390 &= ~0x200;
- this->unk_390 |= 0x8000;
- this->actor.shape.yOffset = 0.0f;
- } else if ((this->unk_3EC != 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
- this->actor.scale.x = this->unk_3A4 - (Math_SinS(this->unk_3AE) * 0.001f);
- this->actor.scale.y = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4;
- this->actor.scale.z = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4;
- if (this->unk_3AE == 0) {
- this->unk_3EC = -this->unk_3EC;
- if (this->unk_3EC > 0) {
- sfxId = NA_SE_EN_GOLON_SNORE1;
- } else {
- sfxId = NA_SE_EN_GOLON_SNORE2;
- }
+ } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) {
+ if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) &&
+ (this->sleepState == ENGO_AWAKE)) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL_IMM);
+ this->actionFlags &= ~ENGO_FLAG_STANDING;
+ this->actionFlags &= ~ENGO_FLAG_ROLLED_UP;
+ this->actionFlags |= ENGO_FLAG_UNROLLING;
+ this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET;
+ } else if ((this->sleepState != ENGO_AWAKE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
+ // While asleep, rhythmicallly snore and change shape to show breathing.
+ this->actor.scale.x = this->scaleFactor - (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE));
+ this->actor.scale.y = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE));
+ this->actor.scale.z = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE));
+
+ if (this->snorePhase == 0) {
+ this->sleepState = -this->sleepState;
+ sfxId = (this->sleepState > ENGO_AWAKE) ? NA_SE_EN_GOLON_SNORE1 : NA_SE_EN_GOLON_SNORE2;
Actor_PlaySfx(&this->actor, sfxId);
}
- this->unk_3AE += 0x400;
- this->actor.shape.yOffset = (this->actor.scale.y / this->unk_3A4) * 14.0f;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
+ this->snorePhase += 0x400;
+ this->actor.shape.yOffset = (this->actor.scale.y / this->scaleFactor) * ENGO_ROLLEDUP_Y_OFFSET;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
}
} else if ((this->actor.xzDistToPlayer >= 240.0f) || (this->actor.playerHeightRel >= 20.0f) ||
- (this->unk_3EC != 0)) {
- func_80A12C48(this, play, 4);
- this->unk_390 &= ~0x80;
- this->unk_390 &= ~0x200;
- this->unk_390 |= 0x4000;
- this->actor.shape.yOffset = 0.0f;
+ (this->sleepState != ENGO_AWAKE)) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL);
+ this->actionFlags &= ~ENGO_FLAG_STANDING;
+ this->actionFlags &= ~ENGO_FLAG_ROLLED_UP;
+ this->actionFlags |= ENGO_FLAG_ROLLING_UP;
+ this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET;
}
- SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE));
- Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8);
+ SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY));
+ Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8);
}
-void func_80A14E14(EnGo* this, PlayState* play) {
- Actor* actor = this->colliderCylinder.base.ac;
+/**
+ * Action function for a frozen Goron.
+ *
+ * Transitions to the thawing cutscene when colliding with hot water or fire effect.
+ */
+void EnGo_Frozen(EnGo* this, PlayState* play) {
+ Actor* actorCollidedWith = this->colliderCylinder.base.ac;
- if ((this->unk_390 & 0x1000) && (((actor != NULL) && (actor->id == ACTOR_OBJ_AQUA) && (actor->params & 1)) ||
- (this->actor.colChkInfo.damageEffect == 2))) {
- this->actionFunc = func_80A14E74;
+ if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) &&
+ (((actorCollidedWith != NULL) && (actorCollidedWith->id == ACTOR_OBJ_AQUA) && AQUA_HOT(actorCollidedWith)) ||
+ (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_FIRE))) {
+ this->actionFunc = EnGo_AwaitThaw;
}
}
-void func_80A14E74(EnGo* this, PlayState* play) {
- if (func_80A134F4(this, this->actor.csId)) {
- this->actionFunc = func_80A14EB0;
+/**
+ * Action function for transitioning to thawing.
+ */
+void EnGo_AwaitThaw(EnGo* this, PlayState* play) {
+ if (EnGo_ChangeCutscene(this, this->actor.csId)) {
+ this->actionFunc = EnGo_Thaw;
}
}
-void func_80A14EB0(EnGo* this, PlayState* play) {
- EnGo* sp24 = (EnGo*)this->actor.child;
+/**
+ * Action function for thawing of the Goron, melting sounds, and steam.
+ */
+void EnGo_Thaw(EnGo* this, PlayState* play) {
+ EnGo* otherGoron = (EnGo*)this->actor.child;
- if ((s32)(this->unk_39C * 3.0f) != 0) {
+ if ((s32)(this->iceBlockScale * 3.0f) != 0) {
Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG);
- Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f);
- this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f;
- func_80A139E4(this);
+ Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f);
+ this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f;
+ EnGo_MakeSteam(this);
} else {
CutsceneManager_Stop(this->actor.csId);
- func_80A143A8(this, play);
- if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (ENGO_GET_70(&this->actor) == ENGO_70_1)) {
- SubS_UpdateFlags(&this->unk_390, 4, 7);
- func_80A143A8(sp24, play);
- sp24->actionFunc = func_80A149B0;
+ EnGo_ChangeToShiveringAnimation(this, play);
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) &&
+ (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN)) {
+ SubS_UpdateFlags(&this->actionFlags, 4, 7);
+ EnGo_ChangeToShiveringAnimation(otherGoron, play);
+ otherGoron->actionFunc = EnGo_Idle;
}
- this->actionFunc = func_80A149B0;
+ this->actionFunc = EnGo_Idle;
}
}
-void func_80A14FC8(EnGo* this, PlayState* play) {
- s32 sp38[] = {
- 0, 2, 6, 20, 18, 5, 5, 15,
+/**
+ * Cutscene action function for the arrival of springtime.
+ *
+ * This cutscene consists of:
+ * - The gravemaker stops shivering and looks around.
+ * - The other Goron thaws and shivers briefly.
+ * - The gravemaker pats the other's back and gestures broadly.
+ * - They both look around.
+ * - They both cheer.
+ */
+void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) {
+ s32 animationIndices[] = {
+ ENGO_ANIM_LYINGDOWNIDLE, ENGO_ANIM_UNROLL, ENGO_ANIM_SHIVER_IMM, ENGO_ANIM_LOOK_AROUND,
+ ENGO_ANIM_SHOW, ENGO_ANIM_SHIVER, ENGO_ANIM_SHIVER, ENGO_ANIM_CHEER,
};
u16 cueType = 0;
s32 cueId;
s32 cueChannel;
- switch (ENGO_GET_70(&this->actor)) {
- case ENGO_70_0:
+ switch (ENGO_GET_SUBTYPE(&this->actor)) {
+ case ENGO_GRAVEYARD_GRAVEMAKER:
cueType = CS_CMD_ACTOR_CUE_128;
break;
- case ENGO_70_1:
+ case ENGO_GRAVEYARD_FROZEN:
cueType = CS_CMD_ACTOR_CUE_129;
break;
+
+ default:
+ break;
}
if ((cueType == CS_CMD_ACTOR_CUE_128) || (cueType == CS_CMD_ACTOR_CUE_129)) {
@@ -1659,51 +2137,59 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
cueChannel = Cutscene_GetCueChannel(play, cueType);
cueId = play->csCtx.actorCues[cueChannel]->id;
- if (this->cueId != (u8)cueId) {
- this->cueId = cueId;
- func_80A12C48(this, play, sp38[cueId]);
- this->unk_390 = 0;
- this->unk_390 |= 0x20;
- this->unk_3BE = 0;
- this->unk_39C = 0.0f;
- this->unk_3A0 = 0.0f;
+ if (this->springArrivalCueId != (u8)cueId) {
+ this->springArrivalCueId = cueId;
+ EnGo_ChangeAnim(this, play, animationIndices[cueId]);
+ this->actionFlags = 0;
+ this->actionFlags |= ENGO_FLAG_EYES_OPEN;
+ this->eyeTexIndex = ENGO_EYETEX_OPEN;
+ this->iceBlockScale = 0.0f;
+ this->iceBlockAlpha = 0.0f;
switch (cueId) {
case 1:
- this->unk_390 |= 0x80;
+ this->actionFlags |= ENGO_FLAG_STANDING;
this->skelAnime.curFrame = this->skelAnime.endFrame;
break;
case 5:
case 6:
- func_80A141D4(this, play);
+ EnGo_ChangeToFrozenAnimation(this, play);
+ break;
+
+ default:
break;
}
}
- switch (this->cueId) {
+ switch (this->springArrivalCueId) {
case 3:
- if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 20)) {
- func_80A12C48(this, play, 21);
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
+ (this->curAnimIndex == ENGO_ANIM_LOOK_AROUND)) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_LOOK_AROUND_LOOPED);
}
break;
case 4:
- if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 18)) {
- func_80A12C48(this, play, 19);
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
+ (this->curAnimIndex == ENGO_ANIM_SHOW)) {
+ EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED);
}
break;
case 6:
- if ((s32)(this->unk_39C * 3.0f) != 0) {
+ if ((s32)(this->iceBlockScale * 3.0f) != 0) {
Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG);
- Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f);
- this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f;
- func_80A139E4(this);
- } else if (this->unk_390 & 0x400) {
- func_80A143A8(this, play);
+ Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f);
+ this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f;
+ EnGo_MakeSteam(this);
+ } else if (this->actionFlags & ENGO_FLAG_FROZEN) {
+ EnGo_ChangeToShiveringAnimation(this, play);
}
break;
+
+ default:
+ break;
}
if (cueType == 128) {
@@ -1729,6 +2215,9 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
case 490:
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
break;
+
+ default:
+ break;
}
} else if (cueType == 129) {
switch (play->csCtx.curFrame) {
@@ -1748,65 +2237,72 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
case 480:
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
break;
+
+ default:
+ break;
}
}
- SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE));
+ SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY));
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
}
}
-void func_80A153FC(EnGo* this, PlayState* play) {
- Vec3s* sp5C;
- Vec3f sp50;
- Vec3f sp44;
+/**
+ * Action function for the Gatekeeper while they're in a snowball.
+ *
+ * On Day 2, they'll roll along a set path, and can be halted with certain attacks.
+ * On Day 3, they're frozen solid.
+ */
+void EnGo_Snowball(EnGo* this, PlayState* play) {
+ Vec3s* pathPoints;
+ Vec3f currentPos;
+ Vec3f currentPathPoint;
- if ((this->unk_390 & 0x1000) && (this->actor.colChkInfo.damageEffect == 0xF)) {
+ if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_BREAK)) {
+ // Stop the Gatekeeper when hit by an appropriate effect
Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN);
-
this->actor.flags &= ~ACTOR_FLAG_10;
this->actor.flags |= ACTOR_FLAG_2000000;
-
- func_80A118F8(this->unk_3F8, this->actor.world.pos);
+ EnGo_InitSnow(this->effectTable, this->actor.world.pos);
this->actor.shape.rot.x = 0;
this->actor.speed = 0.0f;
-
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD);
if (gSaveContext.save.day == 3) {
- func_80A141D4(this, play);
- this->actionFunc = func_80A14E14;
+ EnGo_ChangeToFrozenAnimation(this, play);
+ this->actionFunc = EnGo_Frozen;
} else {
- func_80A143A8(this, play);
- this->actionFunc = func_80A149B0;
+ EnGo_ChangeToShiveringAnimation(this, play);
+ this->actionFunc = EnGo_Idle;
}
- } else if (this->unk_284 != NULL) {
- if (this->unk_390 & 0x800) {
+ } else if (this->gatekeeperPath != NULL) {
+ if (this->actionFlags & ENGO_FLAG_HIT_OTHER) {
Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_BODY_HIT);
func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
}
- sp5C = Lib_SegmentedToVirtual(this->unk_284->points);
- if (SubS_HasReachedPoint(&this->actor, this->unk_284, this->unk_3E4)) {
- if (this->unk_3E4 >= (this->unk_284->count - 1)) {
- this->unk_3E4 = 0;
+ pathPoints = Lib_SegmentedToVirtual(this->gatekeeperPath->points);
+ if (SubS_HasReachedPoint(&this->actor, this->gatekeeperPath, this->indexPathPoint)) {
+ if (this->indexPathPoint >= (this->gatekeeperPath->count - 1)) {
+ this->indexPathPoint = 0;
} else {
- this->unk_3E4++;
+ this->indexPathPoint++;
}
}
- Math_Vec3s_ToVec3f(&sp44, &sp5C[this->unk_3E4]);
- Math_Vec3f_Copy(&sp50, &this->actor.world.pos);
- Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&sp50, &sp44), 4, 0x38E);
+ Math_Vec3s_ToVec3f(¤tPathPoint, &pathPoints[this->indexPathPoint]);
+ Math_Vec3f_Copy(¤tPos, &this->actor.world.pos);
+ Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(¤tPos, ¤tPathPoint), 4, 0x38E);
this->actor.shape.rot.y = this->actor.world.rot.y;
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Actor_PlaySfx(&this->actor, NA_SE_EV_BIGBALL_ROLL - SFX_FLAG);
- func_800AE930(&play->colCtx, Effect_GetByIndex(this->unk_3E8), &this->actor.world.pos, 18.0f,
+ func_800AE930(&play->colCtx, Effect_GetByIndex(this->indexEffect), &this->actor.world.pos, 18.0f,
this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId);
} else {
- func_800AEF44(Effect_GetByIndex(this->unk_3E8));
+ func_800AEF44(Effect_GetByIndex(this->indexEffect));
}
this->actor.speed = 4.0f;
@@ -1815,86 +2311,107 @@ void func_80A153FC(EnGo* this, PlayState* play) {
}
}
-s32* func_80A15684(EnGo* this, PlayState* play) {
- static s32* D_80A16704[] = {
- D_80A16100,
- D_80A16164,
+/**
+ * Return the MsgEvent script appropriate for the actor.
+ */
+s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play) {
+ static s32 sMsgScriptGraveyard[] = {
+ sMsgScriptGoronGravemaker,
+ sMsgScriptGoronFrozen,
};
- if (this->unk_3EC != 0) {
- return D_80A1640C;
+ if (this->sleepState != ENGO_AWAKE) {
+ return sMsgScriptGoronSleeping; // Lullaby hint
}
- if (ENGO_GET_F(&this->actor) == ENGO_F_1) {
- switch (ENGO_GET_70(&this->actor) % 6) {
- case ENGO_70_0:
- return D_80A163BC;
- case ENGO_70_1:
- return D_80A163CC;
- case ENGO_70_2:
- return D_80A163DC;
- case ENGO_70_3:
- return D_80A163EC;
- case ENGO_70_4:
- return D_80A163FC;
- case ENGO_70_5:
- return D_80A163FC;
+ if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) {
+ switch (ENGO_GET_SUBTYPE(&this->actor) % 6) {
+ case ENGO_ATHLETIC_A:
+ return sMsgScriptGoronAthleticA;
+
+ case ENGO_ATHLETIC_B: // Unused!
+ return sMsgScriptGoronAthleticB;
+
+ case ENGO_ATHLETIC_C:
+ return sMsgScriptGoronAthleticC;
+
+ case ENGO_ATHLETIC_D:
+ return sMsgScriptGoronAthleticD;
+
+ case ENGO_ATHLETIC_HAMSTRINGSIT:
+ return sMsgScriptGoronAthleticHamstring;
+
+ case ENGO_ATHLETIC_HAMSTRINGSTAND:
+ return sMsgScriptGoronAthleticHamstring;
+
+ default:
+ break;
}
}
- switch (ENGO_GET_F(&this->actor)) {
- case ENGO_F_3:
- return D_80A16350;
- case ENGO_F_4:
- return D_80A16704[ENGO_GET_70(&this->actor)];
- case ENGO_F_5:
- return D_80A16208;
- case ENGO_F_6:
- return D_80A16254;
- case ENGO_F_7:
- return D_80A16210;
- case ENGO_F_8:
- return D_80A16280;
+ switch (ENGO_GET_TYPE(&this->actor)) {
+ case ENGO_GATEKEEPER:
+ return sMsgScriptGoronGatekeeper;
+
+ case ENGO_GRAVEYARD:
+ return sMsgScriptGraveyard[ENGO_GET_SUBTYPE(&this->actor)];
+
+ case ENGO_ASIDE_STORE:
+ return sMsgScriptGoronAsideStore;
+
+ case ENGO_ASIDE_ELDERSROOM:
+ return sMsgScriptGoronAsideEldersRoom;
+
+ case ENGO_ASIDE_ELDERSSON:
+ return sMsgScriptGoronAsideEldersSon;
+
+ case ENGO_MEDIGORON:
+ return sMsgScriptGoronMedigoron;
+
default:
- return D_80A16208;
+ return sMsgScriptGoronAsideStore;
}
}
-void func_80A157C4(EnGo* this, PlayState* play) {
+/**
+ * Action function for dialog, movement due to dialog, and ending dialog
+ */
+void EnGo_Talk(EnGo* this, PlayState* play) {
s32 pad;
- Vec3f sp40;
- Vec3f sp34;
+ Vec3f targetPos;
+ Vec3f thisPos;
- if (!func_8010BF58(&this->actor, play, func_80A15684(this, play), this->unk_3D8, &this->unk_28C)) {
- if ((ENGO_GET_F(&this->actor) != ENGO_F_1) && !(this->unk_390 & 0x200)) {
- Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos);
- Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
- Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&sp34, &sp40), 4, 0x2AA8);
+ if (!func_8010BF58(&this->actor, play, EnGo_GetMsgEventScript(this, play), this->msgEventFunc,
+ &this->msgScriptResumePos)) {
+ if ((ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP)) {
+ Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos);
+ Math_Vec3f_Copy(&thisPos, &this->actor.world.pos);
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&thisPos, &targetPos), 4, 0x2AA8);
}
- SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE));
+ SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY));
return;
}
- if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) ||
- (ENGO_GET_F(&this->actor) == ENGO_F_7)) {
- this->unk_3BC = 0;
- this->unk_390 &= ~0x20;
- this->unk_3BE = 4;
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) ||
+ (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) {
+ this->blinkTimer = 0;
+ this->actionFlags &= ~ENGO_FLAG_EYES_OPEN;
+ this->eyeTexIndex = ENGO_EYETEX_CLOSED2;
}
- this->unk_390 &= ~0x8;
- SubS_UpdateFlags(&this->unk_390, 3, 7);
- this->unk_28C = 0;
- this->unk_390 |= 0x40;
- this->actionFunc = this->unk_18C;
+ this->actionFlags &= ~ENGO_FLAG_ENGAGED;
+ SubS_UpdateFlags(&this->actionFlags, 3, 7);
+ this->msgScriptResumePos = 0;
+ this->actionFlags |= ENGO_FLAG_LOST_ATTENTION;
+ this->actionFunc = this->interruptedActionFunc;
}
void EnGo_Init(Actor* thisx, PlayState* play) {
EnGo* this = THIS;
- this->unk_288 = SubS_GetObjectIndex(OBJECT_TAISOU, play);
- this->unk_289 = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play);
- this->actionFunc = func_80A14798;
+ this->taisouObjIndex = SubS_GetObjectIndex(OBJECT_TAISOU, play);
+ this->hakuginDemoObjIndex = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play);
+ this->actionFunc = EnGo_SetupInitialAction;
}
void EnGo_Destroy(Actor* thisx, PlayState* play) {
@@ -1902,55 +2419,60 @@ void EnGo_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->colliderCylinder);
Collider_DestroySphere(play, &this->colliderSphere);
- Effect_Destroy(play, this->unk_3E8);
+ Effect_Destroy(play, this->indexEffect);
}
void EnGo_Update(Actor* thisx, PlayState* play) {
EnGo* this = THIS;
- f32 phi_f0;
+ f32 xzRange;
- func_80A12868(this, play);
- if (!func_80A12774(this, play)) {
- func_80A12954(this, play);
+ EnGo_DetectCollisions(this, play);
+
+ if (!EnGo_UpdateTalking(this, play)) {
+ EnGo_UpdateSpringArrivalCutscene(this, play);
}
this->actionFunc(this, play);
- if (!(this->unk_390 & 0x400)) {
- func_80A12D6C(this);
- func_80A12A64(this, play);
- func_80A131F8(this, play);
- func_80A12B78(this, play);
+ if (!(this->actionFlags & ENGO_FLAG_FROZEN)) {
+ EnGo_UpdateEyes(this);
+ EnGo_UpdateAnimationToCurrent(this, play);
+ EnGo_UpdateAttentionTargetAndReactions(this, play);
+ EnGo_UpdateSfx(this, play);
}
- if (!(this->unk_390 & 0x100) && !(this->unk_390 & 0x200) && !(this->unk_390 & 0x400)) {
- if (ENGO_GET_F(&this->actor) == ENGO_F_8) {
- phi_f0 = this->colliderSphere.dim.worldSphere.radius + 60;
+ if (!(this->actionFlags & ENGO_FLAG_SNOWBALLED) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP) &&
+ !(this->actionFlags & ENGO_FLAG_FROZEN)) {
+ if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) {
+ xzRange = this->colliderSphere.dim.worldSphere.radius + 60;
} else {
- phi_f0 = this->colliderCylinder.dim.radius + 40;
+ xzRange = this->colliderCylinder.dim.radius + 40;
}
- func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7);
- } else if ((this->unk_390 & 0x200) && (this->unk_3EC != 0)) {
- phi_f0 = this->colliderCylinder.dim.radius + 40;
- func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7);
+ func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7);
+ } else if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) && (this->sleepState != ENGO_AWAKE)) {
+ xzRange = this->colliderCylinder.dim.radius + 40;
+ func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7);
}
- if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_2) &&
- (ENGO_GET_F(&this->actor) != ENGO_F_1)) {
+ if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_SPECTATOR) &&
+ (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) {
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
- func_80A122EC(this);
- func_80A126BC(this, play);
- func_80A1203C(this);
+ EnGo_UpdateFocus(this);
+ EnGo_UpdateCollider(this, play);
+ EnGo_UpdateEffects(this);
}
-void func_80A15B80(EnGo* this, PlayState* play) {
+/**
+ * Draw function for a snowballed or rolled up Goron (no need to draw limbs).
+ */
+void EnGo_Draw_NoSkeleton(EnGo* this, PlayState* play) {
Gfx* gfx;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset,
this->actor.world.pos.z, MTXMODE_NEW);
@@ -1959,7 +2481,7 @@ void func_80A15B80(EnGo* this, PlayState* play) {
Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY);
Matrix_Translate(0.0f, this->actor.shape.yOffset, 0.0f, MTXMODE_APPLY);
- if (this->unk_390 & 0x100) {
+ if (this->actionFlags & ENGO_FLAG_SNOWBALLED) {
Matrix_Scale(this->actor.scale.x * 8.0f, this->actor.scale.y * 8.0f, this->actor.scale.z * 8.0f, MTXMODE_APPLY);
} else {
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
@@ -1968,60 +2490,59 @@ void func_80A15B80(EnGo* this, PlayState* play) {
Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, (this->unk_390 & 0x100) ? gGoronSnowballDL : gGoronRolledUpDL);
+ gSPDisplayList(POLY_OPA_DISP++, (this->actionFlags & ENGO_FLAG_SNOWBALLED) ? gGoronSnowballDL : gGoronRolledUpDL);
CLOSE_DISPS(play->state.gfxCtx);
}
s32 EnGo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnGo* this = THIS;
- Vec3f sp30;
- s32 idx;
+ Vec3f worldPos;
+ s32 rotTableIndex;
- if ((ENGO_GET_F(&this->actor) == ENGO_F_8) && (limbIndex == 10)) {
- Matrix_MultZero(&sp30);
- sp30.y = this->actor.world.pos.y;
- Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30);
+ if ((ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) && (limbIndex == GORON_LIMB_BODY)) {
+ Matrix_MultZero(&worldPos);
+ worldPos.y = this->actor.world.pos.y;
+ Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &worldPos);
}
switch (limbIndex) {
- case 10:
- idx = 0;
+ case GORON_LIMB_BODY:
+ rotTableIndex = 0;
break;
- case 11:
- idx = 1;
+ case GORON_LIMB_LEFT_UPPER_ARM:
+ rotTableIndex = 1;
break;
- case 14:
- idx = 2;
+ case GORON_LIMB_RIGHT_UPPER_ARM:
+ rotTableIndex = 2;
break;
default:
- idx = 9;
+ rotTableIndex = 9;
break;
}
- if ((this->unk_390 & 0x80) && (idx < 9)) {
- rot->y += (s16)(Math_SinS(this->unk_3CE[idx]) * 200.0f);
- rot->z += (s16)(Math_CosS(this->unk_3C8[idx]) * 200.0f);
+ if ((this->actionFlags & ENGO_FLAG_STANDING) && (rotTableIndex < 9)) {
+ rot->y += (s16)(Math_SinS(this->limbRotTableY[rotTableIndex]) * 200.0f);
+ rot->z += (s16)(Math_CosS(this->limbRotTableZ[rotTableIndex]) * 200.0f);
}
return false;
}
void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
EnGo* this = THIS;
- u16 temp_v0;
s32 stepRot;
s32 overrideRot;
- if (this->unk_390 & 0x40) {
+ if (this->actionFlags & ENGO_FLAG_LOST_ATTENTION) {
stepRot = false;
} else {
stepRot = true;
}
- if (this->unk_390 & 0x10) {
+ if (this->actionFlags & ENGO_FLAG_FACE_TARGET) {
overrideRot = true;
} else {
overrideRot = false;
@@ -2032,47 +2553,50 @@ void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
switch (limbIndex) {
- case 17:
- SubS_UpdateLimb(this->unk_3B0 + this->unk_3B4 + 0x4000,
- this->unk_3B2 + this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_290,
- &this->unk_2A8, stepRot, overrideRot);
+ case GORON_LIMB_HEAD:
+ SubS_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000,
+ this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headPos,
+ &this->headRot, stepRot, overrideRot);
Matrix_Pop();
- Matrix_Translate(this->unk_290.x, this->unk_290.y, this->unk_290.z, MTXMODE_NEW);
+ Matrix_Translate(this->headPos.x, this->headPos.y, this->headPos.z, MTXMODE_NEW);
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- Matrix_RotateYS(this->unk_2A8.y, MTXMODE_APPLY);
- Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->headRot.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->headRot.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->headRot.z, MTXMODE_APPLY);
Matrix_Push();
break;
- case 10:
- SubS_UpdateLimb(this->unk_3B4 + 0x4000, this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_29C,
- &this->unk_2AE, stepRot, overrideRot);
+ case GORON_LIMB_BODY:
+ SubS_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->bodyPos,
+ &this->bodyRot, stepRot, overrideRot);
Matrix_Pop();
- Matrix_Translate(this->unk_29C.x, this->unk_29C.y, this->unk_29C.z, MTXMODE_NEW);
+ Matrix_Translate(this->bodyPos.x, this->bodyPos.y, this->bodyPos.z, MTXMODE_NEW);
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- Matrix_RotateYS(this->unk_2AE.y, MTXMODE_APPLY);
- Matrix_RotateXS(this->unk_2AE.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->unk_2AE.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->bodyRot.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->bodyRot.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->bodyRot.z, MTXMODE_APPLY);
Matrix_Push();
break;
+
+ default:
+ break;
}
}
-void func_80A15FEC(Actor* thisx, PlayState* play) {
- static TexturePtr D_80A1670C[] = {
+void EnGo_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sEyeTextures[] = {
gGoronEyeOpenTex, gGoronEyeHalfTex, gGoronEyeClosedTex, gGoronEyeHalfTex, gGoronEyeClosed2Tex,
};
EnGo* this = THIS;
- if (!(this->unk_390 & 0x300)) {
+ if (!(this->actionFlags & (ENGO_FLAG_SNOWBALLED | ENGO_FLAG_ROLLED_UP))) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A1670C[this->unk_3BE]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
- if (this->unk_3DC == 14) {
+ if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) {
Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY);
}
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
@@ -2081,8 +2605,8 @@ void func_80A15FEC(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
} else {
- func_80A15B80(this, play);
+ EnGo_Draw_NoSkeleton(this, play);
}
- func_80A137C0(this, play, this->unk_39C, this->unk_3A0);
- func_80A1213C(this, play);
+ EnGo_DrawIceBlockWhenFrozen(this, play, this->iceBlockScale, this->iceBlockAlpha);
+ EnGo_DrawEffects(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h
index 9d12dfdce..5162a4f77 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.h
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.h
@@ -2,103 +2,142 @@
#define Z_EN_GO_H
#include "global.h"
+#include "objects/object_oF1d_map/object_oF1d_map.h"
struct EnGo;
typedef void (*EnGoActionFunc)(struct EnGo*, PlayState*);
+typedef s32 (*MsgEventFunc)(Actor*, PlayState*);
-#define ENGO_GET_F(thisx) (((thisx)->params & 0xF) & 0xFF)
-#define ENGO_GET_70(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF)
-#define ENGO_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
+#define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF)
+#define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF)
+#define ENGO_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
-enum {
+#define ENGO_PATH_INDEX_NONE 0xFF
+
+#define ENGO_SNOW_EFFECT_COUNT 16
+#define ENGO_OTHER_EFFECT_COUNT 16
+#define ENGO_EFFECT_COUNT (ENGO_SNOW_EFFECT_COUNT + ENGO_OTHER_EFFECT_COUNT)
+
+/**
+ * Struct to track the state of various visual effects.
+ *
+ * A Goron's 'effectTable' is comprised of a number of these effects, which depending on the context in which they are
+ * used, take on the form of snow, dust, or steam. The functions using these objects have an expectation that they are
+ * iterating through the full effectTable, or half of the effectTable. See individual functions containing 'EnGoEffect*'
+ * parameters for more details.
+ */
+typedef struct EnGoEffect {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 alphaDenom;
+ /* 0x02 */ u8 alphaNumer;
+ /* 0x04 */ Vec3s rotVelocity;
+ /* 0x0A */ Vec3s rotAngle;
+ /* 0x10 */ Vec3f pos;
+ /* 0x1C */ Vec3f accel;
+ /* 0x28 */ Vec3f velocity;
+ /* 0x34 */ f32 scaleXY;
+ /* 0x38 */ f32 scaleXYDelta;
+} EnGoEffect; // size = 0x3C;
+
+/**
+ * Goron Type, identified by bits [3..0] of the actor's params
+ *
+ * - The ENGO_ATHLETIC and ENGO_SPECTATOR types share the same subtype domain (EnGoRacetrackSubtype: [0,7])
+ * - ENGO_GRAVEYARD types have their own subtype domain (EnGoGraveyardSubtype: [0,1])
+ * - Others have no subtypes.
+ */
+typedef enum EnGoType {
/* 0 */ ENGO_F_0,
- /* 1 */ ENGO_F_1,
- /* 2 */ ENGO_F_2,
- /* 3 */ ENGO_F_3,
- /* 4 */ ENGO_F_4,
- /* 5 */ ENGO_F_5,
- /* 6 */ ENGO_F_6,
- /* 7 */ ENGO_F_7,
- /* 8 */ ENGO_F_8,
-};
+ /* 1 */ ENGO_ATHLETIC, // Racers stretching before the race
+ /* 2 */ ENGO_SPECTATOR, // Spectators to the race
+ /* 3 */ ENGO_GATEKEEPER, // Gatekeeper to the Goron Shrine
+ /* 4 */ ENGO_GRAVEYARD, // Gravemaker and other
+ /* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store
+ /* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room
+ /* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son
+ /* 8 */ ENGO_MEDIGORON // Medigoron selling Powder Kegs
+} EnGoType;
-enum {
- /* 0 */ ENGO_70_0,
- /* 1 */ ENGO_70_1,
- /* 2 */ ENGO_70_2,
- /* 3 */ ENGO_70_3,
- /* 4 */ ENGO_70_4,
- /* 5 */ ENGO_70_5,
-};
+/**
+ * Subtype for Gorons at the racetrack (ENGO_ATHLETIC and ENGO_SPECTATOR)
+ */
+typedef enum EnGoRacetrackSubtype {
+ /* 0 */ ENGO_ATHLETIC_A,
+ /* 1 */ ENGO_ATHLETIC_B,
+ /* 2 */ ENGO_ATHLETIC_C,
+ /* 3 */ ENGO_ATHLETIC_D,
+ /* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT,
+ /* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND,
+ /* 6 */ ENGO_SPECTATOR_CHEER,
+ /* 7 */ ENGO_SPECTATOR_SHOUTING
+} EnGoRacetrackSubtype;
-typedef struct {
- /* 0x00 */ u8 unk_00;
- /* 0x01 */ u8 unk_01;
- /* 0x02 */ u8 unk_02;
- /* 0x04 */ Vec3s unk_04;
- /* 0x0A */ Vec3s unk_0A;
- /* 0x10 */ Vec3f unk_10;
- /* 0x1C */ Vec3f unk_1C;
- /* 0x28 */ Vec3f unk_28;
- /* 0x34 */ f32 unk_34;
- /* 0x38 */ f32 unk_38;
-} EnGoStruct; // size = 0x3C;
+/**
+ * Subtype for Gorons outside the Goron Graveyard (ENGO_GRAVEYARD)
+ */
+typedef enum EnGoGraveyardSubtype {
+ /* 0 */ ENGO_GRAVEYARD_GRAVEMAKER,
+ /* 1 */ ENGO_GRAVEYARD_FROZEN
+} EnGoGraveyardSubtype;
typedef struct EnGo {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnGoActionFunc actionFunc;
- /* 0x18C */ EnGoActionFunc unk_18C;
- /* 0x190 */ EnGoActionFunc unk_190;
+ /* 0x18C */ EnGoActionFunc interruptedActionFunc;
+ /* 0x190 */ EnGoActionFunc graveyardDialogActionFunc;
/* 0x194 */ ColliderCylinder colliderCylinder;
- /* 0x1E0 */ UNK_TYPE1 unk1E0[0x4C];
+ /* 0x1E0 */ ColliderCylinder unusedCylinder;
/* 0x22C */ ColliderSphere colliderSphere;
- /* 0x284 */ Path* unk_284;
- /* 0x288 */ s8 unk_288;
- /* 0x289 */ s8 unk_289;
- /* 0x28C */ s32 unk_28C;
- /* 0x290 */ Vec3f unk_290;
- /* 0x29C */ Vec3f unk_29C;
- /* 0x2A8 */ Vec3s unk_2A8;
- /* 0x2AE */ Vec3s unk_2AE;
- /* 0x2B4 */ Vec3s jointTable[18];
- /* 0x320 */ Vec3s morphTable[18];
- /* 0x38C */ Actor* unk_38C;
- /* 0x390 */ u16 unk_390;
- /* 0x392 */ u16 unk_392;
- /* 0x394 */ u8 cueId;
- /* 0x398 */ f32 unk_398;
- /* 0x39C */ f32 unk_39C;
- /* 0x3A0 */ f32 unk_3A0;
- /* 0x3A4 */ f32 unk_3A4;
- /* 0x3A8 */ f32 unk_3A8;
+ /* 0x284 */ Path* gatekeeperPath;
+ /* 0x288 */ s8 taisouObjIndex;
+ /* 0x289 */ s8 hakuginDemoObjIndex;
+ /* 0x28C */ s32 msgScriptResumePos;
+ /* 0x290 */ Vec3f headPos;
+ /* 0x29C */ Vec3f bodyPos;
+ /* 0x2A8 */ Vec3s headRot;
+ /* 0x2AE */ Vec3s bodyRot;
+ /* 0x2B4 */ Vec3s jointTable[GORON_LIMB_MAX];
+ /* 0x320 */ Vec3s morphTable[GORON_LIMB_MAX];
+ /* 0x38C */ Actor* attentionTarget;
+ /* 0x390 */ u16 actionFlags;
+ /* 0x392 */ u16 lastTextId;
+ /* 0x394 */ u8 springArrivalCueId;
+ /* 0x398 */ f32 curAnimPlaySpeed;
+ /* 0x39C */ f32 iceBlockScale;
+ /* 0x3A0 */ f32 iceBlockAlpha;
+ /* 0x3A4 */ f32 scaleFactor;
+ /* 0x3A8 */ f32 scaleFactorPoundDistortion;
/* 0x3AC */ UNK_TYPE1 unk3AC[0x2];
- /* 0x3AE */ s16 unk_3AE;
- /* 0x3B0 */ s16 unk_3B0;
- /* 0x3B2 */ s16 unk_3B2;
- /* 0x3B4 */ s16 unk_3B4;
- /* 0x3B6 */ s16 unk_3B6;
+ /* 0x3AE */ union {
+ s16 snorePhase; // Used whilst a Goron is sleeping, +0x400 at a time
+ s16 elapsedHangtime; // Hangtime at the top of a pound.
+ };
+ /* 0x3B0 */ s16 headRotZ;
+ /* 0x3B2 */ s16 headRotY;
+ /* 0x3B4 */ s16 bodyRotZ;
+ /* 0x3B6 */ s16 bodyRotY;
/* 0x3B8 */ s16 csId;
- /* 0x3BA */ s16 unk_3BA;
- /* 0x3BC */ s16 unk_3BC;
- /* 0x3BE */ s16 unk_3BE;
- /* 0x3C0 */ s16 unk_3C0;
- /* 0x3C2 */ s16 unk_3C2;
- /* 0x3C4 */ s16 unk_3C4;
- /* 0x3C6 */ s16 unk_3C6;
- /* 0x3C8 */ s16 unk_3C8[3];
- /* 0x3CE */ s16 unk_3CE[3];
- /* 0x3D4 */ s16 unk_3D4;
- /* 0x3D8 */ void* unk_3D8;
- /* 0x3DC */ s32 unk_3DC;
+ /* 0x3BA */ s16 loseAttentionTimer;
+ /* 0x3BC */ s16 blinkTimer;
+ /* 0x3BE */ s16 eyeTexIndex;
+ /* 0x3C0 */ s16 cutsceneState;
+ /* 0x3C2 */ s16 cutsceneDelayTimer;
+ /* 0x3C4 */ s16 gatekeeperAnimState;
+ /* 0x3C6 */ s16 harmlessTimer;
+ /* 0x3C8 */ s16 limbRotTableZ[3];
+ /* 0x3CE */ s16 limbRotTableY[3];
+ /* 0x3D4 */ s16 surprisePhase;
+ /* 0x3D8 */ MsgEventFunc msgEventFunc;
+ /* 0x3DC */ s32 curAnimIndex;
/* 0x3E0 */ UNK_TYPE1 unk3E0[0x4];
- /* 0x3E4 */ s32 unk_3E4;
- /* 0x3E8 */ s32 unk_3E8;
- /* 0x3EC */ s32 unk_3EC;
- /* 0x3F0 */ s32 unk_3F0;
- /* 0x3F4 */ s32 unk_3F4;
- /* 0x3F8 */ EnGoStruct unk_3F8[32];
+ /* 0x3E4 */ s32 indexPathPoint;
+ /* 0x3E8 */ s32 indexEffect;
+ /* 0x3EC */ s32 sleepState;
+ /* 0x3F0 */ s32 springArrivalCutsceneActive;
+ /* 0x3F4 */ s32 changedText;
+ /* 0x3F8 */ EnGoEffect effectTable[ENGO_EFFECT_COUNT];
} EnGo; // size = 0xB78
#endif // Z_EN_GO_H
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
index c947d3334..148b2d116 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -1575,7 +1575,7 @@ void func_80942B1C(EnGoroiwa* this, PlayState* play) {
if ((ptr->unk_28 != 0) && (ptr->unk_2C > 0)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0,
0, COMBINED);
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h
index e672355e5..2ace5ff85 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h
@@ -14,27 +14,27 @@ typedef s32 (*EnGoroiwaUnkFunc)(struct EnGoroiwa*);
#define ENGOROIWA_GET_300(thisx) (((thisx)->params >> 0x8) & 3)
#define ENGOROIWA_GET_FF(thisx) ((thisx)->params & 0xFF)
-enum {
+typedef enum {
/* 0 */ ENGOROIWA_300_0,
/* 1 */ ENGOROIWA_300_1,
- /* 3 */ ENGOROIWA_300_3 = 3,
-};
+ /* 3 */ ENGOROIWA_300_3 = 3
+} EnGoroiwaParam300;
-enum {
+typedef enum {
/* 0 */ ENGOROIWA_400_0,
- /* 1 */ ENGOROIWA_400_1,
-};
+ /* 1 */ ENGOROIWA_400_1
+} EnGoroiwaParam400;
-enum {
+typedef enum {
/* 0 */ ENGOROIWA_3000_0,
/* 1 */ ENGOROIWA_3000_1,
- /* 2 */ ENGOROIWA_3000_2,
-};
+ /* 2 */ ENGOROIWA_3000_2
+} EnGoroiwaParam3000;
-enum {
+typedef enum {
/* 1 */ ENGOROIWA_C000_1 = 1,
- /* 2 */ ENGOROIWA_C000_2,
-};
+ /* 2 */ ENGOROIWA_C000_2
+} EnGoroiwaParamC000;
typedef struct {
/* 0x00 */ Vec3f unk_00;
diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
index 2bd6fec69..bfd2d19ab 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
@@ -52,18 +52,18 @@ typedef enum {
/* 7 */ EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK,
/* 8 */ EN_GRASSHOPPER_ACTION_DAMAGED,
/* 9 */ EN_GRASSHOPPER_ACTION_DEAD,
- /* 10 */ EN_GRASSHOPPER_ACTION_FALL,
+ /* 10 */ EN_GRASSHOPPER_ACTION_FALL
} EnGrasshopperAction;
typedef enum {
/* 0 */ EN_GRASSHOPPER_DECISION_ATTACK,
/* 1 */ EN_GRASSHOPPER_DECISION_FLY,
- /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES, // Never used in the final game
+ /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES // Never used in the final game
} EnGrasshopperNextAction;
typedef enum {
/* 0 */ EN_GRASSHOPPER_BANK_STATE_BANKING,
- /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE,
+ /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE
} EnGrasshopperBankState;
typedef enum {
@@ -74,7 +74,7 @@ typedef enum {
/* 4 */ EN_GRASSHOPPER_ANIM_HOVER,
/* 5 */ EN_GRASSHOPPER_ANIM_DAMAGE,
/* 6 */ EN_GRASSHOPPER_ANIM_DEAD,
- /* 7 */ EN_GRASSHOPPER_ANIM_FALL,
+ /* 7 */ EN_GRASSHOPPER_ANIM_FALL
} EnGrasshopperAnim;
static s32 sOccupiedIndices[] = {
@@ -99,7 +99,7 @@ typedef enum {
/* 0x3 */ EN_GRASSHOPPER_DMGEFF_FREEZE, // Damages and freezes the Dragonfly in ice
/* 0x4 */ EN_GRASSHOPPER_DMGEFF_LIGHT_ORB, // Damages and surrounds the Dragonfly with light orbs
/* 0xE */ EN_GRASSHOPPER_DMGEFF_HOOK = 0xE, // If hit by the Hookshot, it pulls the Dragonfly towards the player
- /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE, // Deals regular damage with no extra effect
+ /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE // Deals regular damage with no extra effect
} EnDragonflyDamageEffect;
static DamageTable sDamageTable = {
@@ -246,7 +246,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) {
this->type;
}
- this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y;
+ this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y;
EnGrasshopper_SetupFly(this);
}
@@ -343,7 +343,7 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) {
void EnGrasshopper_SetupFly(EnGrasshopper* this) {
EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FLY);
- this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y;
+ this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y;
this->action = EN_GRASSHOPPER_ACTION_FLY;
this->actionFunc = EnGrasshopper_Fly;
}
@@ -384,7 +384,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) {
}
if (this->shouldTurn) {
- this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y;
+ this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y;
this->targetRot.y = Math_Atan2S(diffX, diffZ);
this->timer = Rand_S16Offset(30, 30);
}
@@ -412,7 +412,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) {
this->targetRot.y = Math_Atan2S(diffX, diffZ);
this->timer = Rand_S16Offset(30, 70);
- this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y;
+ this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y;
}
}
}
@@ -441,7 +441,7 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) {
this->baseFlyHeight = Math_SinS(this->bobPhase) * 10.0f;
if (this->timer == 0) {
- this->baseFlyHeight = randPlusMinusPoint5Scaled(10.0f);
+ this->baseFlyHeight = Rand_CenteredFloat(10.0f);
this->timer = Rand_S16Offset(30, 30);
}
@@ -583,8 +583,8 @@ void EnGrasshopper_ApproachPlayer(EnGrasshopper* this, PlayState* play) {
if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) {
this->splashCount++;
Math_Vec3f_Copy(&splashPos, &this->tailTipPos);
- splashPos.x += randPlusMinusPoint5Scaled(20.0f);
- splashPos.z += randPlusMinusPoint5Scaled(20.0f);
+ splashPos.x += Rand_CenteredFloat(20.0f);
+ splashPos.z += Rand_CenteredFloat(20.0f);
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER);
}
@@ -633,8 +633,8 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) {
if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) {
this->splashCount++;
Math_Vec3f_Copy(&splashPos, &this->tailTipPos);
- splashPos.x += randPlusMinusPoint5Scaled(20.0f);
- splashPos.z += randPlusMinusPoint5Scaled(20.0f);
+ splashPos.x += Rand_CenteredFloat(20.0f);
+ splashPos.z += Rand_CenteredFloat(20.0f);
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, ((s32)Rand_ZeroOne() * 100) + 400);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER);
}
@@ -796,8 +796,8 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) {
for (i = 0; i < 3; i++) {
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
- splashPos.x += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f);
- splashPos.z += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f);
+ splashPos.x += Rand_CenteredFloat((i * 5.0f) + 20.0f);
+ splashPos.z += Rand_CenteredFloat((i * 5.0f) + 20.0f);
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400));
}
@@ -826,7 +826,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(sFireVelocityAndAccel); i++) {
Math_Vec3f_Copy(&firePos, &this->actor.world.pos);
- firePos.x += randPlusMinusPoint5Scaled(30.0f);
+ firePos.x += Rand_CenteredFloat(30.0f);
if (!isUnderWater) {
firePos.y = this->actor.floorHeight;
} else if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
@@ -834,7 +834,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) {
firePos.y = waterSurface;
}
- firePos.z += randPlusMinusPoint5Scaled(30.0f);
+ firePos.z += Rand_CenteredFloat(30.0f);
func_800B3030(play, &firePos, &sFireVelocityAndAccel[i], &sFireVelocityAndAccel[i], 100, 0, 2);
}
@@ -1007,7 +1007,7 @@ void EnGrasshopper_Draw(Actor* thisx, PlayState* play) {
u8* shadowTex = GRAPH_ALLOC(play->state.gfxCtx, SUBS_SHADOW_TEX_SIZE);
u8* shadowTexIter;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnGrasshopper_PostLimbDraw,
&this->actor);
if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) &&
@@ -1062,10 +1062,10 @@ void EnGrasshopper_InitializeEffect(EnGrasshopper* this, Vec3f* pos) {
effect->isEnabled = true;
effect->pos = *pos;
effect->timer = 10;
- effect->velocity.x = randPlusMinusPoint5Scaled(20.0f);
- effect->velocity.y = randPlusMinusPoint5Scaled(20.0f);
- effect->velocity.z = randPlusMinusPoint5Scaled(20.0f);
- effect->yaw = randPlusMinusPoint5Scaled(30000.0f);
+ effect->velocity.x = Rand_CenteredFloat(20.0f);
+ effect->velocity.y = Rand_CenteredFloat(20.0f);
+ effect->velocity.z = Rand_CenteredFloat(20.0f);
+ effect->yaw = Rand_CenteredFloat(30000.0f);
return;
}
}
@@ -1134,7 +1134,7 @@ void EnGrasshopper_DrawEffects(EnGrasshopper* this, PlayState* play) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C9BC(play->state.gfxCtx);
+ Gfx_SetupDL61_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sLightningTextures[effect->lightningIndex]));
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 255, 255);
diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
index 11ed8a130..049091393 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
@@ -17,7 +17,7 @@ typedef enum EnGrasshopperType {
/* 0 */ EN_GRASSHOPPER_TYPE_NORMAL,
/* 1 */ EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED, // Spawned by EnEncount1
/* 2 */ EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM,
- /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL,
+ /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL
} EnGrasshopperType;
typedef struct EnGrasshopperEffect {
diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
index 6d8e64931..6f6f2cad9 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -5,6 +5,7 @@
*/
#include "z_en_gs.h"
+#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "objects/object_gs/object_gs.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -457,25 +458,25 @@ void func_8099874C(EnGs* this, PlayState* play) {
}
if (phi_v0 != 0) {
- this->unk_20C = -1;
+ this->getItemId = -1;
switch (this->unk_194) {
case 1:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_08)) {
- this->unk_20C = 6;
+ this->getItemId = GI_RUPEE_SILVER;
SET_WEEKEVENTREG(WEEKEVENTREG_77_08);
}
break;
case 3:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_10)) {
- this->unk_20C = 6;
+ this->getItemId = GI_RUPEE_SILVER;
SET_WEEKEVENTREG(WEEKEVENTREG_77_10);
}
break;
case 2:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_20)) {
- this->unk_20C = 6;
+ this->getItemId = GI_RUPEE_SILVER;
SET_WEEKEVENTREG(WEEKEVENTREG_77_20);
}
break;
@@ -483,10 +484,10 @@ void func_8099874C(EnGs* this, PlayState* play) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) {
SET_WEEKEVENTREG(WEEKEVENTREG_90_10);
- this->unk_20C = 12;
+ this->getItemId = GI_HEART_PIECE;
}
- if (this->unk_20C > 0) {
+ if (this->getItemId > GI_NONE) {
func_809989B4(this, play);
} else {
func_80997D14(this, play);
@@ -501,7 +502,7 @@ void func_8099874C(EnGs* this, PlayState* play) {
}
void func_809989B4(EnGs* this, PlayState* play) {
- Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809989F4;
}
@@ -510,7 +511,8 @@ void func_809989F4(EnGs* this, PlayState* play) {
this->actor.parent = NULL;
func_80997D14(this, play);
} else {
- Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer,
+ this->actor.playerHeightRel);
}
}
@@ -813,9 +815,9 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
Vec3f sp60;
for (i = 0; i < 3; i++) {
- sp60.x = randPlusMinusPoint5Scaled(15.0f);
+ sp60.x = Rand_CenteredFloat(15.0f);
sp60.y = Rand_ZeroFloat(-1.0f);
- sp60.z = randPlusMinusPoint5Scaled(15.0f);
+ sp60.z = Rand_CenteredFloat(15.0f);
sp6C.x = this->actor.world.pos.x + (2.0f * sp60.x);
sp6C.y = this->actor.world.pos.y + 7.0f;
@@ -871,7 +873,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
if (this->actor.playerHeightRel < -12000.0f) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
- this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 0);
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, this->actor.world.rot.y, 0, BOMB_TYPE_BODY);
Actor_Kill(&this->actor);
sp7C = 0;
}
@@ -1069,7 +1071,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) {
frames = play->gameplayFrames;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Push();
if (this->unk_19A & 1) {
@@ -1091,7 +1093,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) {
Matrix_Pop();
if (this->unk_19A & 2) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Scale(0.05f, -0.05f, 1.0f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.h b/src/overlays/actors/ovl_En_Gs/z_en_gs.h
index abb4a5b86..b7af0c582 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h
@@ -11,12 +11,12 @@ typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*);
#define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F)
#define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
-enum {
+typedef enum {
/* 0 */ ENGS_0,
/* 1 */ ENGS_1,
/* 2 */ ENGS_2,
- /* 3 */ ENGS_3,
-};
+ /* 3 */ ENGS_3
+} EnGsParam;
typedef struct EnGs {
/* 0x000 */ Actor actor;
@@ -47,7 +47,7 @@ typedef struct EnGs {
/* 0x200 */ f32 unk_200;
/* 0x204 */ s32 unk_204;
/* 0x208 */ s32 unk_208;
- /* 0x20C */ s32 unk_20C;
+ /* 0x20C */ s32 getItemId;
/* 0x210 */ u16 unk_210;
/* 0x212 */ s16 csIdList[2];
/* 0x216 */ s16 unk_216;
diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c
index f5925f524..e9ba72003 100644
--- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c
+++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c
@@ -84,7 +84,7 @@ typedef enum {
/* 0 */ WAIT_HEAD_TILT_ANIM,
/* 1 */ WALK_ANIM,
/* 2 */ DIG_ANIM,
- /* 3 */ WALK_ANIM_2,
+ /* 3 */ WALK_ANIM_2
} EnGuardNutsAnim;
typedef enum {
@@ -328,7 +328,7 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) {
}
}
if ((this->animIndex == WALK_ANIM) &&
- ((Animation_OnFrame(&this->skelAnime, 1.0f)) || (Animation_OnFrame(&this->skelAnime, 5.0f)))) {
+ (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
@@ -370,7 +370,7 @@ void EnGuardNuts_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState]));
diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
index a6f5f98b3..cb9545d7a 100644
--- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
+++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
@@ -131,7 +131,7 @@ void func_80BC6E10(EnGuruguru* this) {
this->headZRotTarget = 0;
this->unk268 = 1;
this->actor.textId = textIDs[this->textIdIndex];
- if ((this->textIdIndex == 0 || this->textIdIndex == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ if (((this->textIdIndex == 0) || (this->textIdIndex == 1)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_04)) {
this->actor.textId = 0x295F;
} else {
@@ -175,7 +175,7 @@ void func_80BC701C(EnGuruguru* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->unk268 != 0) &&
- (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU)) {
+ ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU))) {
this->headZRotTarget = 5000;
}
@@ -211,7 +211,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
Message_CloseTextbox(play);
this->headZRotTarget = 0;
if ((this->textIdIndex == 13) || (this->textIdIndex == 14)) {
- func_80151BB4(play, 0x13);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU);
SET_WEEKEVENTREG(WEEKEVENTREG_79_04);
func_80BC6E10(this);
return;
@@ -223,7 +223,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
if (this->actor.textId == 0x292A) {
SET_WEEKEVENTREG(WEEKEVENTREG_38_10);
}
- func_80151BB4(play, 0x13);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU);
func_80BC6E10(this);
return;
}
@@ -234,8 +234,8 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
if (this->textIdIndex == 12) {
SET_WEEKEVENTREG(WEEKEVENTREG_38_40);
func_801A3B48(0);
- func_80151BB4(play, 0x36);
- func_80151BB4(play, 0x13);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU);
func_80BC6E10(this);
return;
}
@@ -275,7 +275,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
return;
}
func_801A3B48(0);
- func_80151BB4(play, 0x13);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU);
func_80BC6E10(this);
}
}
@@ -324,7 +324,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
return;
}
- } else if (this->actor.params == 0 || this->actor.params == 2) {
+ } else if ((this->actor.params == 0) || (this->actor.params == 2)) {
Actor_Kill(&this->actor);
return;
}
@@ -352,10 +352,10 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) {
this->headXRotTarget = 0;
if (yaw < 0x2AF8) {
this->headXRotTarget = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
- if (this->headXRotTarget > 5000) {
- this->headXRotTarget = 5000;
- } else if (this->headXRotTarget < -5000) {
- this->headXRotTarget = -5000;
+ if (this->headXRotTarget > 0x1388) {
+ this->headXRotTarget = 0x1388;
+ } else if (this->headXRotTarget < -0x1388) {
+ this->headXRotTarget = -0x1388;
}
}
Actor_SetScale(&this->actor, 0.01f);
@@ -385,11 +385,13 @@ void EnGuruguru_Draw(Actor* thisx, PlayState* play) {
EnGuruguru* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->texIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->texIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGuruguru_OverrideLimbDraw, NULL, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c
index 44e42d01a..f5885b3cf 100644
--- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c
+++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c
@@ -265,7 +265,7 @@ void func_80B22500(EnHakurock* this, PlayState* play) {
if (this->counter > 0) {
this->counter--;
if ((this->counter & 1) == 0) {
- this->actor.world.pos.y = (sin_rad(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight;
+ this->actor.world.pos.y = (Math_SinF(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight;
} else {
this->actor.world.pos.y = this->actor.floorHeight;
}
@@ -279,8 +279,8 @@ void func_80B22500(EnHakurock* this, PlayState* play) {
} else if ((&player->actor == this->collider.base.oc) &&
(player->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) &&
(player->linearVelocity > 8.0f)) {
- player->unk_B08[0] = player->linearVelocity = -5.0f;
- player->unk_B08[1] += (player->linearVelocity * 0.05f);
+ player->unk_B08 = player->linearVelocity = -5.0f;
+ player->unk_B0C += (player->linearVelocity * 0.05f);
player->actor.velocity.y = 5.0f;
player->currentYaw = player->actor.world.rot.y;
player->actor.home.rot.y = player->actor.world.rot.y;
@@ -342,19 +342,23 @@ void EnHakurock_Update(Actor* thisx, PlayState* play) {
void func_80B228F4(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 185, 24, 255);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void EnHakurock_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(-100.0f, 0.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteMaterialDL);
gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteModelDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
index c54703ef9..091525ce0 100644
--- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
+++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
@@ -107,9 +107,9 @@ void func_80B22E0C(EnHanabiStruct* arg0) {
arg0->unk_20.y *= arg0->unk_14.x;
arg0->unk_20.y -= 1.0f;
- arg0->unk_20.x += randPlusMinusPoint5Scaled(0.8f);
- arg0->unk_20.y += randPlusMinusPoint5Scaled(0.8f);
- arg0->unk_20.z += randPlusMinusPoint5Scaled(0.8f);
+ arg0->unk_20.x += Rand_CenteredFloat(0.8f);
+ arg0->unk_20.y += Rand_CenteredFloat(0.8f);
+ arg0->unk_20.z += Rand_CenteredFloat(0.8f);
if (arg0->unk_01 > 0) {
arg0->unk_01--;
@@ -141,48 +141,49 @@ void func_80B22FA8(EnHanabiStruct* arg0, PlayState* play2) {
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL);
sp53 = 0xFF;
- if (sp53) {}
for (i = 0; i < 400; i++, arg0++) {
- if (arg0->unk_00 == 1) {
- Matrix_Translate(arg0->unk_08.x, arg0->unk_08.y, arg0->unk_08.z, MTXMODE_NEW);
- Matrix_ReplaceRotation(&play->billboardMtxF);
- if (arg0->unk_01 < 40) {
- Matrix_Scale(arg0->unk_04 * 0.025f * arg0->unk_01, arg0->unk_04 * 0.025f * arg0->unk_01, 1.0f,
- MTXMODE_APPLY);
- } else {
- Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY);
- }
- Matrix_RotateZS(play->gameplayFrames * 4864, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
-
- if (sp53 != arg0->unk_02) {
- gDPPipeSync(POLY_XLU_DISP++);
- gDPSetEnvColor(POLY_XLU_DISP++, D_80B23C40[arg0->unk_02], D_80B23C40[arg0->unk_02 + 1],
- D_80B23C40[arg0->unk_02 + 2], 255);
-
- sp53 = arg0->unk_02;
- }
-
- if (arg0->unk_01 < 6) {
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1],
- D_80B23C2C[arg0->unk_02 + 2], arg0->unk_01 * 50);
- } else {
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1],
- D_80B23C2C[arg0->unk_02 + 2], 255);
- }
-
- gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL);
+ if (arg0->unk_00 != 1) {
+ continue;
}
+
+ Matrix_Translate(arg0->unk_08.x, arg0->unk_08.y, arg0->unk_08.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ if (arg0->unk_01 < 40) {
+ Matrix_Scale(arg0->unk_04 * 0.025f * arg0->unk_01, arg0->unk_04 * 0.025f * arg0->unk_01, 1.0f,
+ MTXMODE_APPLY);
+ } else {
+ Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY);
+ }
+ Matrix_RotateZS(play->gameplayFrames * 4864, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ if (sp53 != arg0->unk_02) {
+ gDPPipeSync(POLY_XLU_DISP++);
+ gDPSetEnvColor(POLY_XLU_DISP++, D_80B23C40[arg0->unk_02], D_80B23C40[arg0->unk_02 + 1],
+ D_80B23C40[arg0->unk_02 + 2], 255);
+
+ sp53 = arg0->unk_02;
+ }
+
+ if (arg0->unk_01 < 6) {
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1],
+ D_80B23C2C[arg0->unk_02 + 2], arg0->unk_01 * 50);
+ } else {
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1],
+ D_80B23C2C[arg0->unk_02 + 2], 255);
+ }
+
+ gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL);
}
CLOSE_DISPS(gfxCtx);
@@ -286,10 +287,10 @@ void func_80B236C8(EnHanabi* this, PlayState* play) {
}
sp34.x += sp30 * Math_SinS(this->actor.home.rot.y);
- sp34.y += randPlusMinusPoint5Scaled(300.0f);
+ sp34.y += Rand_CenteredFloat(300.0f);
sp34.z += sp30 * Math_CosS(this->actor.home.rot.y);
- if (this->actor.home.rot.x >= 0x259) {
+ if (this->actor.home.rot.x > 0x258) {
sp28 = func_80B22C80(&sp34, this->unk_148, 2.0f);
} else {
sp28 = func_80B22C80(&sp34, this->unk_148, 1.0f);
diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
index 4a01b663e..e5b806b90 100644
--- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c
+++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
@@ -94,7 +94,7 @@ s32 EnHata_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void EnHata_Draw(Actor* thisx, PlayState* play) {
EnHata* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHata_OverrideLimbDraw, NULL,
&this->dyna.actor);
}
diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
index 5fa9f5ea2..a335e39d2 100644
--- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
+++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
@@ -186,7 +186,7 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
void EnHeishi_Draw(Actor* thisx, PlayState* play) {
EnHeishi* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHeishi_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c
index 34e1d1e15..180bf8cab 100644
--- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c
+++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c
@@ -37,14 +37,14 @@ typedef enum {
/* 4 */ HG_ANIM_REACH_FORWARD,
/* 5 */ HG_ANIM_CURL_UP,
/* 6 */ HG_ANIM_CROUCHED_PANIC,
- /* 7 */ HG_ANIM_PANIC,
+ /* 7 */ HG_ANIM_PANIC
} HgAnimation;
typedef enum {
/* 0 */ HG_CS_FIRST_ENCOUNTER,
/* 1 */ HG_CS_GET_MASK,
/* 2 */ HG_CS_SUBSEQUENT_ENCOUNTER,
- /* 3 */ HG_CS_SONG_OF_HEALING,
+ /* 3 */ HG_CS_SONG_OF_HEALING
} HgCsIndex;
ActorInit En_Hg_InitVars = {
@@ -448,11 +448,13 @@ void EnHg_Draw(Actor* thisx, PlayState* play) {
EnHg* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHg_OverrideLimbDraw, EnHg_PostLimbDraw, &this->actor);
Matrix_Put(&this->mf);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherGibdoEyebrowsDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
index bbef58b1a..02c6d252c 100644
--- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
+++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
@@ -45,7 +45,7 @@ typedef enum {
/* 3 */ HGO_ANIM_CONSOLE,
/* 4 */ HGO_ANIM_CONSOLE_HEAD_UP,
/* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT,
- /* 6 */ HGO_ANIM_TOSS,
+ /* 6 */ HGO_ANIM_TOSS
} HgoAnimation;
ActorInit En_Hgo_InitVars = {
@@ -317,8 +317,7 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
switch (this->animIndex) {
case HGO_ANIM_ASTONISHED:
- if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) &&
- (this->isInCutscene == false)) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && !this->isInCutscene) {
this->isInCutscene = true;
if ((gSaveContext.sceneLayer == 0) &&
((play->csCtx.scriptIndex == 2) || (play->csCtx.scriptIndex == 4))) {
@@ -416,12 +415,14 @@ void EnHgo_Draw(Actor* thisx, PlayState* play) {
EnHgo* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHgo_OverrideLimbDraw, &EnHgo_PostLimbDraw, &this->actor);
Matrix_Put(&this->mf);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherHumanEyebrowsDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c
index 29a7c6a8e..8ad694a11 100644
--- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c
+++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c
@@ -87,7 +87,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->unk_21E = ENHIDDENNUTS_GET_F80(&this->actor);
+ this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor);
this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor);
if (this->switchFlag == 0x7F) {
@@ -99,12 +99,12 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
return;
}
- if (this->unk_21E == 0x1F) {
+ if (this->pathIndex == ENHIDDENNUTS_PATH_INDEX_NONE) {
Actor_Kill(&this->actor);
return;
}
- this->path = SubS_GetPathByIndex(play, this->unk_21E, 0x3F);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENHIDDENNUTS_PATH_INDEX_NONE_ALT);
this->csId = this->actor.csId;
func_801A5080(2);
func_80BDB268(this);
@@ -156,7 +156,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
this->unk_20A = 0;
}
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80BDB580(this);
return;
}
@@ -173,8 +173,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
Math_Vec3f_Copy(&sp74, &this->actor.world.pos);
- sp74.x += randPlusMinusPoint5Scaled(15.0f);
- sp74.z += randPlusMinusPoint5Scaled(15.0f);
+ sp74.x += Rand_CenteredFloat(15.0f);
+ sp74.z += Rand_CenteredFloat(15.0f);
EffectSsDtBubble_SpawnCustomColor(play, &sp74, &sp94, &sp88, &sp84, &sp80, Rand_S16Offset(120, 90), 30,
true);
@@ -216,8 +216,8 @@ void func_80BDB59C(EnHiddenNuts* this, PlayState* play) {
Math_Vec3f_Copy(&sp78, &this->actor.world.pos);
- sp78.x += randPlusMinusPoint5Scaled(15.0f);
- sp78.z += randPlusMinusPoint5Scaled(15.0f);
+ sp78.x += Rand_CenteredFloat(15.0f);
+ sp78.z += Rand_CenteredFloat(15.0f);
EffectSsDtBubble_SpawnCustomColor(play, &sp78, &sp98, &sp8C, &sp88, &sp84, Rand_S16Offset(120, 90), 30,
true);
@@ -435,6 +435,6 @@ void EnHiddenNuts_Update(Actor* thisx, PlayState* play) {
void EnHiddenNuts_Draw(Actor* thisx, PlayState* play) {
EnHiddenNuts* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h
index 435e4662c..03a0a52b7 100644
--- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h
+++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h
@@ -8,7 +8,10 @@ struct EnHiddenNuts;
typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*);
#define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
-#define ENHIDDENNUTS_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F)
+#define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F)
+
+#define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F
+#define ENHIDDENNUTS_PATH_INDEX_NONE_ALT 0x3F
typedef struct EnHiddenNuts {
/* 0x000 */ Actor actor;
@@ -23,7 +26,7 @@ typedef struct EnHiddenNuts {
/* 0x218 */ s16 unk_218;
/* 0x21A */ s16 unk_21A;
/* 0x21C */ s16 switchFlag;
- /* 0x21E */ s16 unk_21E;
+ /* 0x21E */ s16 pathIndex;
/* 0x220 */ s32 unk_220;
/* 0x224 */ s16 unk_224;
/* 0x226 */ s16 csId;
diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
index 09a110dbf..1a0105788 100644
--- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
+++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
@@ -814,11 +814,11 @@ void func_80C215E4(PlayState* play, EnHintSkb* this, Vec3f* arg2) {
s32 pad;
sp5C.y = this->actor.floorHeight;
- sp5C.x = (sin_rad(sp40) * 15.0f) + arg2->x;
- sp5C.z = (cos_rad(sp40) * 15.0f) + arg2->z;
+ sp5C.x = (Math_SinF(sp40) * 15.0f) + arg2->x;
+ sp5C.z = (Math_CosF(sp40) * 15.0f) + arg2->z;
- sp44.x = randPlusMinusPoint5Scaled(1.0f);
- sp44.z = randPlusMinusPoint5Scaled(1.0f);
+ sp44.x = Rand_CenteredFloat(1.0f);
+ sp44.z = Rand_CenteredFloat(1.0f);
sp50.y += (Rand_ZeroOne() - 0.5f) * 4.0f;
@@ -905,7 +905,7 @@ void EnHintSkb_Draw(Actor* thisx, PlayState* play) {
EnHintSkb* this = THIS;
this->limbCount = 0;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHintSkb_OverrideLimbDraw,
EnHintSkb_PostLimbDraw, &this->actor);
if (this->drawDmgEffTimer > 0) {
diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c
index 3f7c8d03e..141993738 100644
--- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c
+++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c
@@ -191,7 +191,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) {
}
} else if (this->type == EN_HOLL_TYPE_SCENE_CHANGER) {
play->nextEntrance = play->setupExitList[EN_HOLL_GET_EXIT_LIST_INDEX(&this->actor)];
- gSaveContext.unk_3DBB = 1;
+ gSaveContext.retainWeatherMode = true;
Scene_SetExitFade(play);
play->transitionTrigger = TRANS_TRIGGER_START;
play->unk_1878C(play);
@@ -319,30 +319,32 @@ void EnHoll_Update(Actor* thisx, PlayState* play) {
void EnHoll_Draw(Actor* thisx, PlayState* play) {
EnHoll* this = THIS;
- Gfx* dl;
- u32 dlIndex;
+ Gfx* dList;
+ u32 setupDListIndex;
if (this->alpha != 0) {
OPEN_DISPS(play->state.gfxCtx);
+
if (this->alpha == 255) {
- dl = POLY_OPA_DISP;
- dlIndex = 37;
+ dList = POLY_OPA_DISP;
+ setupDListIndex = SETUPDL_37;
} else {
- dl = POLY_XLU_DISP;
- dlIndex = 0;
+ dList = POLY_XLU_DISP;
+ setupDListIndex = SETUPDL_0;
}
- dl = Gfx_CallSetupDL(dl, dlIndex);
+ dList = Gfx_SetupDL(dList, setupDListIndex);
if (this->playerSide == EN_HOLL_BEHIND) {
Matrix_RotateYF(M_PI, MTXMODE_APPLY);
}
- gSPMatrix(dl++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(dl++, 0, 0, 0, 0, 0, this->alpha);
- gSPDisplayList(dl++, gEnHollCentralPlaneDL);
+ gSPMatrix(dList++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(dList++, 0, 0, 0, 0, 0, this->alpha);
+ gSPDisplayList(dList++, gEnHollCentralPlaneDL);
if (this->alpha == 255) {
- POLY_OPA_DISP = dl;
+ POLY_OPA_DISP = dList;
} else {
- POLY_XLU_DISP = dl;
+ POLY_XLU_DISP = dList;
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
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 f12599df7..787a40da7 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse.h"
+#include "z64horse.h"
#include "z64rumble.h"
#include "overlays/actors/ovl_En_In/z_en_in.h"
#include "overlays/actors/ovl_Obj_Um/z_obj_um.h"
@@ -91,34 +92,22 @@ void EnHorse_StickDirection(Vec2f* curStick, f32* stickMag, s16* angle);
s32 EnHorse_GetMountSide(EnHorse* this, PlayState* play);
typedef struct {
- s32 cueId;
- s32 csFuncIdx;
-} CsActionEntry;
+ /* 0x0 */ s32 cueId;
+ /* 0x4 */ s32 csFuncIdx;
+} CsActionEntry; // size = 0x8
typedef struct {
- s16 x;
- s16 y;
- s16 z;
- s16 speed;
- s16 angle;
-} RaceWaypoint;
+ /* 0x0 */ s16 x;
+ /* 0x2 */ s16 y;
+ /* 0x4 */ s16 z;
+ /* 0x6 */ s16 speed;
+ /* 0x8 */ s16 angle;
+} RaceWaypoint; // size = 0xA
typedef struct {
- s32 numWaypoints;
- RaceWaypoint* waypoints;
-} RaceInfo;
-
-typedef enum {
- /* 0 */ ENHORSE_ANIM_IDLE,
- /* 1 */ ENHORSE_ANIM_WHINNY,
- /* 2 */ ENHORSE_ANIM_STOPPING,
- /* 3 */ ENHORSE_ANIM_REARING,
- /* 4 */ ENHORSE_ANIM_WALK,
- /* 5 */ ENHORSE_ANIM_TROT,
- /* 6 */ ENHORSE_ANIM_GALLOP,
- /* 7 */ ENHORSE_ANIM_LOW_JUMP,
- /* 8 */ ENHORSE_ANIM_HIGH_JUMP
-} EnHorseAnimation;
+ /* 0x0 */ s32 numWaypoints;
+ /* 0x4 */ RaceWaypoint* waypoints;
+} RaceInfo; // size = 0x8
static AnimationHeader* sEponaAnimations[] = {
&object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64,
@@ -290,8 +279,8 @@ void EnHorse_RaceWaypointPos(RaceWaypoint* waypoints, s32 idx, Vec3f* pos) {
pos->z = waypoints[idx].z;
}
-void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnAmount) {
- func_800F415C(&this->actor, pos, turnAmount);
+void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnYaw) {
+ Horse_RotateToPoint(&this->actor, pos, turnYaw);
}
void func_8087B7C0(EnHorse* this, PlayState* play, Path* path) {
@@ -594,15 +583,15 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) {
f32 minDist = 1.0e+38;
Player* player = GET_PLAYER(play);
Vec3f spawnPos;
- s32 pathIdx = func_800F3940(play);
+ s32 pathIndex = Horse_GetJumpingFencePathIndex(play);
s32 pathCount;
Vec3s* pathPoints;
- if (pathIdx == -1) {
+ if (pathIndex == -1) {
return false;
}
- path = &play->setupPathList[pathIdx];
+ path = &play->setupPathList[pathIndex];
pathCount = path->count;
pathPoints = Lib_SegmentedToVirtual(path->points);
@@ -703,7 +692,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Actor_ProcessInitChain(&this->actor, sInitChain);
EnHorse_ClearDustFlags(&this->dustFlags);
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
Skin_Setup(&this->skin);
this->riderPos = thisx->world.pos;
this->unk_52C = 0;
@@ -1886,8 +1875,8 @@ void EnHorse_InitInactive(EnHorse* this) {
}
void EnHorse_Inactive(EnHorse* this, PlayState* play) {
- if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) {
- D_801BDAA4 = 0;
+ if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) {
+ gHorsePlayedEponasSong = false;
if (EnHorse_Spawn(this, play)) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
@@ -1966,8 +1955,8 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
this->actor.speed = 0.0f;
EnHorse_IdleAnimSounds(this, play);
- if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) {
- D_801BDAA4 = 0;
+ if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) {
+ gHorsePlayedEponasSong = false;
if (!func_8087C38C(play, this, &this->actor.world.pos)) {
if (EnHorse_Spawn(this, play)) {
if (this->type == HORSE_TYPE_2) {
@@ -2062,7 +2051,7 @@ void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) {
void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
f32 distToPlayer;
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
if (((this->playerDir == PLAYER_DIR_BACK_R) || (this->playerDir == PLAYER_DIR_BACK_L)) && (distToPlayer > 300.0f) &&
@@ -2971,7 +2960,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
s32 animFinished;
s16 yaw;
- if ((D_801BDAA4 != 0) || (this->type == HORSE_TYPE_HNI)) {
+ if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) {
EnHorse_StartIdleRidable(this);
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
@@ -3330,7 +3319,7 @@ void func_808848C8(EnHorse* this, PlayState* play) {
EnHorse_PlayWalkingSound(this);
this->actor.speed = 4.0f;
- func_800F415C(&this->actor, &sp24, 2000);
+ Horse_RotateToPoint(&this->actor, &sp24, 0x7D0);
this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f;
SkelAnime_Update(&this->skin.skelAnime);
if (Math3D_Distance(&sp24, &this->actor.world.pos) < 30.0f) {
@@ -4683,7 +4672,7 @@ void EnHorse_Draw(Actor* thisx, PlayState* play) {
EnHorse* this = THIS;
if (!(this->stateFlags & ENHORSE_INACTIVE) && (this->actor.update != func_8087D540)) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
this->stateFlags |= ENHORSE_DRAW;
if (!(this->unk_1EC & 1)) {
if (this->stateFlags & ENHORSE_JUMPING) {
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
index b2c58bcad..3cfc1fb54 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
@@ -75,7 +75,7 @@ typedef enum EnHorseAction {
/* 25 */ ENHORSE_ACTION_25
} EnHorseAction;
-typedef enum {
+typedef enum EnHorsePlayerDir {
/* 0 */ PLAYER_DIR_FRONT_R,
/* 1 */ PLAYER_DIR_FRONT_L,
/* 2 */ PLAYER_DIR_BACK_R,
@@ -84,7 +84,19 @@ typedef enum {
/* 5 */ PLAYER_DIR_SIDE_L
} EnHorsePlayerDir;
-typedef enum {
+typedef enum EnHorseAnimation {
+ /* 0 */ ENHORSE_ANIM_IDLE,
+ /* 1 */ ENHORSE_ANIM_WHINNY,
+ /* 2 */ ENHORSE_ANIM_STOPPING,
+ /* 3 */ ENHORSE_ANIM_REARING,
+ /* 4 */ ENHORSE_ANIM_WALK,
+ /* 5 */ ENHORSE_ANIM_TROT,
+ /* 6 */ ENHORSE_ANIM_GALLOP,
+ /* 7 */ ENHORSE_ANIM_LOW_JUMP,
+ /* 8 */ ENHORSE_ANIM_HIGH_JUMP
+} EnHorseAnimation;
+
+typedef enum HorseType {
/* 0 */ HORSE_TYPE_EPONA,
/* 1 */ HORSE_TYPE_HNI,
/* 2 */ HORSE_TYPE_2,
@@ -100,7 +112,7 @@ typedef enum {
#define ENHORSE_IS_4000_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_4000)
#define ENHORSE_IS_DONKEY_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_DONKEY)
-typedef enum {
+typedef enum EnHorseParam {
/* 0 */ ENHORSE_0,
/* 1 */ ENHORSE_1,
/* 2 */ ENHORSE_2,
@@ -121,7 +133,7 @@ typedef enum {
/* 17 */ ENHORSE_17,
/* 18 */ ENHORSE_18,
/* 19 */ ENHORSE_19,
- /* 20 */ ENHORSE_20,
+ /* 20 */ ENHORSE_20
} EnHorseParam;
/**
diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
index d37fb8f23..c7a2edaaa 100644
--- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
+++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse_game_check.h"
+#include "z64horse.h"
#include "objects/object_horse_game_check/object_horse_game_check.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -168,9 +169,9 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) {
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
- D_801BDA9C = 0;
+ gHorseIsMounted = false;
if (player->stateFlags1 & PLAYER_STATE1_800000) {
- D_801BDAA0 = 1;
+ D_801BDAA0 = true;
}
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 2);
play->transitionTrigger = TRANS_TRIGGER_START;
diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h
index d43f1f90c..9033878a4 100644
--- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h
+++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h
@@ -11,7 +11,7 @@ typedef s32 (*EnHorseGameCheckUnkFunc)(struct EnHorseGameCheck*, PlayState*);
#define ENHORSEGAMECHECK_GET_FF(thisx) ((thisx)->params & 0xFF)
#define ENHORSEGAMECHECK_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
-enum {
+typedef enum {
/* 0 */ ENHORSEGAMECHECK_FF_0,
/* 1 */ ENHORSEGAMECHECK_FF_1,
/* 2 */ ENHORSEGAMECHECK_FF_2,
@@ -22,8 +22,8 @@ enum {
/* 7 */ ENHORSEGAMECHECK_FF_7,
/* 8 */ ENHORSEGAMECHECK_FF_8,
/* 9 */ ENHORSEGAMECHECK_FF_9,
- /* 10 */ ENHORSEGAMECHECK_FF_MAX,
-};
+ /* 10 */ ENHORSEGAMECHECK_FF_MAX
+} EnHorseGameCheckParam;
typedef struct EnHorseGameCheck {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
index 8c77bb2a0..5079e1a57 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse_link_child.h"
+#include "z64horse.h"
#include "objects/object_horse_link_child/object_horse_link_child.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_2000000)
@@ -314,7 +315,7 @@ void func_808DF088(EnHorseLinkChild* this, PlayState* play) {
} else {
phi_v0 = -1;
}
- sp32 += (phi_v0 << 0xE);
+ sp32 += (phi_v0 * 0x4000);
} else {
sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos) - this->actor.world.rot.y;
}
@@ -417,7 +418,7 @@ void func_808DF560(EnHorseLinkChild* this) {
this->unk_148 = 1;
}
- D_801BDAA4 = 0;
+ gHorsePlayedEponasSong = false;
Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f,
Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f);
}
@@ -425,8 +426,8 @@ void func_808DF560(EnHorseLinkChild* this) {
void func_808DF620(EnHorseLinkChild* this, PlayState* play) {
s16 sp36;
- if (D_801BDAA4 != 0) {
- D_801BDAA4 = 0;
+ if (gHorsePlayedEponasSong) {
+ gHorsePlayedEponasSong = false;
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH);
func_808DF788(this);
return;
@@ -436,7 +437,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) {
sp36 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
if ((Math_CosS(sp36) < 0.7071f) && (this->unk_148 == 2)) {
- func_800F415C(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C);
+ Horse_RotateToPoint(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C);
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
@@ -472,9 +473,9 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) {
if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) {
if (this->unk_1E0 == 0) {
- func_800F415C(&this->actor, &player->actor.world.pos, 0x12C);
+ Horse_RotateToPoint(&this->actor, &player->actor.world.pos, 0x12C);
} else {
- func_800F415C(&this->actor, &this->actor.home.pos, 0x12C);
+ Horse_RotateToPoint(&this->actor, &this->actor.home.pos, 0x12C);
}
}
@@ -593,7 +594,7 @@ s32 EnHorseLinkChild_OverrideSkinDraw(Actor* thisx, PlayState* play, s32 limbInd
void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play) {
EnHorseLinkChild* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_80138258(&this->actor, play, &this->skin, EnHorseLinkChild_PostSkinDraw, EnHorseLinkChild_OverrideSkinDraw,
true);
}
diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
index 4d535292f..648a13d46 100644
--- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c
+++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
@@ -99,9 +99,9 @@ void EnHs_Destroy(Actor* thisx, PlayState* play) {
void func_80952DFC(PlayState* play) {
if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) {
- func_80151BB4(play, 0x2E);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD);
}
- func_80151BB4(play, 0x10);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GROG);
}
void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) {
@@ -356,7 +356,7 @@ void EnHs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
void EnHs_Draw(Actor* thisx, PlayState* play) {
EnHs* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHs_OverrideLimbDraw, EnHs_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c
index e053a8528..abdf870b9 100644
--- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c
+++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c
@@ -25,7 +25,7 @@ static u8 D_80BF3260[] = {
/* 0x05 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x57 - 0x09),
/* 0x09 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 45, 0x51 - 0x0F),
/* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0x4B - 0x15),
- /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x1A - 0x19),
+ /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x1A - 0x19),
/* 0x19 */ SCHEDULE_CMD_RET_NONE(),
/* 0x1A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x45 - 0x20),
/* 0x20 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 55, 17, 15, 0x3F - 0x26),
@@ -42,7 +42,7 @@ static u8 D_80BF3260[] = {
/* 0x5B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0xAF - 0x61),
/* 0x61 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 10, 0xA9 - 0x67),
/* 0x67 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0xA3 - 0x6D),
- /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x8A - 0x71),
+ /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x8A - 0x71),
/* 0x71 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x84 - 0x77),
/* 0x77 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x7E - 0x7D),
/* 0x7D */ SCHEDULE_CMD_RET_NONE(),
@@ -372,7 +372,7 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) {
case 1:
case 3:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_ROOM_KEY) && (this->unk_3F6 == 3)) {
CutsceneManager_Stop(csId);
this->unk_3F6 = 5;
} else {
@@ -497,7 +497,7 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) {
}
s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s32 arg3, s32 arg4) {
- u8 sp4F = ENIG_GET_FF(&this->actor);
+ u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor);
Vec3s* sp48;
Vec3f sp3C;
Vec3f sp30;
@@ -509,7 +509,7 @@ s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s
this->timePath = NULL;
if (D_80BF3318[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]);
}
if ((sp2C != NULL) && (sp2C->update != NULL)) {
@@ -541,7 +541,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp56 = SCHEDULE_TIME_NOW;
- u8 sp55 = ENIG_GET_FF(&this->actor);
+ u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor);
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
@@ -553,10 +553,10 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
door = func_80BF1200(play, scheduleOutput->result);
if (D_80BF3318[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp55, D_80BF3318[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]);
}
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if (this->timePath != NULL) {
sp4C = Lib_SegmentedToVirtual(this->timePath->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@@ -566,7 +566,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
- if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) {
+ if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) {
this->unk_2A4 = -75;
} else {
this->unk_2A4 = 75;
@@ -587,7 +587,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp2E = SCHEDULE_TIME_NOW;
u16 phi_v1;
- u8 sp2B = ENIG_GET_FF(&this->actor);
+ u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor);
u16 tmp;
s16 pad;
s32 ret = false;
@@ -595,7 +595,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
if (D_80BF3318[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80BF3318[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]);
}
if ((this->timePath != NULL) && (this->timePath->count < 3)) {
@@ -635,7 +635,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
}
s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
- u8 sp4F = ENIG_GET_FF(&this->actor);
+ u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor);
Vec3f sp40;
Vec3f sp34;
Vec3s* sp30;
@@ -645,7 +645,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
if (D_80BF3318[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]);
}
if ((this->timePath != 0) && (this->timePath->count >= 2)) {
@@ -735,7 +735,7 @@ s32 func_80BF2470(EnIg* this, PlayState* play) {
s32 pad;
if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) {
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if (((f32)this->unk_3E2 / this->unk_3E0) <= 0.9f) {
door->unk_1A7 = this->unk_2A4;
} else {
@@ -1036,7 +1036,7 @@ void EnIg_Draw(Actor* thisx, PlayState* play) {
EnIg* this = THIS;
if (this->scheduleResult != 0) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.h b/src/overlays/actors/ovl_En_Ig/z_en_ig.h
index c3fd0c3fb..274338a11 100644
--- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h
+++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h
@@ -9,7 +9,7 @@ typedef void (*EnIgActionFunc)(struct EnIg*, PlayState*);
typedef s32 (*EnIgUnkFunc)(struct EnIg*, PlayState*);
typedef void (*EnIgUnkFunc2)(struct EnIg*, PlayState*);
-#define ENIG_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define ENIG_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
typedef struct EnIg {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
index fc7fafdcf..02e5004f2 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -169,8 +169,7 @@ typedef enum {
/* 0x4 */ DMG_EFF_FIRE = 0x2,
/* 0x0 */ DMG_EFF_ICE,
/* 0x4 */ DMG_EFF_LIGHT_SPARKS,
- /* 0xF */ DMG_EFF_IMMUNE = 0xF,
-
+ /* 0xF */ DMG_EFF_IMMUNE = 0xF
} EnIkDmgEff;
static DamageTable sDamageTableArmor = {
@@ -488,7 +487,7 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) {
if ((this->skelAnime.curFrame > 13.0f) && (this->skelAnime.curFrame < 23.0f)) {
this->colliderQuad.base.atFlags |= AT_ON;
if (this->drawArmorFlags) {
- this->actor.speed = sin_rad((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f;
+ this->actor.speed = Math_SinF((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f;
}
} else {
this->colliderQuad.base.atFlags &= ~AT_ON;
@@ -538,7 +537,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) {
f32 phi_f2;
this->timer++;
- if ((Animation_OnFrame(&this->skelAnime, 1.0f)) || (Animation_OnFrame(&this->skelAnime, 13.0f))) {
+ if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
}
if (((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 9.0f)) ||
@@ -551,7 +550,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) {
} else {
phi_f2 = this->skelAnime.curFrame - 1.0f;
}
- this->actor.speed = sin_rad((M_PI / 8) * phi_f2) * 4.5f;
+ this->actor.speed = Math_SinF((M_PI / 8) * phi_f2) * 4.5f;
}
this->colliderQuad.base.atFlags |= AT_ON;
} else {
@@ -686,9 +685,9 @@ void EnIk_Die(EnIk* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
for (i = 6 - (this->timer >> 2); i >= 0; i--) {
- effectPos.x = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.x;
- effectPos.z = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.z;
- effectPos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ effectPos.x = Rand_CenteredFloat(80.0f) + this->actor.world.pos.x;
+ effectPos.z = Rand_CenteredFloat(80.0f) + this->actor.world.pos.z;
+ effectPos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f);
func_800B3030(play, &effectPos, &sEffectVelAndAccel, &sEffectVelAndAccel, 100, 0, 2);
}
if (this->timer == 0) {
@@ -846,9 +845,9 @@ void EnIk_UpdateArmor(EnIk* this, PlayState* play) {
ikEffect->pos.y = this->actor.floorHeight;
for (i = 0; i < 4; i++) {
- effectPos.x = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.x;
+ effectPos.x = Rand_CenteredFloat(20.0f) + ikEffect->pos.x;
effectPos.y = Rand_ZeroFloat(20.0f) + ikEffect->pos.y;
- effectPos.z = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.z;
+ effectPos.z = Rand_CenteredFloat(20.0f) + ikEffect->pos.z;
func_800B3030(play, &effectPos, &gZeroVec3f, &gZeroVec3f, 40, 7, 2);
}
@@ -1033,6 +1032,7 @@ void EnIk_UpdateArmorDraw(EnIk* this, PlayState* play) {
sp54 = 0;
OPEN_DISPS(play->state.gfxCtx);
+
gfxOpa = POLY_OPA_DISP;
gfxXlu = POLY_XLU_DISP;
@@ -1077,10 +1077,10 @@ void EnIk_Draw(Actor* thisx, PlayState* play) {
func_800B8050(&this->actor, play, 0);
func_800B8118(&this->actor, play, 0);
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
POLY_XLU_DISP = &gfx[1];
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gfxArmorType = sIronKnuckleArmorType[this->actor.params];
gSPSegment(&gfx[1], 0x08, gfxArmorType[0]);
gSPSegment(&gfx[2], 0x09, gfxArmorType[1]);
diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c
index 71c512418..ca764b134 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -5,6 +5,7 @@
*/
#include "z_en_in.h"
+#include "z64horse.h"
#include "objects/object_in/object_in.h"
#include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h"
@@ -150,7 +151,7 @@ s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
s16 frameCount;
s32 ret = false;
- if (animIndex >= 0 && animIndex < 18) {
+ if ((animIndex >= 0) && (animIndex < 18)) {
ret = true;
frameCount = sAnimationInfo[animIndex].frameCount;
if (frameCount < 0) {
@@ -224,7 +225,7 @@ s32 func_808F33B8(void) {
s32 ret = (((gSaveContext.save.day == 1) &&
((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))) ||
(gSaveContext.save.day >= 2)) &&
- !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01);
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM);
return ret;
}
@@ -273,10 +274,10 @@ void EnIn_DoNothing(EnIn* this, PlayState* play) {
}
void func_808F3618(EnIn* this, PlayState* play) {
- if (ENIN_GET_PATH(&this->actor) != 0x3F) {
+ if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_9);
}
- if (ENIN_GET_PATH(&this->actor) != 0x3F) {
+ if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) {
this->actionFunc = func_808F3690;
} else {
this->actionFunc = EnIn_DoNothing;
@@ -328,7 +329,7 @@ void func_808F38F8(EnIn* this, PlayState* play) {
while (true) {
//! @bug: Infinite loop if there is only one ACTOR_EN_IN
this->unk4A4 = (EnIn*)SubS_FindActor(play, &this->unk4A4->actor, ACTORCAT_NPC, ACTOR_EN_IN);
- if (this->unk4A4 != NULL && this->unk4A4 != this) {
+ if ((this->unk4A4 != NULL) && (this->unk4A4 != this)) {
break;
}
this->unk4A4 = (EnIn*)this->unk4A4->actor.next;
@@ -356,9 +357,13 @@ void func_808F39DC(EnIn* this, PlayState* play) {
case WEEKEVENTREG_HORSE_RACE_STATE_2:
textId = 0x347A;
break;
+
case WEEKEVENTREG_HORSE_RACE_STATE_3:
textId = 0x3476;
break;
+
+ default:
+ break;
}
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END);
} else {
@@ -366,9 +371,13 @@ void func_808F39DC(EnIn* this, PlayState* play) {
case WEEKEVENTREG_HORSE_RACE_STATE_2:
textId = 0x349D;
break;
+
case WEEKEVENTREG_HORSE_RACE_STATE_3:
textId = 0x3499;
break;
+
+ default:
+ break;
}
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END);
}
@@ -481,6 +490,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x345B;
}
break;
+
case 1:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_10)) {
textId = 0x3463;
@@ -488,11 +498,12 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x346B;
}
break;
+
case 3:
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
textId = 0x3485;
- } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA ||
- gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
+ } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) ||
+ (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) {
textId = 0x3484;
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) {
textId = 0x346D;
@@ -500,8 +511,10 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x3482;
}
break;
+
case 4:
- if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
+ if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) ||
+ (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) {
textId = 0x348A;
} else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
textId = 0x348B;
@@ -511,6 +524,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x3489;
}
break;
+
case 5:
if (func_808F33B8()) {
textId = 0x34B3;
@@ -520,17 +534,22 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x3493;
}
break;
+
case 7:
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
textId = 0x34A8;
- } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA ||
- gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
+ } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) ||
+ (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) {
textId = 0x34A7;
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) {
textId = 0x3495;
} else {
textId = 0x34A5;
}
+ break;
+
+ default:
+ break;
}
if (textId == 0) {
textId = 1;
@@ -539,12 +558,12 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
}
void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) {
- s32 unused;
+ s32 pad;
- if (textId == 0x34AE || textId == 0x34B0 || textId == 0x34B2) {
- unused = textId;
- func_80151BB4(play, 0x11);
+ if ((textId == 0x34AE) || (textId == 0x34B0) || (textId == 0x34B2)) {
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
}
+
switch (arg2) {
case 1:
case 5:
@@ -553,12 +572,15 @@ void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) {
func_808F35D8(this, play);
}
break;
+
case 2:
if (textId == 0x3473) {
func_808F35D8(this, play);
}
break;
+
case 0:
+ default:
break;
}
}
@@ -572,7 +594,7 @@ void func_808F4108(EnIn* this, PlayState* play, u16 textId) {
}
s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) {
- EnIn* this2 = this;
+ Actor* thisx = &this->actor;
if (msgCtx->choiceIndex == 0) {
func_8019F208();
@@ -583,22 +605,22 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx)
} else if (this->unk4AC & 8) {
func_808F4108(this, play, 0x3475);
} else {
- Actor_ContinueText(play, &this->actor, 0x3475);
+ Actor_ContinueText(play, thisx, 0x3475);
}
} else {
play_sound(NA_SE_SY_ERROR);
- Actor_ContinueText(play, &this->actor, 0x3473);
+ Actor_ContinueText(play, thisx, 0x3473);
}
} else {
func_8019F230();
- Actor_ContinueText(play, &this->actor, 0x3472);
+ Actor_ContinueText(play, thisx, 0x3472);
}
return 0;
}
s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 arg4) {
s32 pad;
- s32 fee = play->msgCtx.unk1206C != 0xFFFF ? play->msgCtx.unk1206C : 10;
+ s32 fee = (play->msgCtx.unk1206C != 0xFFFF) ? play->msgCtx.unk1206C : 10;
if (msgCtx->choiceIndex == 0) {
func_8019F208();
@@ -650,31 +672,38 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
Actor_ContinueText(play, &this->actor, 0x34B0);
ret = false;
break;
+
case 0x34A9:
func_808F4108(this, play, 0x34AA);
SET_WEEKEVENTREG(WEEKEVENTREG_63_40);
ret = false;
break;
+
case 0x34AA:
func_808F4108(this, play, 0x34AB);
ret = false;
break;
+
case 0x34AB:
func_808F4108(this, play, 0x34AC);
ret = false;
break;
+
case 0x34AC:
func_808F4108(this, play, 0x34AD);
ret = false;
break;
+
case 0x34AD:
Actor_ContinueText(play, &this->actor, 0x34AE);
ret = false;
break;
+
case 0x34B1:
Actor_ContinueText(play, &this->actor, 0x34B2);
ret = false;
break;
+
default:
break;
}
@@ -687,48 +716,62 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
Actor_ContinueText(play, &this->actor, 0x3459);
ret = false;
break;
+
case 0x3459:
Actor_ContinueText(play, &this->actor, 0x345A);
ret = false;
break;
+
case 0x345A:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x345B:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x345C:
Actor_ContinueText(play, &this->actor, 0x345D);
ret = false;
break;
+
case 0x345D:
Actor_ContinueText(play, &this->actor, 0x345E);
ret = false;
break;
+
case 0x345E:
Actor_ContinueText(play, &this->actor, 0x345F);
ret = false;
break;
+
case 0x345F:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x3460:
Actor_ContinueText(play, &this->actor, 0x3461);
ret = false;
break;
+
case 0x3461:
Actor_ContinueText(play, &this->actor, 0x3462);
ret = false;
break;
+
case 0x3462:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
+ default:
+ break;
}
break;
+
case 1:
switch (textId) {
case 0x3463:
@@ -736,14 +779,17 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
Actor_ContinueText(play, &this->actor, 0x3464);
ret = false;
break;
+
case 0x3464:
Actor_ContinueText(play, &this->actor, 0x3465);
ret = false;
break;
+
case 0x3465:
Actor_ContinueText(play, &this->actor, 0x3466);
ret = false;
break;
+
case 0x3466:
if (msgCtx->choiceIndex == 0) {
func_8019F208();
@@ -768,54 +814,65 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x3467:
case 0x3468:
case 0x3469:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x346B:
Actor_ContinueText(play, &this->actor, 0x346C);
ret = false;
break;
+
case 0x346C:
Actor_ContinueText(play, &this->actor, 0x3466);
ret = false;
break;
+
case 0x346A:
this->actionFunc = func_808F5A94;
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
}
break;
+
case 2:
switch (textId) {
case 0x346E:
func_808F4108(this, play, 0x346F);
ret = false;
break;
+
case 0x3470:
Actor_ContinueText(play, &this->actor, 0x3471);
ret = false;
break;
+
case 0x3483:
Actor_ContinueText(play, &this->actor, 0x3471);
ret = false;
break;
+
case 0x3471:
func_808F4150(play, this, arg2, msgCtx);
ret = false;
break;
+
case 0x3472:
func_808F43E0(this);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x3473:
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x3475:
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START);
func_800FD750(NA_BGM_HORSE);
@@ -824,6 +881,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
play->transitionTrigger = TRANS_TRIGGER_START;
SET_WEEKEVENTREG(WEEKEVENTREG_57_01);
break;
+
case 0x3478:
if (msgCtx->choiceIndex == 0) {
func_808F4150(play, this, arg2, msgCtx);
@@ -835,13 +893,18 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x347B:
func_808F4108(this, play, 0x347C);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
+ default:
+ break;
}
break;
+
case 3:
switch (textId) {
case 0x346D:
@@ -850,36 +913,44 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
case 0x346F:
func_808F4108(this, play, 0x3470);
ret = false;
break;
+
case 0x3482:
func_808F4108(this, play, 0x3483);
SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
case 0x3484:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x3485:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x3474:
func_808F4108(this, play, 0x3475);
ret = false;
break;
+
case 0x3476:
Actor_ContinueText(play, &this->actor, 0x3477);
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1);
EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7);
ret = false;
break;
+
case 0x3477:
SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_808F4108(this, play, 0x3478);
ret = false;
break;
+
case 0x347A:
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1);
EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7);
@@ -903,42 +974,52 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x347F:
Actor_ContinueText(play, &this->actor, 0x3480);
ret = false;
break;
+
case 0x3480:
func_808F43E0(this);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x3479:
func_808F43E0(this);
func_808F35D8(this, play);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x347C:
this->actionFunc = func_808F3D40;
Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
func_808F35D8(this, play);
ret = true;
break;
+
case 0x3481:
this->actionFunc = func_808F5A34;
func_808F43E0(this);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x347D:
this->actionFunc = func_808F5A34;
func_808F43E0(this);
- func_80151BB4(play, 0x11);
- func_80151BB4(play, 0x2F);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK);
ret = true;
break;
+
+ default:
+ break;
}
break;
+
case 4:
switch (textId) {
case 0x3486:
@@ -946,56 +1027,71 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
SET_WEEKEVENTREG(WEEKEVENTREG_16_01);
ret = false;
break;
+
case 0x3487:
Actor_ContinueText(play, &this->actor, 0x3488);
ret = false;
break;
+
case 0x3488:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x3489:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x348A:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x348B:
Actor_ContinueText(play, &this->actor, 0x348C);
ret = false;
break;
+
case 0x348C:
Actor_ContinueText(play, &this->actor, 0x348D);
ret = false;
break;
+
case 0x348D:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
+ default:
+ break;
}
break;
+
case 5:
switch (textId) {
case 0x3468:
case 0x3469:
case 0x3491:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x348E:
case 0x34B3:
Actor_ContinueText(play, &this->actor, 0x348F);
SET_WEEKEVENTREG(WEEKEVENTREG_16_02);
ret = false;
break;
+
case 0x3493:
Actor_ContinueText(play, &this->actor, 0x3494);
ret = false;
break;
+
case 0x348F:
case 0x3494:
Actor_ContinueText(play, &this->actor, 0x3490);
ret = false;
break;
+
case 0x3490:
if (msgCtx->choiceIndex == 0) {
func_8019F208();
@@ -1020,49 +1116,59 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x3492:
this->actionFunc = func_808F5A94;
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
}
break;
+
case 7:
switch (textId) {
case 0x34A8:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x34A7:
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x3495:
func_808F4108(this, play, 0x3496);
SET_WEEKEVENTREG(WEEKEVENTREG_16_04);
SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
case 0x3497:
func_808F4108(this, play, 0x3498);
ret = false;
break;
+
case 0x34A4:
this->actionFunc = func_808F5A34;
func_808F43E0(this);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x34A5:
func_808F4108(this, play, 0x34A6);
SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
case 0x3473:
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
break;
+
case 0x3474:
Actor_ContinueText(play, &this->actor, 0x3475);
ret = false;
break;
+
case 0x3475:
SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START);
func_800FD750(NA_BGM_HORSE);
@@ -1071,6 +1177,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
play->transitionTrigger = TRANS_TRIGGER_START;
SET_WEEKEVENTREG(WEEKEVENTREG_57_01);
break;
+
case 0x349D:
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1);
EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7);
@@ -1083,19 +1190,22 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x349F:
this->actionFunc = func_808F3D40;
Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
func_808F35D8(this, play);
ret = true;
break;
+
case 0x34A0:
this->actionFunc = func_808F5A34;
- func_80151BB4(play, 0x11);
- func_80151BB4(play, 0x2F);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK);
func_808F43E0(this);
ret = true;
break;
+
case 0x34A1:
func_808F35D8(this, play);
if (Inventory_HasEmptyBottle()) {
@@ -1107,25 +1217,30 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x34A2:
Actor_ContinueText(play, &this->actor, 0x34A3);
ret = false;
break;
+
case 0x34A3:
func_808F43E0(this);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x3499:
Actor_ContinueText(play, &this->actor, 0x349A);
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1);
EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7);
ret = false;
break;
+
case 0x349A:
Actor_ContinueText(play, &this->actor, 0x349B);
ret = false;
break;
+
case 0x349B:
if (msgCtx->choiceIndex == 0) {
func_808F4270(play, this, arg2, msgCtx, 1);
@@ -1136,42 +1251,57 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
}
break;
+
case 0x349C:
func_808F43E0(this);
func_808F35D8(this, play);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
+ default:
+ break;
}
break;
+
case 6:
switch (textId) {
case 0x3496:
func_808F4108(this, play, 0x3497);
ret = false;
break;
+
case 0x3498:
case 0x34A6:
Actor_ContinueText(play, &this->actor, 0x3471);
ret = false;
break;
+
case 0x3471:
func_808F4270(play, this, arg2, msgCtx, 0);
ret = false;
break;
+
case 0x3472:
func_808F43E0(this);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
- func_80151BB4(play, 0x11);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS);
ret = true;
break;
+
case 0x349E:
func_808F4108(this, play, 0x349F);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
+
+ default:
+ break;
}
break;
+
+ default:
+ break;
}
return ret;
}
@@ -1185,6 +1315,7 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) {
func_808F4054(play, this, arg2, this->actor.textId);
ret = true;
break;
+
case TEXT_STATE_CHOICE:
case TEXT_STATE_5:
if (Message_ShouldAdvance(play) && func_808F4414(play, this, arg2)) {
@@ -1192,6 +1323,9 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) {
ret = true;
}
break;
+
+ default:
+ break;
}
return ret;
}
@@ -1286,7 +1420,7 @@ void func_808F5A34(EnIn* this, PlayState* play) {
}
void func_808F5A94(EnIn* this, PlayState* play) {
- if (func_800F41E4(play, &play->actorCtx)) {
+ if (Horse_IsActive(play, &play->actorCtx)) {
if (gSaveContext.save.day == 3) {
func_808F5728(play, this, 7, &this->unk48C);
} else {
@@ -1302,7 +1436,7 @@ void func_808F5A94(EnIn* this, PlayState* play) {
}
void func_808F5B58(EnIn* this, PlayState* play) {
- if (func_800F41E4(play, &play->actorCtx)) {
+ if (Horse_IsActive(play, &play->actorCtx)) {
if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) {
if (gSaveContext.save.day == 3) {
@@ -1367,10 +1501,10 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
this->unk4AC = 0;
type = ENIN_GET_TYPE(thisx);
this->unk4B0 = GET_WEEKEVENTREG_HORSE_RACE_STATE;
- if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) {
+ if ((type == ENIN_HORSE_RIDER_BLUE_SHIRT) || (type == ENIN_BLUE_SHIRT)) {
this->unk4AC |= 8;
}
- if (type == ENIN_HORSE_RIDER_YELLOW_SHIRT || type == ENIN_HORSE_RIDER_BLUE_SHIRT) {
+ if ((type == ENIN_HORSE_RIDER_YELLOW_SHIRT) || (type == ENIN_HORSE_RIDER_BLUE_SHIRT)) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
this->unk488 = 1;
Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f,
@@ -1384,9 +1518,9 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
Collider_SetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, &this->colliderJntSphElement);
Actor_SetScale(&this->actor, 0.01f);
this->actor.gravity = -4.0f;
- this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH_INDEX(&this->actor), ENIN_PATH_INDEX_NONE);
this->unk23D = 0;
- if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) {
+ if ((type == ENIN_YELLOW_SHIRT) || (type == ENIN_BLUE_SHIRT)) {
if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) ||
(GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
@@ -1394,7 +1528,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
this->unk4AC |= 2;
func_808F35AC(this, play);
this->unk23C = 0;
- D_801BDAA0 = 0;
+ D_801BDAA0 = false;
if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6);
@@ -1419,7 +1553,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0);
this->actionFunc = func_808F5A94;
} else {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x,
this->actor.shape.rot.y, this->actor.shape.rot.z, 0xF);
@@ -1430,7 +1564,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
}
}
} else {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
Actor_Kill(&this->actor);
} else {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_7);
@@ -1477,15 +1611,15 @@ void func_808F6334(EnIn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 talkState = Message_GetState(&play->msgCtx);
- this->unk4C4 += this->unk4C0 != 0.0f ? 40.0f : -40.0f;
+ this->unk4C4 += (this->unk4C0 != 0.0f) ? 40.0f : -40.0f;
this->unk4C4 = CLAMP(this->unk4C4, 0.0f, 80.0f);
Matrix_Translate(this->unk4C4, 0.0f, 0.0f, MTXMODE_APPLY);
if ((&this->actor == player->talkActor) &&
- !((play->msgCtx.currentTextId >= 0xFF) && (play->msgCtx.currentTextId <= 0x200)) &&
- (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) {
+ ((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) &&
+ (this->prevTalkState == TEXT_STATE_3)) {
if (!(play->state.frames & 1)) {
- this->unk4C0 = this->unk4C0 != 0.0f ? 0.0f : 1.0f;
+ this->unk4C0 = (this->unk4C0 != 0.0f) ? 0.0f : 1.0f;
}
} else {
this->unk4C0 = 0.0f;
@@ -1519,16 +1653,17 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
object_in_DL_013440,
};
- if (this->unk23C != 0 && limbIndex != 16) {
+ if ((this->unk23C != 0) && (limbIndex != 16)) {
if (sp50[limbIndex] != NULL) {
*dList = sp50[limbIndex];
}
}
- if (this->unk4AC & 4 && limbIndex == 16) {
+ if ((this->unk4AC & 4) && (limbIndex == 16)) {
*dList = object_in_DL_01C528;
}
OPEN_DISPS(play->state.gfxCtx);
+
if (limbIndex == 16) {
TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 };
@@ -1537,6 +1672,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
} else {
AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(object_in_Matanimheader_001C30), this->unk4AC & 8 ? 1 : 0);
}
+
CLOSE_DISPS(play->state.gfxCtx);
if (limbIndex == 16) {
@@ -1550,7 +1686,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY);
Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY);
}
- if (limbIndex == 9 || limbIndex == 10 || limbIndex == 13) {
+ if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) {
rot->y += (s16)(Math_SinS(this->unk376[limbIndex]) * 200.0f);
rot->z += (s16)(Math_CosS(this->unk39E[limbIndex]) * 200.0f);
}
@@ -1592,21 +1728,25 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (this->unk23C == 0) {
if (!(this->unk4AC & 8)) {
OPEN_DISPS(play->state.gfxCtx);
+
if (limbIndex == 12) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70);
}
if (limbIndex == 15) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
}
if (this->unk4AC & 0x20) {
OPEN_DISPS(play->state.gfxCtx);
+
if (limbIndex == 12) {
gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -1615,9 +1755,11 @@ void EnIn_Draw(Actor* thisx, PlayState* play) {
EnIn* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnIn_OverrideLimbDraw, EnIn_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h
index dd32ac9c6..6f4dd5d95 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.h
+++ b/src/overlays/actors/ovl_En_In/z_en_in.h
@@ -33,11 +33,13 @@ typedef enum {
/* 14 */ ENIN_ANIM_14,
/* 15 */ ENIN_ANIM_15,
/* 16 */ ENIN_ANIM_16,
- /* 17 */ ENIN_ANIM_17,
+ /* 17 */ ENIN_ANIM_17
} EnInAnimation;
#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF)
-#define ENIN_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE
+#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE
+
+#define ENIN_PATH_INDEX_NONE 0x3F
typedef struct EnIn {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
index 866f1d1b8..6a51e9486 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -506,7 +506,7 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
void EnInsect_Draw(Actor* thisx, PlayState* play) {
EnInsect* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL);
D_8091BD60 = 0;
}
diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
index 22ef1282a..da813182e 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -685,7 +685,7 @@ void func_8095F180(EnIshi* this) {
}
void func_8095F194(EnIshi* this, PlayState* play) {
- if (this->actor.csId < 0) {
+ if (this->actor.csId <= CS_ID_NONE) {
Actor_Kill(&this->actor);
} else if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
Actor_Kill(&this->actor);
@@ -710,7 +710,7 @@ void func_8095F210(EnIshi* this, PlayState* play) {
if (this->actor.projectedPos.z < 1300.0f) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
sp28 = (1300.0f - this->actor.projectedPos.z) * 2.55f;
@@ -730,7 +730,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) {
if ((this->actor.projectedPos.z <= 2150.0f) || ((this->unk_197 & 1) && (this->actor.projectedPos.z < 2250.0f))) {
this->actor.shape.shadowAlpha = 160;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -741,7 +741,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) {
this->actor.shape.shadowAlpha = sp20 * 0.627451f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c
index 1c65efed8..fcbd26b2f 100644
--- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c
+++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c
@@ -594,7 +594,7 @@ void EnJa_Draw(Actor* thisx, PlayState* play) {
if (this->unk_1D8.unk_00 != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_EnvColor(play->state.gfxCtx, D_80BC37AC[phi_t2].r, D_80BC37AC[phi_t2].g, D_80BC37AC[phi_t2].b,
diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c
index 05855bb20..314e94d1b 100644
--- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c
+++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c
@@ -150,9 +150,11 @@ void EnJcMato_Draw(Actor* thisx, PlayState* play) {
EnJcMato* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gKoumeTargetDL);
Matrix_MultVec3f(&sOffset, &this->pos);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c
index 451b9e553..449acf212 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c
@@ -54,14 +54,14 @@ typedef enum {
/* 16 */ EN_JG_ANIM_DEPRESSED,
/* 17 */ EN_JG_ANIM_CUTSCENE_IDLE,
/* 18 */ EN_JG_ANIM_CRADLE,
- /* 19 */ EN_JG_ANIM_MAX,
+ /* 19 */ EN_JG_ANIM_MAX
} EnJgAnimation;
typedef enum {
- /* 0x0 */ EN_JG_ACTION_FIRST_THAW,
- /* 0x1 */ EN_JG_ACTION_SPAWNING,
- /* 0x2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW,
- /* 0x3 */ EN_JG_ACTION_LULLABY_INTRO_CS,
+ /* 0 */ EN_JG_ACTION_FIRST_THAW,
+ /* 1 */ EN_JG_ACTION_SPAWNING,
+ /* 2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW,
+ /* 3 */ EN_JG_ACTION_LULLABY_INTRO_CS
} EnJgAction;
ActorInit En_Jg_InitVars = {
@@ -242,7 +242,7 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) {
diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
}
- func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
@@ -957,7 +957,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnJg_LullabyIntroCutsceneAction;
} else {
// This is the elder that appears in Mountain Village or the Path to Goron Village in winter.
- this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH(thisx), 0x3F);
+ this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH_INDEX(thisx), EN_JG_PATH_INDEX_NONE);
this->animIndex = EN_JG_ANIM_SURPRISE_START;
this->action = EN_JG_ACTION_SPAWNING;
this->freezeTimer = 1000;
diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.h b/src/overlays/actors/ovl_En_Jg/z_en_jg.h
index ad8eee0a8..b63f34dce 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h
@@ -5,7 +5,9 @@
#include "objects/object_jg/object_jg.h"
#define EN_JG_IS_IN_GORON_SHRINE(thisx) ((thisx)->params & 0x1)
-#define EN_JG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10)
+#define EN_JG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10)
+
+#define EN_JG_PATH_INDEX_NONE 0x3F
struct EnJg;
diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c
index 2985409dc..b023bf688 100644
--- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c
+++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c
@@ -119,7 +119,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) {
this->unk_1D8[i].points = Lib_SegmentedToVirtual(path->points);
this->unk_1D8[i].count = path->count;
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
if (path == NULL) {
Actor_Kill(&this->actor);
}
@@ -128,7 +128,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) {
this->unk_1F8.points = Lib_SegmentedToVirtual(path->points);
this->unk_1F8.count = path->count;
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
if (path == NULL) {
Actor_Kill(&this->actor);
}
@@ -636,7 +636,7 @@ void EnJgameTsn_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C]));
diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c
index 8f48622c8..350f4ae82 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.c
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.c
@@ -194,7 +194,7 @@ s32 func_80968B8C(EnJs* this, PlayState* play) {
f32 sp18 = 0.0f;
Vec3s* points;
- if (pathIndex != 0x3F) {
+ if (pathIndex != ENJS_PATH_INDEX_NONE) {
this->path = &play->setupPathList[pathIndex];
if (this->path != NULL) {
path = this->path;
@@ -377,7 +377,7 @@ void EnJs_TakeMask(s32 itemActions, s32 childType) {
s32 temp = 0;
if ((childType >= 0) && (childType < 9)) {
- itemActions -= PLAYER_IA_MASK_TRUTH;
+ itemActions -= PLAYER_IA_MASK_MIN;
childType *= 3;
if (itemActions < 8) {
masksGivenOnMoon[childType] |= 1 << itemActions;
@@ -543,7 +543,7 @@ void func_80969748(EnJs* this, PlayState* play) {
}
if (itemAction > PLAYER_IA_NONE) {
Message_CloseTextbox(play);
- if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) {
+ if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) {
EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor));
Inventory_UnequipItem(itemAction - 4);
if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) {
@@ -551,7 +551,7 @@ void func_80969748(EnJs* this, PlayState* play) {
} else {
player->actor.textId = 0x2213;
}
- } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) {
+ } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) {
player->actor.textId = 0x2211;
} else {
player->actor.textId = 0x2210;
@@ -692,7 +692,7 @@ void func_80969C54(EnJs* this, PlayState* play) {
if (itemAction > PLAYER_IA_NONE) {
Message_CloseTextbox(play);
- if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) {
+ if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) {
EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor));
Inventory_UnequipItem(itemAction - 4);
if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) {
@@ -700,7 +700,7 @@ void func_80969C54(EnJs* this, PlayState* play) {
} else {
player->actor.textId = 0x2222;
}
- } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) {
+ } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) {
player->actor.textId = 0x2220;
} else {
player->actor.textId = 0x221D;
@@ -1058,7 +1058,7 @@ void func_8096A9F4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
void EnJs_Draw(Actor* thisx, PlayState* play) {
EnJs* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
func_8096A9F4, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.h b/src/overlays/actors/ovl_En_Js/z_en_js.h
index c4dd3e3a2..f673a97d6 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.h
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.h
@@ -8,6 +8,8 @@
#define ENJS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10)
#define ENJS_GET_EXIT_INDEX(thisx) (((thisx)->params & 0x3F0) >> 4)
+#define ENJS_PATH_INDEX_NONE 0x3F
+
struct EnJs;
typedef void (*EnJsActionFunc)(struct EnJs*, PlayState*);
diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
index 7d8f46f91..d572c1331 100644
--- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
+++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
@@ -321,15 +321,15 @@ s32 func_80B85858(EnKaizoku* this, PlayState* play) {
for (itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; itemAction != NULL;
itemAction = itemAction->next) {
- //! FAKE:
- if (1) {}
- if (((itemAction->id == ACTOR_ARMS_HOOK) || (itemAction->id == ACTOR_EN_ARROW)) && (player->unk_D57)) {
- if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) &&
- (this->action != KAIZOKU_ACTION_6)) {
- func_80B87C7C(this);
- }
- break;
+ if (((itemAction->id != ACTOR_ARMS_HOOK) && (itemAction->id != ACTOR_EN_ARROW)) || (player->unk_D57 == 0)) {
+ continue;
}
+
+ if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) &&
+ (this->action != KAIZOKU_ACTION_6)) {
+ func_80B87C7C(this);
+ }
+ break;
}
if (prevAction != this->action) {
@@ -423,8 +423,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) {
func_80B87900(this);
} else {
sp2A = player->actor.shape.rot.y - this->picto.actor.shape.rot.y;
- if (this->picto.actor.xzDistToPlayer <= 65.0f && !Actor_OtherIsTargeted(play, &this->picto.actor) &&
- ABS_ALT(sp2A) < 0x5000) {
+ if ((this->picto.actor.xzDistToPlayer <= 65.0f) && !Actor_OtherIsTargeted(play, &this->picto.actor) &&
+ (ABS_ALT(sp2A) < 0x5000)) {
if (this->action != KAIZOKU_ACTION_9) {
func_80B87F70(this);
return 1;
@@ -508,7 +508,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
this->unk_598 = 0;
Audio_SetMainBgmVolume(0, 0xA);
this->unk_59C++;
-
+ // fallthrough
case 1:
player->actor.shape.rot.y = player->actor.world.rot.y =
Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos);
@@ -611,7 +611,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
func_800B7298(play, &this->picto.actor, 6);
CutsceneManager_Stop(this->csId);
this->unk_59C = 0;
- this->subCamId = 0;
+ this->subCamId = SUB_CAM_ID_DONE;
this->picto.actor.flags &= ~ACTOR_FLAG_100000;
this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->picto.actor.flags |= ACTOR_FLAG_1;
@@ -657,7 +657,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4);
}
- if (this->subCamId != 0) {
+ if (this->subCamId != SUB_CAM_ID_DONE) {
this->subCamUp.y = 1.0f;
this->subCamUp.z = 0.0f;
Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp);
@@ -665,7 +665,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) {
}
void func_80B86804(EnKaizoku* this, PlayState* play) {
- if (this->subCamId == 0) {
+ if (this->subCamId == SUB_CAM_ID_DONE) {
if (!CutsceneManager_IsNext(this->csId)) {
CutsceneManager_Queue(this->csId);
return;
@@ -725,7 +725,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) {
Message_CloseTextbox(play);
func_800B7298(play, &this->picto.actor, 6);
CutsceneManager_Stop(this->csId);
- this->subCamId = 0;
+ this->subCamId = SUB_CAM_ID_DONE;
play->nextEntrance = play->setupExitList[this->exitIndex];
gSaveContext.nextCutsceneIndex = 0;
Scene_SetExitFade(play);
@@ -733,11 +733,13 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) {
this->unk_59C++;
this->action = KAIZOKU_ACTION_16;
}
+ break;
+ default:
break;
}
- if (this->subCamId != 0) {
+ if (this->subCamId != SUB_CAM_ID_DONE) {
this->subCamUp.x = 0.0f;
this->subCamUp.y = 1.0f;
this->subCamUp.z = 0.0f;
@@ -861,7 +863,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) {
play->envCtx.screenFillColor[3] = 0;
play->envCtx.fillScreen = false;
this->unk_59C = 0;
- this->subCamId = 0;
+ this->subCamId = SUB_CAM_ID_DONE;
func_800B7298(play, &this->picto.actor, 6);
CutsceneManager_Stop(this->csId);
if (this->switchFlag >= 0) {
@@ -871,6 +873,9 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
Math_ApproachF(&this->subCamEye.x, this->unk_5C8.x, 0.5f, this->unk_5E0);
Math_ApproachF(&this->subCamEye.y, this->unk_5C8.y, 0.5f, this->unk_5E0);
@@ -880,7 +885,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) {
Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0);
Math_ApproachF(&this->unk_5E0, 10.0f, 0.5f, 100.0f);
- if (this->subCamId != 0) {
+ if (this->subCamId != SUB_CAM_ID_DONE) {
this->subCamUp.x = 0.0f;
this->subCamUp.z = 0.0f;
this->subCamUp.y = 1.0f;
@@ -902,7 +907,8 @@ void func_80B872F4(EnKaizoku* this, PlayState* play) {
if ((this->lookTimer == 0) && !func_80B85858(this, play) && !func_80B85A00(this, play, false)) {
s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
- if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && (yawDiff >= 0x1F40)) {
+ if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
+ (yawDiff >= 0x1F40)) {
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
func_80B88CD8(this);
} else if (Actor_IsFacingPlayer(&this->picto.actor, 0xBB8)) {
@@ -989,7 +995,8 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) {
this->skelAnime.playSpeed = 1.0f;
temp_ft0 = this->skelAnime.curFrame - this->skelAnime.playSpeed;
temp_ft1 = this->skelAnime.curFrame + this->skelAnime.playSpeed;
- if (this->skelAnime.curFrame != 0.0f && ((temp_ft0 < 0 && temp_ft1 > 0) || (temp_ft0 < 5 && temp_ft1 >= 6))) {
+ if ((this->skelAnime.curFrame != 0.0f) &&
+ (((temp_ft0 < 0) && (temp_ft1 > 0)) || ((temp_ft0 < 5) && (temp_ft1 >= 6)))) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
}
@@ -1006,12 +1013,10 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) {
func_80B87E28(this);
}
}
+ } else if (this->picto.actor.speed >= 0.0f) {
+ this->picto.actor.shape.rot.y += 0x4000;
} else {
- if (this->picto.actor.speed >= 0.0f) {
- this->picto.actor.shape.rot.y += 0x4000;
- } else {
- this->picto.actor.shape.rot.y -= 0x4000;
- }
+ this->picto.actor.shape.rot.y -= 0x4000;
}
}
@@ -1041,8 +1046,8 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) {
if (this->lookTimer == 0) {
this->unk_2D8 = 0;
temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
- if (ABS_ALT(temp_v0) <= 0x4000 && this->picto.actor.xzDistToPlayer < 40.0f &&
- fabsf(this->picto.actor.playerHeightRel) < 50.0f) {
+ if ((ABS_ALT(temp_v0) <= 0x4000) && (this->picto.actor.xzDistToPlayer < 40.0f) &&
+ (fabsf(this->picto.actor.playerHeightRel) < 50.0f)) {
if (func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) {
if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) {
this->bodyCollider.base.acFlags &= ~AC_HARD;
@@ -1067,7 +1072,7 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) {
this->bodyCollider.base.acFlags &= ~AC_HARD;
func_80B88CD8(this);
}
- } else if (this->unk_2B2 == 0 &&
+ } else if ((this->unk_2B2 == 0) &&
func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) {
if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) {
this->bodyCollider.base.acFlags &= ~AC_HARD;
@@ -1285,7 +1290,8 @@ void func_80B88378(EnKaizoku* this, PlayState* play) {
this->skelAnime.playSpeed = 1.0f;
sp2A = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y);
- if (this->picto.actor.xzDistToPlayer < 150.0f && player->meleeWeaponState != 0 && sp2A >= 0x2000) {
+ if ((this->picto.actor.xzDistToPlayer < 150.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
+ (sp2A >= 0x2000)) {
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
if (Rand_ZeroOne() > 0.7f) {
func_80B88CD8(this);
@@ -1312,7 +1318,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) {
}
if (!func_80B85A00(this, play, false)) {
- if (this->picto.actor.xzDistToPlayer < 210.0f && this->picto.actor.xzDistToPlayer > 150.0f &&
+ if ((this->picto.actor.xzDistToPlayer < 210.0f) && (this->picto.actor.xzDistToPlayer > 150.0f) &&
Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) {
if (Actor_IsTargeted(play, &this->picto.actor)) {
if (Rand_ZeroOne() > 0.5f) {
@@ -1330,7 +1336,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
}
- if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) {
+ if ((this->skelAnime.curFrame != 0.0f) && (((sp30 < 0) && (sp2C > 0)) || ((sp30 < 4) && (sp2C >= 5)))) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
}
}
@@ -1412,7 +1418,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) {
}
this->unk_2D8 = 0;
- if (this->frameCount <= curFrame && this->unk_2D0 < 2) {
+ if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) {
if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
func_80B872A4(this);
this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f;
@@ -1455,7 +1461,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) {
void func_80B88CD8(EnKaizoku* this) {
EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3);
- this->picto.actor.speed = randPlusMinusPoint5Scaled(12.0f);
+ this->picto.actor.speed = Rand_CenteredFloat(12.0f);
this->skelAnime.playSpeed = 1.0f;
this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
this->unk_2B2 = Rand_ZeroOne() * 30.0f + 30.0f;
@@ -1529,7 +1535,7 @@ void func_80B88D6C(EnKaizoku* this, PlayState* play) {
temp_ft4 = this->skelAnime.curFrame - this->skelAnime.playSpeed;
temp_ft5 = this->skelAnime.curFrame + this->skelAnime.playSpeed;
if (this->skelAnime.curFrame != 0.0f) {
- if (((temp_ft4 < 0 && temp_ft5 > 0) || (temp_ft4 < 5 && temp_ft5 > 5))) {
+ if ((((temp_ft4 < 0) && (temp_ft5 > 0)) || ((temp_ft4 < 5) && (temp_ft5 > 5)))) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
}
}
@@ -1582,7 +1588,7 @@ void func_80B891B8(EnKaizoku* this) {
// EnKaizoku_Stunned
void func_80B89280(EnKaizoku* this, PlayState* play) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) {
- if (this->unk_2B8 != 0 && this->unk_2B8 < 60) {
+ if ((this->unk_2B8 != 0) && (this->unk_2B8 < 60)) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
}
}
@@ -1602,8 +1608,8 @@ void func_80B89280(EnKaizoku* this, PlayState* play) {
this->unk_2D8 = 0;
func_80B85A00(this, play, true);
- if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX ||
- this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2,
0.7f, 0.4f);
this->unk_2B8 = 0;
@@ -1653,7 +1659,7 @@ void func_80B894C0(EnKaizoku* this, PlayState* play) {
}
}
- if (this->picto.actor.xzDistToPlayer <= 65.0f && ((play->gameplayFrames % 8) != 0)) {
+ if ((this->picto.actor.xzDistToPlayer <= 65.0f) && ((play->gameplayFrames % 8) != 0)) {
this->swordCollider.info.elemType = ELEMTYPE_UNK2;
func_80B87F70(this);
} else {
@@ -1715,7 +1721,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) {
if (curFrame >= 25.0f) {
player = GET_PLAYER(play);
- if (this->subCamId == 0) {
+ if (this->subCamId == SUB_CAM_ID_DONE) {
if (!CutsceneManager_IsNext(this->csId)) {
CutsceneManager_Queue(this->csId);
return;
@@ -1741,7 +1747,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) {
player->actor.shape.rot.y = player->actor.world.rot.y =
Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos);
- if (this->subCamId != 0) {
+ if (this->subCamId != SUB_CAM_ID_DONE) {
this->subCamUp.x = 0.0f;
this->subCamUp.y = 1.0f;
this->subCamUp.z = 0.0f;
@@ -1773,7 +1779,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) {
if (!(this->swordCollider.base.atFlags & AT_BOUNCED) && (this->swordCollider.base.atFlags & AT_HIT)) {
if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) {
this->unk_2D0 = 2;
- this->subCamId = 0;
+ this->subCamId = SUB_CAM_ID_DONE;
this->picto.actor.flags |= ACTOR_FLAG_100000;
if (!CutsceneManager_IsNext(this->csId)) {
@@ -1791,7 +1797,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) {
if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) {
Health_ChangeBy(play, 0x10);
this->unk_2D0 = 2;
- this->subCamId = 0;
+ this->subCamId = SUB_CAM_ID_DONE;
this->picto.actor.flags |= ACTOR_FLAG_100000;
if (!CutsceneManager_IsNext(this->csId)) {
@@ -1831,7 +1837,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) {
this->unk_2B8 = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
}
- /* fallthrough */
+ // fallthrough
case KAIZOKU_DMGEFF_1:
if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
(this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
@@ -1906,6 +1912,9 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) {
sp64 = 1;
}
break;
+
+ default:
+ break;
}
if (sp64) {
@@ -1938,8 +1947,8 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) {
pos.z = this->bodyCollider.info.bumper.hitPos.z;
if (player->transformation != PLAYER_FORM_HUMAN) {
- player->unk_B84 = this->picto.actor.yawTowardsPlayer;
- player->unk_B80 = 15.0f;
+ player->pushedYaw = this->picto.actor.yawTowardsPlayer;
+ player->pushedSpeed = 15.0f;
}
this->bodyCollider.base.acFlags &= ~AC_HIT;
@@ -2102,11 +2111,11 @@ void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&sFootOffset, &this->rightFootPos);
}
- if (limbIndex == KAIZOKU_LIMB_02 || limbIndex == KAIZOKU_LIMB_06 || limbIndex == KAIZOKU_LIMB_07 ||
- limbIndex == KAIZOKU_LIMB_08 || limbIndex == KAIZOKU_LIMB_0A || limbIndex == KAIZOKU_LIMB_0C ||
- limbIndex == KAIZOKU_LIMB_0D || limbIndex == KAIZOKU_LIMB_0F || limbIndex == KAIZOKU_LIMB_11 ||
- limbIndex == KAIZOKU_LIMB_12 || limbIndex == KAIZOKU_LIMB_L_FOOT || limbIndex == KAIZOKU_LIMB_14 ||
- limbIndex == KAIZOKU_LIMB_15 || limbIndex == KAIZOKU_LIMB_R_FOOT || limbIndex == KAIZOKU_LIMB_17) {
+ if ((limbIndex == KAIZOKU_LIMB_02) || (limbIndex == KAIZOKU_LIMB_06) || (limbIndex == KAIZOKU_LIMB_07) ||
+ (limbIndex == KAIZOKU_LIMB_08) || (limbIndex == KAIZOKU_LIMB_0A) || (limbIndex == KAIZOKU_LIMB_0C) ||
+ (limbIndex == KAIZOKU_LIMB_0D) || (limbIndex == KAIZOKU_LIMB_0F) || (limbIndex == KAIZOKU_LIMB_11) ||
+ (limbIndex == KAIZOKU_LIMB_12) || (limbIndex == KAIZOKU_LIMB_L_FOOT) || (limbIndex == KAIZOKU_LIMB_14) ||
+ (limbIndex == KAIZOKU_LIMB_15) || (limbIndex == KAIZOKU_LIMB_R_FOOT) || (limbIndex == KAIZOKU_LIMB_17)) {
Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]);
this->bodyPartsPosIndex++;
@@ -2132,8 +2141,8 @@ void EnKaizoku_Draw(Actor* thisx, PlayState* play) {
f32 drawDmgEffAlpha;
EnKaizoku* this = THIS;
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
index 2cec5d9b8..70570ed96 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
@@ -113,15 +113,15 @@ Vec3f D_80972030 = { -3.0f, 50.0f, 90.0f };
Vec3f D_8097203C = { 10.0f, -15.0f, 2.0f };
typedef enum {
- /* 0x0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth
- /* 0x1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING,
- /* 0x2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat)
- /* 0x3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player
- /* 0x4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl
- /* 0x5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx
- /* 0x6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused?
- /* 0x7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over
- /* 0x8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position
+ /* 0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth
+ /* 1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING,
+ /* 2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat)
+ /* 3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player
+ /* 4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl
+ /* 5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx
+ /* 6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused?
+ /* 7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over
+ /* 8 */ ENKAKASI_ANIM_IDLE // slow stretching wiggle, ends in regular position
} EnKakasiAnimation;
static AnimationHeader* sAnimations[] = {
@@ -157,7 +157,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) {
this->unkHeight = (this->picto.actor.world.rot.z * 20.0f) + 60.0f;
this->picto.actor.world.rot.z = 0;
this->picto.actor.targetMode = 0;
- if (this->picto.actor.world.rot.x > 0 && this->picto.actor.world.rot.x < 8) {
+ if ((this->picto.actor.world.rot.x > 0) && (this->picto.actor.world.rot.x < 8)) {
this->picto.actor.targetMode = KAKASI_GET_TARGETMODE(thisx);
}
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
@@ -208,12 +208,12 @@ s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx) {
}
void EnKakasi_CheckAnimationSfx(EnKakasi* this) {
- if (this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING || this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL) {
+ if ((this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING) || (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL)) {
if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
}
- if (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR || this->animIndex == ENKAKASI_ANIM_SLOWROLL) {
+ if ((this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) || (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) {
if (Animation_OnFrame(&this->skelanime, 4.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
@@ -225,7 +225,7 @@ void EnKakasi_CheckAnimationSfx(EnKakasi* this) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL);
}
}
- if (this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER || this->animIndex == ENKAKASI_ANIM_TWIRL) {
+ if ((this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER) || (this->animIndex == ENKAKASI_ANIM_TWIRL)) {
if (Animation_OnFrame(&this->skelanime, 1.0f)) {
Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL);
}
@@ -274,12 +274,12 @@ void func_8096FAAC(EnKakasi* this, PlayState* play) {
* goes off every frame of song teach, but... doing what?
*/
void func_8096FBB8(EnKakasi* this, PlayState* play) {
- if (play->msgCtx.unk12048 == 0 || play->msgCtx.unk12048 == 1 || play->msgCtx.unk12048 == 2 ||
- play->msgCtx.unk12048 == 3 || play->msgCtx.unk12048 == 4) {
+ if ((play->msgCtx.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) ||
+ (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) {
// why not 0 < x < 4? fewer branches
this->unk190++;
}
- if (this->unk190 != 0 && this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
+ if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
if (this->unk190 > 8) {
@@ -299,8 +299,8 @@ void EnKakasi_InitTimeSkipDialogue(EnKakasi* this) {
void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (gSaveContext.respawnFlag != -4 && gSaveContext.respawnFlag != -8) {
- if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) &&
+ if ((gSaveContext.respawnFlag != -4) && (gSaveContext.respawnFlag != -8)) {
+ if ((gSaveContext.save.time != CLOCK_TIME(6, 0)) && (gSaveContext.save.time != CLOCK_TIME(18, 0)) &&
!CHECK_EVENTINF(EVENTINF_17)) {
if (this->picto.actor.textId == 0) {
@@ -348,8 +348,8 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
}
if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
Actor_GetScreenPos(play, &this->picto.actor, &x, &y);
- if (this->picto.actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT &&
- this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
+ if ((this->picto.actor.projectedPos.z > -20.0f) && (x > 0) && (x < SCREEN_WIDTH) && (y > 0) &&
+ (y < SCREEN_HEIGHT) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) {
// faster shaking
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
this->skelanime.playSpeed = 2.0f;
@@ -359,7 +359,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
this->skelanime.playSpeed = 2.0f;
}
- } else if (saveContextDay == 3 && gSaveContext.save.isNight) {
+ } else if ((saveContextDay == 3) && gSaveContext.save.isNight) {
this->skelanime.playSpeed = 1.0f;
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_ChangeAnim(this, 1);
@@ -391,16 +391,16 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 2000, 0);
// if first dialogue
- if (this->picto.actor.textId != 0x1644 && this->animeFrameCount <= currentAnimeFrame &&
- this->animIndex == ENKAKASI_ANIM_SLOWROLL) {
+ if ((this->picto.actor.textId != 0x1644) && (this->animeFrameCount <= currentAnimeFrame) &&
+ (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER);
this->unkCounter1A4 = 0;
}
// if dialogue: oh sorry come back again
- if (this->picto.actor.textId == 0x1651 || this->picto.actor.textId == 0x1659) {
- if (this->animeFrameCount <= currentAnimeFrame && this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER) {
+ if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) {
+ if ((this->animeFrameCount <= currentAnimeFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) {
if (++this->unkCounter1A4 >= 2) {
this->unkCounter1A4 = 0;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER);
@@ -408,7 +408,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
}
- if (this->unkState1A8 == 2 && this->unkState196 == 2) {
+ if ((this->unkState1A8 == 2) && (this->unkState196 == 2)) {
func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73);
this->unkState1A8 = 0;
}
@@ -417,7 +417,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
Message_CloseTextbox(play);
if (this->talkState == TEXT_STATE_5) {
// bad song input
- if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) {
+ if ((this->unkState196 == 2) && (this->picto.actor.textId == 0x1647)) {
func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END);
}
@@ -429,7 +429,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
- if (saveContextDay2 == 3 && gSaveContext.save.isNight) {
+ if ((saveContextDay2 == 3) && gSaveContext.save.isNight) {
// text: dangerous outside
this->picto.actor.textId = 0x164F;
} else if (gSaveContext.save.isNight) {
@@ -443,8 +443,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
Message_ContinueTextbox(play, this->picto.actor.textId);
return;
- } else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F ||
- this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) {
+ } else if ((this->picto.actor.textId == 0x165D) || (this->picto.actor.textId == 0x165F) ||
+ (this->picto.actor.textId == 0x1660) || (this->picto.actor.textId == 0x1652)) {
func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4);
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
@@ -462,7 +462,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
return;
- } else if (this->picto.actor.textId == 0x1645 || this->picto.actor.textId == 0x164E) {
+ } else if ((this->picto.actor.textId == 0x1645) || (this->picto.actor.textId == 0x164E)) {
this->picto.actor.textId = 0x1650; // "Shall we dance? No Yes"
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
@@ -517,7 +517,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
this->picto.actor.textId = 0x1658;
} else if (this->picto.actor.textId == 0x165C) {
this->picto.actor.textId = 0x165E;
- } else if (saveContextDay == 3 && gSaveContext.save.isNight) {
+ } else if ((saveContextDay == 3) && gSaveContext.save.isNight) {
this->picto.actor.textId = 0x164F;
} else {
this->picto.actor.textId = 0x1652;
@@ -621,7 +621,6 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
this->unkCounter1A4 = 0;
CutsceneManager_Stop(this->csIdList[0]);
Actor_PlaySfx(&this->picto.actor, NA_SE_EN_YASE_DEAD);
- if (this) {}
this->unkState196 = 2;
this->subCamId = SUB_CAM_ID_DONE;
this->picto.actor.textId = 0x1647;
@@ -642,11 +641,12 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) {
f32 animeFrame = this->skelanime.curFrame;
- if (this->postTeachTimer == 0 && this->animIndex != ENKAKASI_ANIM_TWIRL) {
+ if ((this->postTeachTimer == 0) && (this->animIndex != ENKAKASI_ANIM_TWIRL)) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL);
this->skelanime.playSpeed = 2.0f;
}
- if (this->postTeachTimer == 0 && this->animIndex == ENKAKASI_ANIM_TWIRL && this->animeFrameCount <= animeFrame) {
+ if ((this->postTeachTimer == 0) && (this->animIndex == ENKAKASI_ANIM_TWIRL) &&
+ (this->animeFrameCount <= animeFrame)) {
EnKakasi_SetupPostSongLearnDialogue(this, play);
}
}
@@ -682,16 +682,16 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
this->unk190 = 1;
}
- if (this->picto.actor.textId == 0x1648 && this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR &&
- this->animeFrameCount <= tempAnimFrame) {
+ if ((this->picto.actor.textId == 0x1648) && (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) &&
+ (this->animeFrameCount <= tempAnimFrame)) {
this->unkCounter1A4++;
if (this->unkCounter1A4 >= 2) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
}
}
- if (this->picto.actor.textId == 0x164B && this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING &&
- this->animeFrameCount <= tempAnimFrame) {
+ if ((this->picto.actor.textId == 0x164B) && (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) &&
+ (this->animeFrameCount <= tempAnimFrame)) {
this->unkCounter1A4++;
if (this->unkCounter1A4 >= 2) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER);
@@ -762,7 +762,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL);
} else {
- if (this->picto.actor.textId == 0x164C || this->picto.actor.textId == 0x1661) {
+ if ((this->picto.actor.textId == 0x164C) || (this->picto.actor.textId == 0x1661)) {
EnKakasi_SetupDigAway(this);
return;
}
@@ -797,7 +797,7 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) {
} else {
CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
- if (currentDay == 3 && gSaveContext.save.isNight) {
+ if ((currentDay == 3) && gSaveContext.save.isNight) {
EnKakasi_SetupDigAway(this);
} else {
Audio_PlaySubBgm(NA_BGM_SARIAS_SONG);
@@ -833,15 +833,14 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
Math_Vec3f_Copy(&localVec3f, &this->subCamEyeNext);
OLib_Vec3fAdd(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, OLIB_ADD_OFFSET);
- if (1) {}
this->subCamAtNext.x = D_80971EEC[this->unk190].x + this->unk22C.x;
this->subCamAtNext.y = D_80971EEC[this->unk190].y + this->unk22C.y;
this->subCamAtNext.z = D_80971EEC[this->unk190].z + this->unk22C.z;
- if (this->unk190 != 6 && this->unk190 != 7) {
+ if ((this->unk190 != 6) && (this->unk190 != 7)) {
Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext);
Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext);
}
- if (this->unk190 >= 7 && this->unk190 != 0xE) {
+ if ((this->unk190 >= 7) && (this->unk190 != 0xE)) {
this->picto.actor.shape.rot.y += 0x800;
}
@@ -853,57 +852,64 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
// twirling
this->unk204 = 0x28;
this->unk190++;
- return;
+ break;
+
case 1:
// end of twirl, start shaking back and forth
- if (this->unk204 == 0 && this->animeFrameCount <= currentFrame) {
+ if ((this->unk204 == 0) && (this->animeFrameCount <= currentFrame)) {
this->unk204 = 0x14;
this->unk190++;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
- return;
+ break;
+
case 2:
// camera view on the left
if (this->unk204 == 0) {
this->unk204 = 0x14;
this->unk190++;
}
- return;
+ break;
+
case 3:
// camera view on the right
if (this->unk204 == 0) {
this->unk204 = 0x14;
this->unk190++;
}
- return;
+ break;
+
case 4:
// camera view close up front
if (this->unk204 == 0) {
this->unk204 = 0x14;
this->unk190++;
}
- return;
+ break;
+
case 5:
// camera view zoomed out front
if (this->unk204 == 0) {
this->unk204 = 0xF;
this->unk190++;
}
- return;
+ break;
+
case 6:
// zoom in and sweep down in from case 5
if (this->unk204 == 0) {
this->unk204 = 0xF;
this->unk190++;
}
- return;
+ break;
+
case 7:
// zoom in close from case 6
if (this->unk204 == 0) {
this->unk204 = 0xA;
this->unk190++;
}
- return;
+ break;
case 8:
case 9:
@@ -921,7 +927,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
this->unk204 = 0x14;
}
}
- return;
+ break;
+
case 14:
// goes off once for some camera changes,
// otherwise it's the end when camera is back to normal and Player is confused
@@ -933,13 +940,10 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC);
func_80169EFC(&play->state);
- //! FAKE
- if (1) {}
-
- if (gSaveContext.save.time > CLOCK_TIME(18, 0) || gSaveContext.save.time < CLOCK_TIME(6, 0)) {
+ if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
gSaveContext.save.time = CLOCK_TIME(6, 0);
gSaveContext.respawnFlag = -4;
- SET_EVENTINF(EVENTINF_27);
+ SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP);
} else {
gSaveContext.save.time = CLOCK_TIME(18, 0);
gSaveContext.respawnFlag = -8;
@@ -948,6 +952,10 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
this->unk190 = 0;
this->actionFunc = EnKakasi_DoNothing;
}
+ break;
+
+ default:
+ break;
}
}
@@ -997,11 +1005,11 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
if ((play->gameplayFrames % 4) == 0) {
Math_Vec3f_Copy(&tempWorldPos, &this->picto.actor.world.pos);
tempWorldPos.y = this->picto.actor.floorHeight;
- tempWorldPos.x += randPlusMinusPoint5Scaled(2.0f);
- tempWorldPos.z += randPlusMinusPoint5Scaled(2.0f);
+ tempWorldPos.x += Rand_CenteredFloat(2.0f);
+ tempWorldPos.z += Rand_CenteredFloat(2.0f);
if (play->sceneId == SCENE_8ITEMSHOP) {
- EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, randPlusMinusPoint5Scaled(100.0f) + 200.0f);
+ EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, Rand_CenteredFloat(100.0f) + 200.0f);
SoundSource_PlaySfxAtFixedWorldPos(play, &tempWorldPos, 0x32, NA_SE_EV_BOMB_DROP_WATER);
} else {
@@ -1031,8 +1039,8 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) {
}
void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && this->picto.actor.xzDistToPlayer < this->songSummonDist &&
- (BREG(1) != 0 || play->msgCtx.ocarinaMode == 0xD)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) &&
+ ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) {
this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
play->msgCtx.ocarinaMode = 4;
this->actionFunc = EnKakasi_SetupRiseOutOfGround;
@@ -1119,7 +1127,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) {
DECR(this->unk204);
if (this->unkState196 != 5) {
- if (this->unk1BC.x != 0.0f || this->unk1BC.z != 0.0f) {
+ if ((this->unk1BC.x != 0.0f) || (this->unk1BC.z != 0.0f)) {
Math_Vec3f_Copy(&this->picto.actor.focus.pos, &this->unk1BC);
this->picto.actor.focus.pos.y += 10.0f;
if (this->subCamId == SUB_CAM_ID_DONE) {
@@ -1153,7 +1161,7 @@ void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
void EnKakasi_Draw(Actor* thisx, PlayState* play) {
EnKakasi* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL,
EnKakasi_PostLimbDraw, &this->picto.actor);
}
diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c
index 9777c7433..820dd1f4e 100644
--- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c
+++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c
@@ -606,9 +606,9 @@ void func_80AD8388(EnKame* this, PlayState* play) {
this->actor.scale.y = this->actor.scale.x;
this->actor.scale.z = this->actor.scale.x;
}
- sp34.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x;
+ sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x;
sp34.y = this->actor.world.pos.y + 15.0f;
- sp34.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z;
+ sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z;
func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2);
}
}
@@ -805,7 +805,7 @@ void EnKame_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]);
@@ -840,7 +840,7 @@ s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void func_80AD8D64(Actor* thisx, PlayState* play) {
EnKame* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount,
Enkame_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
index c4ef32e31..b0efd61e8 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -135,8 +135,8 @@ void func_80954960(EnKanban* this) {
ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y);
nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z);
- this->floorRot.x = -func_80086B30(-nz * ny, 1.0f);
- this->floorRot.z = func_80086B30(-nx * ny, 1.0f);
+ this->floorRot.x = -Math_FAtan2F(-nz * ny, 1.0f);
+ this->floorRot.z = Math_FAtan2F(-nx * ny, 1.0f);
}
}
@@ -198,20 +198,16 @@ void func_80954BE8(EnKanban* this, PlayState* play) {
}
}
-#ifdef NON_MATCHING
-// Lots of branch likely stuff
void EnKanban_Update(Actor* thisx, PlayState* play) {
- // PlayState* play = play2;
u8 bounced = false;
- s32 pad;
EnKanban* this = THIS;
+ s32 pad;
+ FloorType floorType;
+ f32 phi_f0;
Player* player = GET_PLAYER(play);
Vec3f offset;
EnKanban* piece;
EnKanban* signpost;
- FloorType floorType;
- f32 phi_f0;
- s32 pad2;
this->frameCount++;
@@ -354,7 +350,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
piece->actionState = ENKANBAN_AIR;
piece->actor.gravity = -1.0f;
piece->actor.world.rot.y =
- BINANG_ROT180((s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.yawTowardsPlayer);
+ BINANG_ROT180((s32)Rand_CenteredFloat(0x4000) + this->actor.yawTowardsPlayer);
if ((hitItem->toucher.dmgFlags & 0x10) || (hitItem->toucher.dmgFlags & 8) ||
(hitItem->toucher.dmgFlags & 0x80000000)) {
@@ -373,7 +369,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
piece->bounceZ = Rand_ZeroFloat(7.0f) + 3.0f;
}
- piece->spinVel.y = randPlusMinusPoint5Scaled(0x1800);
+ piece->spinVel.y = Rand_CenteredFloat(0x1800);
if (Rand_ZeroOne() < 0.5f) {
piece->direction = 1;
@@ -423,8 +419,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
f32 tempY;
f32 tempZ;
f32 tempWaterDepth;
+ s32 pad2;
u16 bgCheckFlags;
- u8 onGround;
if (this->unk_198 != 0) {
this->actor.velocity.y = -2.0f;
@@ -452,103 +448,103 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actor.bgCheckFlags = bgCheckFlags;
this->actor.depthInWater = tempWaterDepth;
- if (1) {}
+ if (1) {
+ u8 onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND);
- onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND);
-
- if (this->spinXFlag != 0) {
- this->spinRot.x += this->spinVel.x;
- this->spinVel.x -= 0x800;
- if ((this->spinRot.x <= 0) && onGround) {
- this->spinRot.x = 0;
- this->spinVel.x = 0;
- }
- } else {
- this->spinRot.x -= this->spinVel.x;
- this->spinVel.x -= 0x800;
- if ((this->spinRot.x >= 0) && onGround) {
- this->spinRot.x = 0;
- this->spinVel.x = 0;
- }
- }
-
- if (this->spinVel.x < -0xC00) {
- this->spinVel.x = -0xC00;
- }
-
- if (this->spinZFlag != 0) {
- this->spinRot.z += this->spinVel.z;
- this->spinVel.z -= 0x800;
- if ((this->spinRot.z <= 0) && onGround) {
- this->spinRot.z = 0;
- this->spinVel.z = 0;
- }
- } else {
- this->spinRot.z -= this->spinVel.z;
- this->spinVel.z -= 0x800;
- if ((this->spinRot.z >= 0) && onGround) {
- this->spinRot.z = 0;
- this->spinVel.z = 0;
- }
- }
-
- if (this->spinVel.z < -0xC00) {
- this->spinVel.z = -0xC00;
- }
-
- if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
- if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
- Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
- }
- this->actor.speed *= -0.5f;
- }
-
- if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
- this->actionState = ENKANBAN_WATER;
- Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
- this->bounceX = this->bounceZ = 0;
- this->actor.world.pos.y += this->actor.depthInWater;
- EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300);
- EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0);
- EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5);
- this->actor.velocity.y = 0.0f;
- this->actor.gravity = 0.0f;
- break;
- }
-
- if (onGround) {
- floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
-
- if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) {
- this->unk_197 = 1;
- } else if (floorType == FLOOR_TYPE_5) {
- this->unk_197 = -1;
- }
-
- if (this->bounceCount <= 0) {
- this->bounceCount++;
- if (this->unk_197 != 0) {
- this->actor.velocity.y = 0.0f;
- } else {
- this->actor.velocity.y *= -0.3f;
- this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000);
+ if (this->spinXFlag != 0) {
+ this->spinRot.x += this->spinVel.x;
+ this->spinVel.x -= 0x800;
+ if ((this->spinRot.x <= 0) && onGround) {
+ this->spinRot.x = 0;
+ this->spinVel.x = 0;
}
- bounced = true;
} else {
- this->actor.velocity.y = 0.0f;
+ this->spinRot.x -= this->spinVel.x;
+ this->spinVel.x -= 0x800;
+ if ((this->spinRot.x >= 0) && onGround) {
+ this->spinRot.x = 0;
+ this->spinVel.x = 0;
+ }
}
- if (this->unk_197 != 0) {
- if (this->unk_197 > 0) {
- this->actor.speed = 0.0f;
- } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) {
- this->airTimer = 10;
- if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
- this->actionState = ENKANBAN_GROUND;
- this->actor.speed = 0.0f;
- goto nextCase;
+ if (this->spinVel.x < -0xC00) {
+ this->spinVel.x = -0xC00;
+ }
+
+ if (this->spinZFlag != 0) {
+ this->spinRot.z += this->spinVel.z;
+ this->spinVel.z -= 0x800;
+ if ((this->spinRot.z <= 0) && onGround) {
+ this->spinRot.z = 0;
+ this->spinVel.z = 0;
+ }
+ } else {
+ this->spinRot.z -= this->spinVel.z;
+ this->spinVel.z -= 0x800;
+ if ((this->spinRot.z >= 0) && onGround) {
+ this->spinRot.z = 0;
+ this->spinVel.z = 0;
+ }
+ }
+
+ if (this->spinVel.z < -0xC00) {
+ this->spinVel.z = -0xC00;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
+ }
+ this->actor.speed *= -0.5f;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ this->actionState = ENKANBAN_WATER;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
+ this->bounceX = this->bounceZ = 0;
+ this->actor.world.pos.y += this->actor.depthInWater;
+ EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300);
+ EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0);
+ EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5);
+ this->actor.velocity.y = 0.0f;
+ this->actor.gravity = 0.0f;
+ break;
+ }
+
+ if (onGround) {
+ floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+
+ if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) {
+ this->unk_197 = 1;
+ } else if (floorType == FLOOR_TYPE_5) {
+ this->unk_197 = -1;
+ }
+
+ if (this->bounceCount <= 0) {
+ this->bounceCount++;
+ if (this->unk_197 != 0) {
+ this->actor.velocity.y = 0.0f;
} else {
- Vec3f spC8;
+ this->actor.velocity.y *= -0.3f;
+ this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x4000);
+ }
+ bounced = true;
+ } else {
+ this->actor.velocity.y = 0.0f;
+ }
+
+ if (this->unk_197 != 0) {
+ Vec3f spC8;
+
+ if (this->unk_197 > 0) {
+ this->actor.speed = 0.0f;
+ } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) {
+ this->airTimer = 10;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->actionState = ENKANBAN_GROUND;
+ this->actor.speed = 0.0f;
+ goto nextCase;
+ }
Matrix_RotateXFNew(this->floorRot.x);
Matrix_RotateZF(this->floorRot.z, MTXMODE_APPLY);
@@ -558,67 +554,67 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actor.world.rot.y = Math_Atan2S(spC8.x, spC8.z);
this->unk_198 = 1;
this->actor.speed = sqrtf(SQXZ(this->actor.velocity));
+ } else {
+ this->unk_198 = 0;
+ Math_ApproachZeroF(&this->actor.speed, 1, 0.1f);
}
} else {
- this->unk_198 = 0;
- Math_ApproachZeroF(&this->actor.speed, 1, 0.1f);
+ this->actor.speed *= 0.7f;
}
+
+ if (this->spinRot.x == 0) {
+ if (this->bounceX != 0) {
+ bounced = true;
+ if (this->unk_197 != 0) {
+ this->spinRot.x = 0;
+ this->bounceX = 0;
+ } else {
+ this->spinVel.x = this->bounceX << 9;
+ if (this->bounceX != 0) {
+ this->bounceX -= 5;
+ if (this->bounceX <= 0) {
+ this->bounceX = 0;
+ }
+ }
+
+ if (Rand_ZeroOne() < 0.5f) {
+ this->spinXFlag = 1;
+ } else {
+ this->spinXFlag = 0;
+ }
+ }
+ }
+ }
+
+ if (this->spinRot.z == 0) {
+ if (this->bounceZ != 0) {
+ bounced = 1;
+ if (this->unk_197 != 0) {
+ this->spinRot.z = 0;
+ this->bounceZ = 0;
+ } else {
+ this->spinVel.z = this->bounceZ << 9;
+ if (this->bounceZ != 0) {
+ this->bounceZ -= 5;
+ if (this->bounceZ <= 0) {
+ this->bounceZ = 0;
+ }
+ }
+
+ if (Rand_ZeroOne() < 0.5f) {
+ this->spinZFlag = 1;
+ } else {
+ this->spinZFlag = 0;
+ }
+ }
+ }
+ }
+
+ Math_ApproachS(&this->actor.shape.rot.x, this->direction * 0x4000, 1, 0x2000);
} else {
- this->actor.speed *= 0.7f;
+ this->actor.shape.rot.y += this->spinVel.y;
+ this->actor.shape.rot.x += this->direction * 0x7D0;
}
-
- if (this->spinRot.x == 0) {
- if (this->bounceX != 0) {
- bounced = true;
- if (this->unk_197 != 0) {
- this->spinRot.x = 0;
- this->bounceX = 0;
- } else {
- this->spinVel.x = this->bounceX << 9;
- if (this->bounceX != 0) {
- this->bounceX -= 5;
- if (this->bounceX <= 0) {
- this->bounceX = 0;
- }
- }
-
- if (Rand_ZeroOne() < 0.5f) {
- this->spinXFlag = 1;
- } else {
- this->spinXFlag = 0;
- }
- }
- }
- }
-
- if (this->spinRot.z == 0) {
- if (this->bounceZ != 0) {
- bounced = 1;
- if (this->unk_197 != 0) {
- this->spinRot.z = 0;
- this->bounceZ = 0;
- } else {
- this->spinVel.z = this->bounceZ << 9;
- if (this->bounceZ != 0) {
- this->bounceZ -= 5;
- if (this->bounceZ <= 0) {
- this->bounceZ = 0;
- }
- }
-
- if (Rand_ZeroOne() < 0.5f) {
- this->spinZFlag = 1;
- } else {
- this->spinZFlag = 0;
- }
- }
- }
- }
-
- Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000);
- } else {
- this->actor.shape.rot.y += this->spinVel.y;
- this->actor.shape.rot.x += this->direction * 0x7D0;
}
if (bounced) {
@@ -630,15 +626,16 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
}
if (bounced && (this->unk_197 >= 0)) {
+ static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 };
+ static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 };
s16 dustCount;
s16 j;
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
- static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 };
- static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 };
Vec3f accel;
Vec3f pos;
Color_RGBA8 primColor;
Color_RGBA8 envColor;
+ s32 pad3;
if (this->unk_197 != 0) {
primColor = D_8095754C;
@@ -656,8 +653,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
dustCount = this->partCount * 0.5f;
for (j = 0; j < dustCount + 3; j++) {
- pos.x = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x;
- pos.z = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z;
+ pos.x = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x;
+ pos.z = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z;
func_800B0F18(play, &pos, &velocity, &accel, &primColor, &envColor, 100, 5,
Rand_ZeroFloat(5.0f) + 14.0f);
}
@@ -667,10 +664,10 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actionState = ENKANBAN_GROUND;
}
}
-
+ nextCase:
+ // fallthrough
case ENKANBAN_GROUND:
case ENKANBAN_WATER:
- nextCase:
signpost = (EnKanban*)this->actor.parent;
if (signpost->partFlags == 0xFFFF) {
@@ -753,7 +750,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actionState = ENKANBAN_AIR;
this->actor.gravity = -1.0f;
- this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000);
+ this->actor.world.rot.y = Rand_CenteredFloat(0x10000);
if (this->partCount >= 4) {
this->bounceX = Rand_ZeroFloat(10.0f) + 6.0f;
this->bounceZ = Rand_ZeroFloat(10.0f) + 6.0f;
@@ -766,7 +763,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actor.speed = Rand_ZeroFloat(1.5f);
}
- this->spinVel.y = randPlusMinusPoint5Scaled(0x1800);
+ this->spinVel.y = Rand_CenteredFloat(0x1800);
if (Rand_ZeroOne() < 0.5f) {
this->direction = 1;
@@ -811,7 +808,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->actor.speed = 4.0f + bombStrength;
}
- this->spinVel.y = randPlusMinusPoint5Scaled(0x1800);
+ this->spinVel.y = Rand_CenteredFloat(0x1800);
if (Rand_ZeroOne() < 0.5f) {
this->direction = 1;
@@ -839,6 +836,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
break;
+
+ default:
+ break;
}
break;
@@ -883,14 +883,11 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
}
break;
}
+
+ default:
+ break;
}
}
-#else
-static Vec3f D_8095753C = { 0.0f, 0.0f, 0.0f };
-static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 };
-static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kanban/EnKanban_Update.s")
-#endif
static Gfx* sDisplayLists[] = {
object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38,
@@ -923,8 +920,8 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30);
diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
index 0c0078fd3..34b3d6405 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
@@ -93,11 +93,11 @@ static ColliderCylinderInit sAttackCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit = { 1, 15, 80, MASS_HEAVY };
typedef enum {
- /* 0x0 */ KAREBABA_DMGEFF_NONE,
- /* 0x2 */ KAREBABA_DMGEFF_FIRE = 2,
- /* 0x3 */ KAREBABA_DMGEFF_ICE,
- /* 0x4 */ KAREBABA_DMGEFF_LIGHT,
- /* 0x5 */ KAREBABA_DMGEFF_ELECTRIC,
+ /* 0 */ KAREBABA_DMGEFF_NONE,
+ /* 2 */ KAREBABA_DMGEFF_FIRE = 2,
+ /* 3 */ KAREBABA_DMGEFF_ICE,
+ /* 4 */ KAREBABA_DMGEFF_LIGHT,
+ /* 5 */ KAREBABA_DMGEFF_ELECTRIC
} DekuBabaDamageEffect;
static DamageTable sDamageTable = {
@@ -634,7 +634,7 @@ void EnKarebaba_DrawShadow(EnKarebaba* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255);
@@ -658,7 +658,7 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Math_Vec3f_Copy(this->bodyPartsPos, &this->actor.world.pos);
if (this->actionFunc == EnKarebaba_DeadItemDrop) {
diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
index aa05aec0a..045bef42a 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
@@ -11,7 +11,7 @@ typedef void (*EnKarebabaActionFunc)(struct EnKarebaba*, PlayState*);
typedef enum {
/* 0 */ ENKAREBABA_0, // Unused, always shrinks and drops a Deku Nut
/* 1 */ ENKAREBABA_1, // Drops sticks (Only type OoT has)
- /* 2 */ KAREBABA_MINI,
+ /* 2 */ KAREBABA_MINI
} KarebabaType;
typedef struct EnKarebaba {
diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
index b3b8ca295..cfd27fbb0 100644
--- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
+++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
@@ -557,7 +557,7 @@ void EnKbt_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
index c3cdeae33..fbb8346e5 100644
--- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
+++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
@@ -159,7 +159,7 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) {
s32 phi_v0;
s32 sp30;
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (CURRENT_DAY != 0) {
sp30 = CURRENT_DAY - 1;
} else {
@@ -359,8 +359,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
- (player->stateFlags2 & PLAYER_STATE2_80000)) {
+ if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
+ (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
break;
@@ -370,7 +370,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
+ if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
break;
@@ -380,8 +381,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
- (player->stateFlags2 & PLAYER_STATE2_80000)) {
+ if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
+ (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
this->unk_28E = 0;
@@ -774,7 +775,7 @@ void EnKendoJs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
void EnKendoJs_Draw(Actor* thisx, PlayState* play) {
EnKendoJs* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnKendoJs_OverrideLimbDraw, EnKendoJs_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
index f30f55a33..e80807b08 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
@@ -72,7 +72,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80B419B0;
this->actor.textId = 0xC4E;
this->unk_29C |= 1;
- this->unk_2EA = 3;
+ this->getItemId = GI_RUPEE_10;
} else {
EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
this->actionFunc = func_80B42714;
@@ -420,12 +420,12 @@ void func_80B4163C(EnKgy* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->unk_2D2 == 6) {
- if (this->unk_2EA > 0) {
+ if (this->getItemId > GI_NONE) {
EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f);
- this->unk_2EA--;
+ this->getItemId--;
} else {
EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f);
- this->unk_2EA = (s32)Rand_ZeroFloat(3.0f) + 2;
+ this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE;
}
} else {
EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f);
@@ -598,7 +598,7 @@ void func_80B41D64(EnKgy* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10000;
func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f);
}
func_80B40EE8(this, play);
}
@@ -790,16 +790,16 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC50:
if (func_80B40D8C(play)) {
- this->unk_2EA = 57;
+ this->getItemId = GI_SWORD_GILDED;
this->actor.textId = 0xC53;
} else {
- this->unk_2EA = 56;
+ this->getItemId = GI_SWORD_RAZOR;
this->actor.textId = 0xC51;
}
Message_CloseTextbox(play);
this->actionFunc = func_80B41D64;
func_80B413C8(this);
- Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f);
break;
case 0xC51:
@@ -1134,7 +1134,7 @@ void func_80B43074(EnKgy* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
Matrix_Push();
Matrix_Translate(-800.0f, 3100.0f, 8400.0f, MTXMODE_APPLY);
@@ -1166,7 +1166,7 @@ void func_80B43074(EnKgy* this, PlayState* play) {
void EnKgy_Draw(Actor* thisx, PlayState* play) {
EnKgy* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_29C & 1) {
func_80B43074(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
index 8207678fd..94f2aabd5 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
@@ -31,7 +31,7 @@ typedef struct EnKgy {
/* 0x2E4 */ s16 unk_2E4;
/* 0x2E6 */ s16 unk_2E6;
/* 0x2E8 */ s16 unk_2E8;
- /* 0x2EA */ s16 unk_2EA;
+ /* 0x2EA */ s16 getItemId;
/* 0x2EC */ LightInfo lightInfo;
/* 0x2FC */ LightNode* lightNode;
/* 0x300 */ s16 unk_300;
diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
index f3005ca05..77c7e1dc9 100644
--- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
+++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
@@ -359,7 +359,7 @@ void EnKujiya_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gLotteryShopCylinderDL);
diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
index 2af87ea90..16ce97153 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -245,14 +245,14 @@ void EnKusa_DropCollectible(EnKusa* this, PlayState* play) {
s32 collectableParams;
if ((KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_GRASS) || (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_BUSH)) {
- if (!KUSA_GET_PARAMS_0C(&this->actor)) {
+ if (!KUSA_GET_PARAM_0C(&this->actor)) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos,
KUSA_GET_RAND_COLLECTIBLE_ID(&this->actor) * 0x10);
}
} else if (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_REGROWING_GRASS) {
Item_DropCollectible(play, &this->actor.world.pos, 3);
} else {
- collectible = func_800A8150(KUSA_GET_PARAMS_3F(&this->actor));
+ collectible = func_800A8150(KUSA_GET_PARAM_3F(&this->actor));
if (collectible >= 0) {
collectableParams = KUSA_GET_COLLECTIBLE_ID(&this->actor);
Item_DropCollectible(play, &this->actor.world.pos, (collectableParams << 8) | collectible);
@@ -715,7 +715,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
alpha = (1300.0f - this->actor.projectedPos.z) * 2.55f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, alpha);
diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
index 56f55af3e..b231f3e0e 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
@@ -28,8 +28,8 @@ typedef struct EnKusa {
#define KUSA_GET_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0x7F)
#define KUSA_GET_RAND_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0xF)
#define KUSA_SHOULD_SPAWN_BUGS(thisx) (((thisx)->params >> 0x4) & 1)
-#define KUSA_GET_PARAMS_0C(thisx) (((thisx)->params >> 0xC) & 0x1)
-#define KUSA_GET_PARAMS_3F(thisx) (((thisx)->params >> 0x2) & 0x3F)
+#define KUSA_GET_PARAM_0C(thisx) (((thisx)->params >> 0xC) & 0x1)
+#define KUSA_GET_PARAM_3F(thisx) (((thisx)->params >> 0x2) & 0x3F)
#define KUSA_GET_TYPE(thisx)((thisx)->params & 0x3)
diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
index 8e2d194a6..fb7df013f 100644
--- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
+++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
@@ -4,7 +4,6 @@
* Description: Keaton grass
*/
-#include "prevent_bss_reordering.h"
#include "z_en_kusa2.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -112,7 +111,7 @@ void func_80A5B160(EnKusa2* this, PlayState* play) {
}
for (i = 1; i < ARRAY_COUNT(this->unk_194); i++) {
- temp_s1 = (i << 0xD) - 0x2000;
+ temp_s1 = (i * 0x2000) - 0x2000;
if (this->unk_194[i] == NULL) {
ptr = &this->unk_194[i];
actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene(
@@ -961,14 +960,14 @@ void func_80A5D7A4(EnKusa2* this) {
}
void func_80A5D7C4(EnKusa2* this, PlayState* play) {
- EnKusa2* this2 = this;
+ Actor* thisx = &this->actor;
s16 sp2A;
if (Actor_HasParent(&this->actor, play)) {
- SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT);
- this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
- this->actor.shape.shadowAlpha = 60;
- this->actor.room = -1;
+ SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT);
+ thisx->shape.shadowDraw = ActorShadow_DrawCircle;
+ thisx->shape.shadowAlpha = 60;
+ thisx->room = -1;
func_80A5BD94(this);
func_80A5D964(this);
return;
@@ -976,23 +975,23 @@ void func_80A5D7C4(EnKusa2* this, PlayState* play) {
if (!func_80A5BFD8(this, play)) {
if ((this->unk_1C0 != NULL) && (this->unk_1C0->unk_1BE != 0)) {
- this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
- if (this2->unk_1C0 != NULL) {
- sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, &this->actor);
- this->actor.home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A;
+ thisx->shape.shadowDraw = ActorShadow_DrawCircle;
+ if (this->unk_1C0 != NULL) {
+ sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, thisx);
+ thisx->home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A;
}
this->unk_1C8 = Rand_S16Offset(72, 16);
- this->actor.velocity.y = 8.8f;
- Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
+ thisx->velocity.y = 8.8f;
+ Actor_PlaySfx(thisx, NA_SE_EN_NUTS_WALK);
func_80A5DC70(this);
}
- if (this->actor.xzDistToPlayer < 600.0f) {
+ if (thisx->xzDistToPlayer < 600.0f) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- if (this->actor.xzDistToPlayer < 400.0f) {
+ if (thisx->xzDistToPlayer < 400.0f) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- if (this->actor.xzDistToPlayer < 100.0f) {
- Actor_OfferCarry(&this->actor, play);
+ if (thisx->xzDistToPlayer < 100.0f) {
+ Actor_OfferCarry(thisx, play);
}
}
}
@@ -1323,7 +1322,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(D_80A5F1C0.unk_0480); i++) {
EnKusa2UnkBssSubStruct2* s = &D_80A5F1C0.unk_0480[i];
@@ -1343,7 +1342,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) {
void func_80A5E80C(PlayState* play, s32 arg1) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, arg1);
diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c
index 0bd619a9c..fd7795f7c 100644
--- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c
+++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c
@@ -316,7 +316,7 @@ void func_80AEA128(EnLiftNuts* this, PlayState* play) {
}
void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
- if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && this->unk_34E == 1) {
+ if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && (this->unk_34E == 1)) {
this->actor.flags |= ACTOR_FLAG_10000;
} else if (this->actor.xzDistToPlayer > 120.0f) {
func_80AE9FC8(this);
@@ -326,7 +326,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
if (func_80AE9B4C(0, 0)) {
switch (CURRENT_DAY) {
case 1:
- if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) {
+ if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) ||
+ (gSaveContext.save.time <= CLOCK_TIME(6, 0))) {
Message_StartTextbox(play, 0x27F7, &this->actor);
this->textId = 0x27F7;
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) {
@@ -339,7 +340,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
break;
case 2:
- if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) {
+ if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) ||
+ (gSaveContext.save.time <= CLOCK_TIME(6, 0))) {
Message_StartTextbox(play, 0x27F7, &this->actor);
this->textId = 0x27F7;
} else {
@@ -360,7 +362,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
break;
case 3:
- if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) {
+ if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) ||
+ (gSaveContext.save.time <= CLOCK_TIME(6, 0))) {
Message_StartTextbox(play, 0x27F7, &this->actor);
this->textId = 0x27F7;
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) {
@@ -383,7 +386,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
Flags_UnsetSwitch(play, 0x40);
Inventory_SaveDekuPlaygroundHighScore(4);
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) &&
- CURRENT_DAY == 3) {
+ (CURRENT_DAY == 3)) {
this->unk_354 = 0;
Message_StartTextbox(play, 0x27F4, &this->actor);
this->textId = 0x27F4;
@@ -394,7 +397,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
} else {
if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) >=
gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) {
- if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < 0x2EE0) {
+ if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < SECONDS_TO_TIMER(120)) {
Message_StartTextbox(play, 0x27F9, &this->actor);
this->textId = 0x27F9;
} else {
@@ -428,6 +431,9 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
Message_StartTextbox(play, 0x27E9, &this->actor);
this->textId = 0x27E9;
break;
+
+ default:
+ break;
}
}
} else {
@@ -435,7 +441,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
this->textId = 0x27D8;
}
func_80AEABF0(this);
- } else if (func_80AE9AC4(this, 0) || this->unk_34E == 1) {
+ } else if (func_80AE9AC4(this, 0) || (this->unk_34E == 1)) {
if (this->unk_34E == 1) {
func_800B8614(&this->actor, play, 200.0f);
} else if (this->actor.playerHeightRel >= -13.0f) {
@@ -533,6 +539,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) {
Message_StartTextbox(play, 0x27E9, &this->actor);
this->textId = 0x27E9;
break;
+
+ default:
+ break;
}
break;
@@ -589,6 +598,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) {
Message_StartTextbox(play, 0x27ED, &this->actor);
this->textId = 0x27ED;
break;
+
+ default:
+ break;
}
}
}
@@ -644,6 +656,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) {
}
}
break;
+
+ default:
+ break;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x2000, 0x500);
@@ -668,6 +683,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) {
this->unk_354++;
}
break;
+
+ default:
+ break;
}
}
func_80AEB974(this);
@@ -759,7 +777,7 @@ void func_80AEB1C8(EnLiftNuts* this) {
void func_80AEB230(EnLiftNuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > 0) {
+ if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) {
player->stateFlags1 &= ~PLAYER_STATE1_20;
func_80AEB280(this);
}
@@ -773,8 +791,8 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.floorBgId == BG_ACTOR_MAX) &&
- player->actor.world.pos.y < 20.0f) ||
- gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= 0x2EE0) {
+ (player->actor.world.pos.y < 20.0f)) ||
+ (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120))) {
player->stateFlags1 |= PLAYER_STATE1_20;
Flags_SetSwitch(play, 0x41);
func_80AEB3E0(this, play);
@@ -986,9 +1004,9 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) {
s32 EnLiftNuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnLiftNuts* this = THIS;
- if (limbIndex == OBJECT_DNT_LIMB_0F || limbIndex == OBJECT_DNT_LIMB_10 || limbIndex == OBJECT_DNT_LIMB_15 ||
- limbIndex == OBJECT_DNT_LIMB_17 || limbIndex == OBJECT_DNT_LIMB_18 || limbIndex == OBJECT_DNT_LIMB_15 ||
- limbIndex == OBJECT_DNT_LIMB_1B) {
+ if ((limbIndex == OBJECT_DNT_LIMB_0F) || (limbIndex == OBJECT_DNT_LIMB_10) || (limbIndex == OBJECT_DNT_LIMB_15) ||
+ (limbIndex == OBJECT_DNT_LIMB_17) || (limbIndex == OBJECT_DNT_LIMB_18) || (limbIndex == OBJECT_DNT_LIMB_15) ||
+ (limbIndex == OBJECT_DNT_LIMB_1B)) {
*dList = NULL;
}
@@ -1009,7 +1027,7 @@ void EnLiftNuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
void EnLiftNuts_Draw(Actor* thisx, PlayState* play) {
EnLiftNuts* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnLiftNuts_OverrideLimbDraw, EnLiftNuts_PostLimbDraw, thisx);
}
diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c
index 830484996..f3c3f4705 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.c
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.c
@@ -31,9 +31,9 @@ ActorInit En_Light_InitVars = {
};
typedef struct {
- /* 0x00 */ Color_RGBA8 unk_00;
- /* 0x04 */ Color_RGB8 unk_04;
- /* 0x07 */ u8 unk_07;
+ /* 0x0 */ Color_RGBA8 unk_00;
+ /* 0x4 */ Color_RGB8 unk_04;
+ /* 0x7 */ u8 unk_07;
} EnLightStruct; // size = 0x8
EnLightStruct D_808666D0[] = {
@@ -168,7 +168,7 @@ void EnLight_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->actor.params >= 0) {
gSPSegment(
diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c
index 7cd1c3369..908bbf374 100644
--- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c
+++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c
@@ -112,7 +112,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 1;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
- this->pathLocation = LOOKNUTS_GET_PATROL_LOCATION(&this->actor);
+ this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor);
this->switchFlag = LOOKNUTS_GET_SCENE_FLAG(&this->actor);
this->spawnIndex = LOOKNUTS_GET_SPAWN_INDEX(&this->actor);
@@ -123,7 +123,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
return;
}
- if (this->pathLocation == 0x1F) {
+ if (this->pathIndex == LOOKNUTS_PATH_INDEX_NONE) {
Actor_Kill(&this->actor);
return;
}
@@ -165,17 +165,17 @@ void EnLookNuts_Patrol(EnLookNuts* this, PlayState* play) {
return;
}
- this->path = SubS_GetPathByIndex(play, this->pathLocation, 0x1F);
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, LOOKNUTS_PATH_INDEX_NONE);
if (this->path != NULL) {
- sp34 = SubS_GetDistSqAndOrientPath(this->path, this->currentPathIndex, &this->actor.world.pos, &sp30);
+ sp34 = SubS_GetDistSqAndOrientPath(this->path, this->waypointIndex, &this->actor.world.pos, &sp30);
}
//! @bug sp30 is uninitialised if path == NULL. Fix by enclosing everything in the path NULL check.
if (sp30 < 10.0f) {
if (this->path != NULL) {
- this->currentPathIndex++;
- if (this->currentPathIndex >= this->path->count) {
- this->currentPathIndex = 0;
+ this->waypointIndex++;
+ if (this->waypointIndex >= this->path->count) {
+ this->waypointIndex = 0;
}
if (Rand_ZeroOne() < 0.6f) {
EnLookNuts_SetupStandAndWait(this);
@@ -389,7 +389,7 @@ void EnLookNuts_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState]));
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h
index b72215ce6..92c24cfbd 100644
--- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h
+++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h
@@ -10,7 +10,9 @@ typedef void (*EnLookNutsActionFunc)(struct EnLookNuts*, PlayState*);
#define LOOKNUTS_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF)
#define LOOKNUTS_GET_SCENE_FLAG(thisx) ((thisx)->params & 0x7F)
-#define LOOKNUTS_GET_PATROL_LOCATION(thisx) (((thisx)->params >> 0x7) & 0x1F)
+#define LOOKNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 0x7) & 0x1F)
+
+#define LOOKNUTS_PATH_INDEX_NONE 0x1F
typedef struct EnLookNuts {
/* 0x000 */ Actor actor;
@@ -19,13 +21,13 @@ typedef struct EnLookNuts {
/* 0x1CA */ Vec3s morphTable[DEKU_PALACE_GUARD_LIMB_MAX];
/* 0x20C */ EnLookNutsActionFunc actionFunc;
/* 0x210 */ Path *path;
- /* 0x214 */ s16 currentPathIndex; // Index for the point where the deku guard is in its path
+ /* 0x214 */ s16 waypointIndex; // Index for the point where the deku guard is in its path
/* 0x216 */ s16 eyeState;
/* 0x218 */ s16 blinkTimer;
/* 0x21A */ s16 eventTimer; // Timer to trigger when another event within the actor will happen
/* 0x21C */ s16 state;
/* 0x21E */ s16 switchFlag;
- /* 0x220 */ s16 pathLocation; // Determines path that a guard will patrol
+ /* 0x220 */ s16 pathIndex; // Determines path that a guard will patrol
/* 0x222 */ s16 isPlayerDetected;
/* 0x224 */ s16 waitTimer; // Timer for how long the deku guard will take a break for
/* 0x226 */ s16 spawnIndex;
diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c
index 0586b2111..463c5b327 100644
--- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c
+++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c
@@ -144,7 +144,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) {
this->isCharging = false;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) {
- player->unk_B08[0] = 1.0f;
+ player->unk_B08 = 1.0f;
this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX];
this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT;
if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) {
@@ -155,7 +155,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) {
this->scaleTarget = 3;
}
} else {
- player->unk_B08[0] = 0.5f;
+ player->unk_B08 = 0.5f;
this->collider.info.toucher.damage = sDamages[this->type];
this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR;
if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) {
@@ -229,11 +229,11 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Actor* child = this->actor.child;
- this->unk1B0 = player->unk_B08[0];
+ this->unk1B0 = player->unk_B08;
this->actor.world.pos = player->bodyPartsPos[0];
this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000;
- if (!this->isCharging && (player->unk_B08[0] >= 0.1f)) {
+ if (!this->isCharging && (player->unk_B08 >= 0.1f)) {
if ((gSaveContext.magicState != MAGIC_STATE_IDLE) ||
((ENMTHUNDER_GET_MAGIC_COST(&this->actor) != 0) &&
!Magic_Consume(play, ENMTHUNDER_GET_MAGIC_COST(&this->actor), MAGIC_CONSUME_WAIT_PREVIEW))) {
@@ -247,8 +247,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
this->isCharging = true;
}
- if (player->unk_B08[0] >= 0.1f) {
- Rumble_Request(0.0f, (s32)(player->unk_B08[0] * 150.0f), 2, (s32)(player->unk_B08[0] * 150.0f));
+ if (player->unk_B08 >= 0.1f) {
+ Rumble_Request(0.0f, (s32)(player->unk_B08 * 150.0f), 2, (s32)(player->unk_B08 * 150.0f));
}
if (player->stateFlags2 & PLAYER_STATE2_20000) {
@@ -256,8 +256,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
child->parent = NULL;
}
- if (player->unk_B08[0] <= 0.15f) {
- if ((player->unk_B08[0] >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) {
+ if (player->unk_B08 <= 0.15f) {
+ if ((player->unk_B08 >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) {
AudioSfx_PlaySfx(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
AudioSfx_PlaySfx(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
@@ -273,7 +273,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
}
- if (player->unk_B08[0] < 0.85f) {
+ if (player->unk_B08 < 0.85f) {
this->collider.info.toucher.damage = sDamages[this->type];
this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR;
if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) {
@@ -320,26 +320,26 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
return;
}
- if (player->unk_B08[0] > 0.15f) {
+ if (player->unk_B08 > 0.15f) {
this->chargingAlpha = 255;
if (this->actor.child == NULL) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_DUST, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
EFF_DUST_TYPE_SPIN_ATTACK_CHARGE);
}
- this->adjustLightsArg1 += (((player->unk_B08[0] - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f;
- } else if (player->unk_B08[0] > .1f) {
- this->chargingAlpha = (s32)((player->unk_B08[0] - .1f) * 255.0f * 20.0f);
- this->lightColorFrac = (player->unk_B08[0] - .1f) * 10.0f;
+ this->adjustLightsArg1 += (((player->unk_B08 - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f;
+ } else if (player->unk_B08 > .1f) {
+ this->chargingAlpha = (s32)((player->unk_B08 - .1f) * 255.0f * 20.0f);
+ this->lightColorFrac = (player->unk_B08 - .1f) * 10.0f;
} else {
this->chargingAlpha = 0;
}
- if (player->unk_B08[0] > 0.85f) {
+ if (player->unk_B08 > 0.85f) {
func_8019F900(&player->actor.projectedPos, 2);
- } else if (player->unk_B08[0] > 0.15f) {
+ } else if (player->unk_B08 > 0.15f) {
func_8019F900(&player->actor.projectedPos, 1);
- } else if (player->unk_B08[0] > 0.1f) {
+ } else if (player->unk_B08 > 0.1f) {
func_8019F900(&player->actor.projectedPos, 0);
}
@@ -487,7 +487,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -540,7 +540,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) {
break;
}
- Matrix_Mult(&player->mf_CC4, MTXMODE_NEW);
+ Matrix_Mult(&player->leftHandMf, MTXMODE_NEW);
if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) {
Matrix_Translate(0.0f, 220.0f, 0.0f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
index 1242de4ba..29a09cd90 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
@@ -44,14 +44,14 @@ void EnMa4_InitFaceExpression(EnMa4* this);
typedef enum {
/* 0 */ MA4_TYPE_DAY1,
/* 1 */ MA4_TYPE_ALIENS_DEFEATED,
- /* 2 */ MA4_TYPE_ALIENS_WON,
+ /* 2 */ MA4_TYPE_ALIENS_WON
} EnMa4Type;
typedef enum {
/* 0 */ MA4_STATE_DEFAULT,
/* 1 */ MA4_STATE_HORSEBACKGAME,
/* 2 */ MA4_STATE_AFTERHORSEBACKGAME,
- /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS,
+ /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS
} EnMa4State;
ActorInit En_Ma4_InitVars = {
@@ -163,9 +163,9 @@ void EnMa4_InitPath(EnMa4* this, PlayState* play) {
Path* path;
Vec3f nextPoint;
- path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8];
+ path = &play->setupPathList[ENMA_GET_PATH_INDEX(&this->actor)];
this->pathPoints = Lib_SegmentedToVirtual(path->points);
- this->pathIndex = 0;
+ this->waypointIndex = 0;
this->pathPointsCount = path->count;
this->actor.home.pos.x = this->pathPoints[0].x;
@@ -202,7 +202,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) {
if (CURRENT_DAY == 1) {
this->type = MA4_TYPE_DAY1;
- } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
this->type = MA4_TYPE_ALIENS_DEFEATED;
} else {
this->type = MA4_TYPE_ALIENS_WON;
@@ -252,7 +252,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
s32 pad;
s16 sp2E;
- if (sAnimIndex != 9 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((sAnimIndex != 9) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
if (sAnimIndex == 3) {
if (D_80AC0250 < 3) {
D_80AC0250++;
@@ -268,13 +268,13 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
}
}
- if (sAnimIndex == 13 && Animation_OnFrame(&this->skelAnime, 37.0f)) {
+ if ((sAnimIndex == 13) && Animation_OnFrame(&this->skelAnime, 37.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK);
}
- sp34.x = this->pathPoints[this->pathIndex].x;
- sp34.y = this->pathPoints[this->pathIndex].y;
- sp34.z = this->pathPoints[this->pathIndex].z;
+ sp34.x = this->pathPoints[this->waypointIndex].x;
+ sp34.y = this->pathPoints[this->waypointIndex].y;
+ sp34.z = this->pathPoints[this->waypointIndex].z;
sp2E = Math_Vec3f_Yaw(&this->actor.world.pos, &sp34);
if (Math_Vec3f_DistXZ(&this->actor.world.pos, &sp34) > 50.0f) {
Math_SmoothStepToS(&this->actor.world.rot.y, sp2E, 10, 0x3000, 0x100);
@@ -291,10 +291,10 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
}
}
- if (this->pathIndex < this->pathPointsCount - 1) {
- this->pathIndex++;
+ if (this->waypointIndex < (this->pathPointsCount - 1)) {
+ this->waypointIndex++;
} else {
- this->pathIndex = 0;
+ this->waypointIndex = 0;
}
}
@@ -345,7 +345,7 @@ void EnMa4_Wait(EnMa4* this, PlayState* play) {
}
}
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
EnMa4_StartDialogue(this, play);
EnMa4_SetupDialogueHandler(this);
} else if (this->type != MA4_TYPE_ALIENS_WON || ABS_ALT(yaw) < 0x4000) {
@@ -374,7 +374,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
case 0x3341:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- SET_WEEKEVENTREG(WEEKEVENTREG_21_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM);
Message_StartTextbox(play, 0x3343, &this->actor);
this->textId = 0x3343;
} else {
@@ -383,14 +383,14 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
Message_StartTextbox(play, 0x3342, &this->actor);
this->textId = 0x3342;
this->state = MA4_STATE_DEFAULT;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
break;
case 0x3346:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- SET_WEEKEVENTREG(WEEKEVENTREG_21_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM);
Message_StartTextbox(play, 0x3343, &this->actor);
this->textId = 0x3343;
} else {
@@ -410,7 +410,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
func_8019F230();
Message_StartTextbox(play, 0x3348, &this->actor);
this->textId = 0x3348;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
break;
@@ -422,9 +422,9 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
Message_StartTextbox(play, 0x334E, &this->actor);
this->textId = 0x334E;
if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
- func_80151BB4(play, 0x1C);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM);
}
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
} else { // No.
func_8019F230();
EnMa4_SetFaceExpression(this, 0, 0);
@@ -443,7 +443,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 1, 0);
Message_StartTextbox(play, 0x3355, &this->actor);
this->textId = 0x3355;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
break;
@@ -459,13 +459,13 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x3357, &this->actor);
this->textId = 0x3357;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
} else {
func_8019F230();
EnMa4_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x335B, &this->actor);
this->textId = 0x335B;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
}
break;
@@ -480,9 +480,12 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x335A, &this->actor);
this->textId = 0x335A;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
break;
+
+ default:
+ break;
}
}
}
@@ -502,7 +505,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x3336, &this->actor);
this->textId = 0x3336;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x3338:
@@ -608,12 +611,15 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
Message_StartTextbox(play, 0x335C, &this->actor);
this->textId = 0x335C;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
} else {
Message_StartTextbox(play, 0x3359, &this->actor);
this->textId = 0x3359;
}
break;
+
+ default:
+ break;
}
}
}
@@ -629,9 +635,6 @@ void EnMa4_SetupDialogueHandler(EnMa4* this) {
void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) {
switch (Message_GetState(&play->msgCtx)) {
- default:
- break;
-
case TEXT_STATE_CHOICE: // Player answered a question
EnMa4_HandlePlayerChoice(this, play);
break;
@@ -642,7 +645,7 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) {
case TEXT_STATE_DONE: // End conversation
if (Message_ShouldAdvance(play)) {
- if ((play->msgCtx.unk120B1 == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ if ((play->msgCtx.bombersNotebookEventQueueCount == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
EnMa4_SetupWait(this);
}
}
@@ -652,6 +655,9 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) {
case TEXT_STATE_CLOSING:
case TEXT_STATE_3:
break;
+
+ default:
+ break;
}
if (this->type != MA4_TYPE_ALIENS_WON) {
@@ -818,12 +824,15 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) {
this->hasBow = false;
EnMa4_ChangeAnim(this, 4);
break;
+
+ default:
+ break;
}
}
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
- if (sCueId == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((sCueId == 2) && (this->animTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
EnMa4_ChangeAnim(this, 7);
}
} else {
@@ -845,7 +854,7 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->actor.flags |= ACTOR_FLAG_10000;
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
player->stateFlags1 &= ~PLAYER_STATE1_20;
Message_StartTextbox(play, 0x334C, &this->actor);
this->textId = 0x334C;
@@ -879,7 +888,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x3337, &this->actor);
this->textId = 0x3337;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
} else {
Message_StartTextbox(play, 0x3335, &this->actor);
this->textId = 0x3335;
@@ -887,7 +896,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
}
} else if (this->state == MA4_STATE_DEFAULT) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_40)) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) {
Message_StartTextbox(play, 0x3346, &this->actor);
this->textId = 0x3346;
} else {
@@ -935,7 +944,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
EnMa4_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x3337, &this->actor);
this->textId = 0x3337;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
} else {
Message_StartTextbox(play, 0x3335, &this->actor);
this->textId = 0x3335;
@@ -1054,7 +1063,9 @@ void EnMa4_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
} else if (limbIndex == ROMANI_LIMB_LEFT_HAND) {
if (this->hasBow == true) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -1064,12 +1075,13 @@ void EnMa4_Draw(Actor* thisx, PlayState* play) {
EnMa4* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
+
if (this->type == MA4_TYPE_ALIENS_WON) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gRomaniWoodenBoxDL);
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex]));
diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
index 91876c938..dfedd3330 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
@@ -8,6 +8,8 @@ struct EnMa4;
typedef void (*EnMa4ActionFunc)(struct EnMa4*, PlayState*);
+#define ENMA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
+
typedef struct EnMa4 {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
@@ -19,7 +21,7 @@ typedef struct EnMa4 {
/* 0x28E */ UNK_TYPE1 unk28E[0x6];
/* 0x294 */ Vec3s morphTable[ROMANI_LIMB_MAX];
/* 0x31E */ UNK_TYPE1 unk31E[0x6];
- /* 0x324 */ s16 pathIndex;
+ /* 0x324 */ s16 waypointIndex;
/* 0x326 */ s16 pathPointsCount;
/* 0x328 */ UNK_TYPE1 unk_328[0x2];
/* 0x32A */ s16 blinkTimer;
diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c
index 6d0b027eb..5dd713019 100644
--- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c
+++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c
@@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) {
this->unk320 = 0;
this->eyeTexIndex = 0;
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYto_SetFaceExpression(this, 0, 1);
} else {
EnMaYto_SetFaceExpression(this, 5, 2);
@@ -186,38 +186,39 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) {
s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) {
switch (this->type) {
case MA_YTO_TYPE_DEFAULT:
- if (CURRENT_DAY == 3 && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
break;
case MA_YTO_TYPE_DINNER:
- if (CURRENT_DAY != 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
break;
case MA_YTO_TYPE_BARN:
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
if (((this->actor.params & 0x0F00) >> 8) != 0) {
return false;
}
} else if (((this->actor.params & 0x0F00) >> 8) == 0) {
return false;
}
- if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) {
+ if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) {
return false;
}
break;
case MA_YTO_TYPE_AFTERMILKRUN:
- if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) ||
+ if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_14_01)) {
return false;
}
break;
case MA_YTO_TYPE_4:
+ default:
break;
}
@@ -239,7 +240,7 @@ void EnMaYto_InitAnimation(EnMaYto* this, PlayState* play) {
break;
case MA_YTO_TYPE_BARN:
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYto_ChangeAnim(this, 12);
} else {
EnMaYto_ChangeAnim(this, 8);
@@ -277,8 +278,8 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) {
case MA_YTO_TYPE_AFTERMILKRUN:
this->unk310 = 0;
- if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) &&
- (Rand_Next() & 0x80)) {
+ if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && (Rand_Next() & 0x80)) {
EnMaYto_SetupBeginWarmFuzzyFeelingCs(this);
} else {
EnMaYto_SetupAfterMilkRunInit(this);
@@ -304,8 +305,8 @@ s32 EnMaYto_SearchRomani(EnMaYto* this, PlayState* play) {
EnMaYts* romani = (EnMaYts*)npcActor;
s16 romaniType = EN_MA_YTS_GET_TYPE(&romani->actor);
- if ((this->type == MA_YTO_TYPE_DINNER && romaniType == MA_YTS_TYPE_SITTING) ||
- (this->type == MA_YTO_TYPE_BARN && romaniType == MA_YTS_TYPE_BARN)) {
+ if (((this->type == MA_YTO_TYPE_DINNER) && (romaniType == MA_YTS_TYPE_SITTING)) ||
+ ((this->type == MA_YTO_TYPE_BARN) && (romaniType == MA_YTS_TYPE_BARN))) {
this->actor.child = &romani->actor;
romani->actor.parent = &this->actor;
return true;
@@ -332,7 +333,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) {
return 0;
case MA_YTO_TYPE_DINNER:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY == 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY == 2)) {
return 0;
}
if (EnMaYto_SearchRomani(this, play)) {
@@ -341,7 +342,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) {
return 1;
case MA_YTO_TYPE_BARN:
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
if (EnMaYto_SearchRomani(this, play)) {
return 2;
}
@@ -394,8 +395,8 @@ void EnMaYto_DefaultWait(EnMaYto* this, PlayState* play) {
s16 direction;
direction = rotY - this->actor.yawTowardsPlayer;
- if (Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) == 0 &&
- this->animIndex == 1) {
+ if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) &&
+ (this->animIndex == 1)) {
this->animIndex = 11;
EnMaYto_ChangeAnim(this, 11);
}
@@ -439,7 +440,7 @@ void EnMaYto_DefaultDialogueHandler(EnMaYto* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x3000, 0x100);
- if (this->textId == 0x3395 && this->skelAnime.animation == &gCremiaSpreadArmsStartAnim &&
+ if ((this->textId == 0x3395) && (this->skelAnime.animation == &gCremiaSpreadArmsStartAnim) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
EnMaYto_ChangeAnim(this, 4);
}
@@ -475,7 +476,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 3, 1);
Message_StartTextbox(play, 0x3393, &this->actor);
this->textId = 0x3393;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
break;
case 0x3394:
@@ -488,14 +489,17 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_ChangeAnim(this, 1);
Message_StartTextbox(play, 0x3396, &this->actor);
this->textId = 0x3396;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ break;
+
+ default:
break;
}
}
}
void EnMaYto_SetupDinnerWait(EnMaYto* this) {
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
func_80B90E50(this, 0);
this->unk31E = 0;
} else {
@@ -516,7 +520,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) {
} else {
Actor* child = this->actor.child;
- if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) {
+ if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) {
Actor_ChangeFocus(&this->actor, play, &this->actor);
EnMaYto_DinnerStartDialogue(this, play);
EnMaYto_SetupDinnerDialogueHandler(this);
@@ -524,7 +528,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) {
func_800B8614(&this->actor, play, 120.0f);
child = this->actor.child;
- if (child != NULL && CURRENT_DAY != 2) {
+ if ((child != NULL) && (CURRENT_DAY != 2)) {
s16 childDirection = child->shape.rot.y - child->yawTowardsPlayer;
if (ABS_ALT(childDirection) < 0x4000) {
@@ -536,7 +540,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) {
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
func_80B90E50(this, 1);
} else {
func_80B90E50(this, 2);
@@ -631,8 +635,8 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetRomaniFaceExpression(this, 0, 1);
Message_StartTextbox(play, 0x339E, &this->actor);
this->textId = 0x339E;
- func_80151BB4(play, 6);
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x339F:
@@ -667,27 +671,30 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x33A4, &this->actor);
this->textId = 0x33A4;
- func_80151BB4(play, 6);
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x33A5:
Message_StartTextbox(play, 0x33A6, &this->actor);
this->textId = 0x33A6;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
break;
case 0x33A7:
Message_StartTextbox(play, 0x33A8, &this->actor);
this->textId = 0x33A8;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ break;
+
+ default:
break;
}
}
}
void EnMaYto_SetupBarnWait(EnMaYto* this) {
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYto_ChangeAnim(this, 13);
func_80B90E50(this, 0);
this->unk31E = 0;
@@ -711,11 +718,11 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) {
} else {
Actor* child = this->actor.child;
- if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) {
+ if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) {
Actor_ChangeFocus(&this->actor, play, &this->actor);
EnMaYto_BarnStartDialogue(this, play);
EnMaYto_SetupBarnDialogueHandler(this);
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ABS_ALT(direction) < 0x2000) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || (ABS_ALT(direction) < 0x2000)) {
func_800B8614(&this->actor, play, 100.0f);
child = this->actor.child;
@@ -727,7 +734,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) {
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
func_80B90E50(this, 1);
} else {
func_80B90E50(this, 2);
@@ -789,8 +796,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
Actor_ChangeFocus(&this->actor, play, &this->actor);
Message_StartTextbox(play, 0x33AD, &this->actor);
this->textId = 0x33AD;
- func_80151BB4(play, 6);
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x33AE:
@@ -807,8 +814,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x33B0, &this->actor);
this->textId = 0x33B0;
- func_80151BB4(play, 6);
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x33B1:
@@ -817,7 +824,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
// "I should had believed what Romani said"
Message_StartTextbox(play, 0x33B2, &this->actor);
this->textId = 0x33B2;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
break;
case 0x33C6:
@@ -864,8 +871,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetRomaniFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x33CC, &this->actor);
this->textId = 0x33CC;
- func_80151BB4(play, 6);
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
default:
@@ -875,7 +882,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupAfterMilkRunInit(EnMaYto* this) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
EnMaYto_SetFaceExpression(this, 3, 1);
} else {
Audio_PlayFanfare(NA_BGM_FAILURE_1);
@@ -890,7 +897,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
Message_StartTextbox(play, 0x33C1, &this->actor);
this->textId = 0x33C1;
} else {
@@ -901,7 +908,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 4;
EnMaYto_SetupPostMilkRunWaitDialogueEnd(this);
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
return;
}
@@ -948,6 +955,9 @@ void EnMaYto_AfterMilkRunChooseNextDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetupPostMilkRunGiveReward(this);
EnMaYto_PostMilkRunGiveReward(this, play);
break;
+
+ default:
+ break;
}
}
}
@@ -981,9 +991,9 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) {
this->textId = 0x33C3;
SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 3;
- func_80151BB4(play, 0x20);
- func_80151BB4(play, 0x1F);
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
EnMaYto_SetupPostMilkRunWaitDialogueEnd(this);
} else {
// You already have the mask
@@ -992,7 +1002,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) {
this->textId = 0x33D0;
SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 3;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
EnMaYto_SetupPostMilkRunWaitDialogueEnd(this);
}
} else {
@@ -1047,12 +1057,15 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) {
case 3:
EnMaYto_ChangeAnim(this, 22);
break;
+
+ default:
+ break;
}
}
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
- if (sCueId == 2 && this->skelAnime.animation == &gCremiaHugStartAnim &&
+ if ((sCueId == 2) && (this->skelAnime.animation == &gCremiaHugStartAnim) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
EnMaYto_ChangeAnim(this, 20);
}
@@ -1066,14 +1079,14 @@ void EnMaYto_SetupPostMilkRunWaitDialogueEnd(EnMaYto* this) {
}
void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) {
- if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE || Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
- if (Message_ShouldAdvance(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) {
+ if (Message_ShouldAdvance(play) && (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) {
func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
Message_CloseTextbox(play);
}
}
- if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE && play->msgCtx.unk120B1 == 0) {
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) {
EnMaYto_SetupPostMilkRunEnd(this);
}
}
@@ -1096,7 +1109,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) {
void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) {
if (CURRENT_DAY == 1) {
- if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
+ if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
switch (Player_GetMask(play)) {
case PLAYER_MASK_ROMANI:
Message_StartTextbox(play, 0x235D, &this->actor);
@@ -1141,13 +1154,13 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x33C5, &this->actor);
this->textId = 0x33C5;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
} else {
EnMaYto_SetTalkedFlag();
EnMaYto_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x33C4, &this->actor);
this->textId = 0x33C4;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
}
}
}
@@ -1155,7 +1168,7 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) {
void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) {
switch (CURRENT_DAY) {
case 1:
- if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
+ if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
switch (Player_GetMask(play)) {
case PLAYER_MASK_ROMANI:
Message_StartTextbox(play, 0x235D, &this->actor);
@@ -1198,7 +1211,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) {
if (EnMaYto_HasSpokenToPlayer()) {
Message_StartTextbox(play, 0x33A6, &this->actor);
this->textId = 0x33A6;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
} else {
EnMaYto_SetTalkedFlag();
Message_StartTextbox(play, 0x33A5, &this->actor);
@@ -1210,18 +1223,21 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) {
if (EnMaYto_HasSpokenToPlayer()) {
Message_StartTextbox(play, 0x33A8, &this->actor);
this->textId = 0x33A8;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
} else {
EnMaYto_SetTalkedFlag();
Message_StartTextbox(play, 0x33A7, &this->actor);
this->textId = 0x33A7;
}
break;
+
+ default:
+ break;
}
}
void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
if (CURRENT_DAY == 2) {
if (this->unk310 == 1) {
Message_StartTextbox(play, 0x33AE, &this->actor);
@@ -1250,7 +1266,7 @@ void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 5, 3);
Message_StartTextbox(play, 0x33B3, &this->actor);
this->textId = 0x33B3;
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
} else {
EnMaYto_SetTalkedFlag();
EnMaYto_SetFaceExpression(this, 5, 3);
@@ -1324,7 +1340,7 @@ void EnMaYto_UpdateEyes(EnMaYto* this) {
void func_80B90E50(EnMaYto* this, s16 arg1) {
EnMaYts* romani = (EnMaYts*)this->actor.child;
- if (romani != NULL && romani->actor.id == ACTOR_EN_MA_YTS) {
+ if ((romani != NULL) && (romani->actor.id == ACTOR_EN_MA_YTS)) {
romani->unk_32C = arg1;
}
}
@@ -1344,7 +1360,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth
}
void EnMaYto_InitFaceExpression(EnMaYto* this) {
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYto_SetFaceExpression(this, 0, 1);
EnMaYto_SetRomaniFaceExpression(this, 0, 0);
} else {
@@ -1372,27 +1388,33 @@ s32 EnMaYto_HasSpokenToPlayerToday(void) {
return true;
}
break;
+
+ default:
+ break;
}
return false;
}
s32 EnMaYto_HasSpokenToPlayer(void) {
- // Please note no case here has a `break`.
switch (CURRENT_DAY) {
case 3:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) {
return true;
}
-
+ // fallthrough
case 2:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) {
return true;
}
-
+ // fallthrough
case 1:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) {
return true;
}
+ break;
+
+ default:
+ break;
}
return false;
}
@@ -1410,6 +1432,9 @@ void EnMaYto_SetTalkedFlag(void) {
case 3:
SET_WEEKEVENTREG(WEEKEVENTREG_13_10);
break;
+
+ default:
+ break;
}
}
@@ -1458,11 +1483,12 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
- if (this->type == MA_YTO_TYPE_BARN && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+
+ if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL);
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyesTextures[this->eyeTexIndex]));
diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c
index edf0e41f2..bb9c9c926 100644
--- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c
+++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c
@@ -123,7 +123,7 @@ void func_80B8D12C(EnMaYts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 trackingMode = (this->unk_32C == 2) ? NPC_TRACKING_NONE : NPC_TRACKING_PLAYER_AUTO_TURN;
- if (this->unk_32C == 0 || this->actor.parent == NULL) {
+ if ((this->unk_32C == 0) || (this->actor.parent == NULL)) {
this->interactInfo.trackPos = player->actor.world.pos;
this->interactInfo.trackPos.y -= -10.0f;
} else {
@@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) {
case MA_YTS_TYPE_SITTING:
this->actor.targetMode = 6;
// Day 1 or "Winning" the alien invasion
- if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYts_ChangeAnim(this, 14);
} else {
EnMaYts_ChangeAnim(this, 18);
@@ -177,38 +177,44 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) {
case 2:
// Failing the alien invasion
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
break;
case 3:
// "Winning" the alien invasion
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
break;
+
+ default:
+ break;
}
break;
case MA_YTS_TYPE_BARN:
// Failing the alien invasion
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
- } else if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) {
+ } else if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) {
return false;
}
break;
case MA_YTS_TYPE_SLEEPING:
// "Winning" the alien invasion
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
break;
case MA_YTS_TYPE_ENDCREDITS:
break;
+
+ default:
+ break;
}
return true;
@@ -248,7 +254,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) {
this->hasBow = false;
}
- if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
this->overrideEyeTexIndex = 0;
this->eyeTexIndex = 0;
this->mouthTexIndex = 0;
@@ -266,7 +272,8 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) {
this->mouthTexIndex = 0;
this->unk_32C = 2;
EnMaYts_SetupEndCreditsHandler(this);
- } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
EnMaYts_SetupStartDialogue(this);
} else {
EnMaYts_SetupDoNothing(this);
@@ -307,7 +314,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 4, 3);
Message_StartTextbox(play, 0x3362, &this->actor);
this->textId = 0x3362;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
} else if (Player_GetMask(play) != PLAYER_MASK_NONE) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_40)) {
@@ -319,9 +326,9 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x3366, &this->actor);
this->textId = 0x3366;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) {
EnMaYts_SetFaceExpression(this, 0, 0);
Message_StartTextbox(play, 0x3367, &this->actor);
this->textId = 0x3367;
@@ -337,7 +344,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 0, 0);
Message_StartTextbox(play, 0x336C, &this->actor);
this->textId = 0x336C;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
}
}
EnMaYts_SetupDialogueHandler(this);
@@ -406,6 +413,9 @@ void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) {
this->hasBow = true;
EnMaYts_ChangeAnim(this, 20);
break;
+
+ default:
+ break;
}
}
}
@@ -436,7 +446,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 4, 3);
Message_StartTextbox(play, 0x3361, &this->actor);
this->textId = 0x3361;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x3363:
@@ -449,14 +459,14 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x3365, &this->actor);
this->textId = 0x3365;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x3367:
EnMaYts_SetFaceExpression(this, 4, 3);
Message_StartTextbox(play, 0x3368, &this->actor);
this->textId = 0x3368;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
case 0x3369:
@@ -469,7 +479,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) {
EnMaYts_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x336B, &this->actor);
this->textId = 0x336B;
- func_80151BB4(play, 5);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI);
break;
default:
@@ -526,7 +536,9 @@ void EnMaYts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
} else if (limbIndex == ROMANI_LIMB_LEFT_HAND) {
if (this->hasBow == true) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -536,7 +548,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) {
EnMaYts* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex]));
@@ -550,7 +563,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) {
// Alternative draw function
void EnMaYts_DrawSleeping(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gRomaniSleepingDL);
diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
index 15aa42bda..0cce91c73 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
@@ -554,7 +554,7 @@ void EnMag_DrawImageRGBA32(Gfx** gfxp, s16 centerX, s16 centerY, TexturePtr sour
s32 pad;
s32 i;
- func_8012CA0C(&gfx);
+ Gfx_SetupDL56_Ptr(&gfx);
curTexture = source;
rectLeft = centerX - (width / 2);
@@ -709,7 +709,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
// Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default.
gSPSegment(gfx++, 0x06, play->objectCtx.status[this->actor.objBankIndex].segment);
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
// Mask appearing effects
gDPPipeSync(gfx++);
@@ -736,7 +736,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
}
}
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
if (this->majorasMaskAlpha != 0) {
gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
@@ -774,7 +774,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
}
if (this->subtitleAlpha != 0) {
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
gDPSetAlphaCompare(gfx++, G_AC_NONE);
gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
@@ -792,7 +792,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP);
}
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
gDPSetAlphaCompare(gfx++, G_AC_NONE);
gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
@@ -808,7 +808,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
EnMag_DrawTextureI8(&gfx, gTitleScreenMajorasMaskSubtitleTex, SUBTITLE_TEX_WIDTH, SUBTITLE_TEX_HEIGHT,
SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP);
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
gDPSetAlphaCompare(gfx++, G_AC_NONE);
gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
@@ -833,7 +833,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) {
THE_LEGEND_OF_TEX_LEFT, THE_LEGEND_OF_TEX_TOP);
}
- func_8012C680(&gfx);
+ Gfx_SetupDL39_Ptr(&gfx);
if (this->copyrightAlpha != 0) {
gDPSetAlphaCompare(gfx++, G_AC_NONE);
diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
index 95890455c..659ef4cb3 100644
--- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
+++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
@@ -491,11 +491,11 @@ s32 func_80B37B78(EnMaruta* this, PlayState* play) {
s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, 0x8000);
temp_v1 = BINANG_SUB(temp_v1, player->actor.shape.rot.y);
- if ((ABS_ALT(temp_v1) < 0x1555) ||
- ((player->meleeWeaponState != 0) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) {
+ if ((ABS_ALT(temp_v1) < 0x1555) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
+ ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) {
return true;
}
return false;
@@ -700,7 +700,7 @@ void EnMaruta_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_210 == 0) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c
index 7ac16e1b0..94590f5b6 100644
--- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c
+++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c
@@ -233,9 +233,9 @@ void EnMinifrog_SpawnDust(EnMinifrog* this, PlayState* play) {
vec5.z = this->actor.world.pos.z - (5.0f * Math_CosS(yaw) * Math_CosS(pitch));
for (i = 0; i < 5; i++) {
- vel.x = randPlusMinusPoint5Scaled(4.0f);
- vel.y = randPlusMinusPoint5Scaled(4.0f);
- vel.z = randPlusMinusPoint5Scaled(4.0f);
+ vel.x = Rand_CenteredFloat(4.0f);
+ vel.y = Rand_CenteredFloat(4.0f);
+ vel.z = Rand_CenteredFloat(4.0f);
accel.x = -vel.x * 0.1f;
accel.y = -vel.y * 0.1f;
accel.z = -vel.z * 0.1f;
@@ -608,9 +608,11 @@ void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
if ((limbIndex == 7) || (limbIndex == 8)) {
OPEN_DISPS(play->state.gfxCtx);
+
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, *dList);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -628,12 +630,14 @@ void EnMinifrog_Draw(Actor* thisx, PlayState* play) {
Color_RGBA8* envColor;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
envColor = &sEnMinifrogColor[this->frogIndex];
gSPSegment(POLY_OPA_DISP++, 0x08, D_808A4D74[0]);
gSPSegment(POLY_OPA_DISP++, 0x09, D_808A4D74[0]);
gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, envColor->a);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnMinifrog_OverrideLimbDraw, EnMinifrog_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h
index 9a3801d91..3e321cc56 100644
--- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h
+++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h
@@ -19,9 +19,9 @@ typedef enum {
} MinifrogType;
typedef enum {
- /* 0x00 */ MINIFROG_STATE_JUMP,
- /* 0x01 */ MINIFROG_STATE_AIR,
- /* 0x02 */ MINIFROG_STATE_GROUND
+ /* 0 */ MINIFROG_STATE_JUMP,
+ /* 1 */ MINIFROG_STATE_AIR,
+ /* 2 */ MINIFROG_STATE_GROUND
} MinifrogJumpState;
typedef struct EnMinifrog {
diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c
index 3b6cbaf86..68d08b223 100644
--- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c
+++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c
@@ -80,7 +80,7 @@ typedef enum {
/* 0x2 */ MINISLIME_DMGEFF_FIRE = 0x2,
/* 0x3 */ MINISLIME_DMGEFF_ICE,
/* 0xE */ MINISLIME_DMGEFF_HOOKSHOT = 0xE,
- /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE,
+ /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE
} MinislimeDamageEffect;
static DamageTable sDamageTable = {
@@ -209,11 +209,11 @@ void EnMinislime_AddIceSmokeEffect(EnMinislime* this, PlayState* play) {
Vec3f pos;
Vec3f vel;
- pos.x = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.x) + this->actor.world.pos.x;
+ pos.x = (Rand_CenteredFloat(200.0f) * this->actor.scale.x) + this->actor.world.pos.x;
pos.y = CLAMP_MIN(this->actor.world.pos.y, GBT_ROOM_5_MIN_Y + 30.0f);
- pos.z = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.z) + this->actor.world.pos.z;
- vel.x = randPlusMinusPoint5Scaled(1.5f);
- vel.z = randPlusMinusPoint5Scaled(1.5f);
+ pos.z = (Rand_CenteredFloat(200.0f) * this->actor.scale.z) + this->actor.world.pos.z;
+ vel.x = Rand_CenteredFloat(1.5f);
+ vel.z = Rand_CenteredFloat(1.5f);
vel.y = 2.0f;
EffectSsIceSmoke_Spawn(play, &pos, &vel, &gZeroVec3f, 500);
}
@@ -401,8 +401,8 @@ void EnMinislime_GrowAndShrink(EnMinislime* this, PlayState* play) {
this->growShrinkTimer--;
scaleFactor = (this->growShrinkTimer / 6) + 1.0f;
this->actor.scale.z = this->actor.scale.x =
- ((cos_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f;
- this->actor.scale.y = ((sin_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f;
+ ((Math_CosF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f;
+ this->actor.scale.y = ((Math_SinF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f;
if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) {
EnMinislime_SetupMoveToGekko(this);
} else if ((this->actor.xzDistToPlayer < 150.0f) && (this->growShrinkTimer < 38)) {
@@ -424,11 +424,12 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) {
f32 speedXZ;
this->idleTimer--;
- speedXZ = sin_rad(this->idleTimer * (M_PI / 10));
+ speedXZ = Math_SinF(this->idleTimer * (M_PI / 10));
this->actor.speed = speedXZ * 1.5f;
this->actor.speed = CLAMP_MIN(this->actor.speed, 0.0f);
Math_StepToF(&this->actor.scale.x, ((0.14f * speedXZ) + 1.5f) * 0.1f, 0.010000001f);
- Math_StepToF(&this->actor.scale.y, ((cos_rad(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f, 0.010000001f);
+ Math_StepToF(&this->actor.scale.y, ((Math_CosF(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f,
+ 0.010000001f);
Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f);
if (this->idleTimer == 0) {
if (this->actor.xzDistToPlayer < 300.0f) {
@@ -537,13 +538,13 @@ void EnMinislime_Knockback(EnMinislime* this, PlayState* play) {
this->knockbackTimer--;
Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
sqrtFrozenTimer = sqrtf(this->knockbackTimer);
- this->actor.scale.x = ((cos_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f;
+ this->actor.scale.x = ((Math_CosF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f;
this->actor.scale.z = this->actor.scale.x;
if (this->knockbackTimer == 15) {
this->collider.base.acFlags |= AC_ON;
}
- this->actor.scale.y = ((sin_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f;
+ this->actor.scale.y = ((Math_SinF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f;
if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) {
EnMinislime_SetupMoveToGekko(this);
} else if (this->knockbackTimer == 0) {
@@ -575,9 +576,10 @@ void EnMinislime_DefeatIdle(EnMinislime* this, PlayState* play) {
f32 xzScale;
this->idleTimer--;
- xzScale = sin_rad(this->idleTimer * (M_PI / 10));
+ xzScale = Math_SinF(this->idleTimer * (M_PI / 10));
Math_StepToF(&this->actor.scale.x, ((0.14f * xzScale) + 1.5f) * 0.1f, 0.010000001f);
- Math_StepToF(&this->actor.scale.y, ((0.07f * cos_rad(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f, 0.010000001f);
+ Math_StepToF(&this->actor.scale.y, ((0.07f * Math_CosF(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f,
+ 0.010000001f);
Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f);
if (this->idleTimer == 0) {
this->idleTimer = 20;
@@ -670,9 +672,9 @@ void EnMinislime_GekkoThrow(EnMinislime* this, PlayState* play) {
f32 xzScale;
this->throwTimer--;
- xzScale = sin_rad(this->throwTimer * (M_PI / 5));
+ xzScale = Math_SinF(this->throwTimer * (M_PI / 5));
this->actor.scale.x = ((0.3f * xzScale) + 1.5f) * 0.1f;
- this->actor.scale.y = ((cos_rad(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f;
+ this->actor.scale.y = ((Math_CosF(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f;
this->actor.scale.z = 0.3f - this->actor.scale.x;
if (this->throwTimer == 0) {
this->throwTimer = 10;
diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h
index 77cabe9b6..8d29f2b8a 100644
--- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h
+++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h
@@ -21,13 +21,13 @@ typedef enum {
/* 0x8 */ MINISLIME_DEFEAT_MELT,
/* 0x9 */ MINISLIME_DESPAWN,
/* 0xA */ MINISLIME_SETUP_GEKKO_THROW,
- /* 0xB */ MINISLIME_GEKKO_THROW,
+ /* 0xB */ MINISLIME_GEKKO_THROW
} EnMinislimeState;
typedef enum {
- /* 0x0 */ MINISLIME_INACTIVE_STATE,
- /* 0x1 */ MINISLIME_ACTIVE_CONTINUE_STATE,
- /* 0x2 */ MINISLIME_ACTIVE_INIT_STATE,
+ /* 0 */ MINISLIME_INACTIVE_STATE,
+ /* 1 */ MINISLIME_ACTIVE_CONTINUE_STATE,
+ /* 2 */ MINISLIME_ACTIVE_INIT_STATE
} EnMinislimeActiveState;
typedef struct EnMinislime {
diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
index 20f32028e..92a3ff91e 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
@@ -480,7 +480,7 @@ void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
void EnMk_Draw(Actor* thisx, PlayState* play) {
EnMk* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnMk_OverrideLimbDraw, EnMk_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c
index 4f1ddc660..16e0acbe1 100644
--- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c
+++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c
@@ -274,7 +274,7 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) {
Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer, 0x400);
}
this->actor.shape.rot.y =
- (s32)(sin_rad(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150;
+ (s32)(Math_SinF(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150;
func_800B9010(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG);
if (sp20) {
this->unk_14B &= ~2;
@@ -379,16 +379,16 @@ void func_80A4E84C(EnMkk* this) {
this->unk_154.y = this->actor.world.pos.y;
this->unk_154.x = this->actor.world.pos.x -
10.0f * Math_SinS(this->actor.shape.rot.y +
- (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5))));
this->unk_154.z = this->actor.world.pos.z -
10.0f * Math_CosS(this->actor.shape.rot.y +
- (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5))));
this->unk_160.x = this->unk_154.x -
12.0f * Math_SinS(this->actor.shape.rot.y -
- (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5))));
this->unk_160.z = this->unk_154.z -
12.0f * Math_CosS(this->actor.shape.rot.y -
- (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5))));
}
}
@@ -433,7 +433,7 @@ void EnMkk_Update(Actor* thisx, PlayState* play) {
if (this->collider.base.atFlags & AT_ON) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
- if (this->collider.base.acFlags & AT_ON) {
+ if (this->collider.base.acFlags & AC_ON) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
@@ -524,7 +524,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) {
if (this->alpha == 255) {
primColors = &D_80A4F7C4[this->primColorSelect];
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetPrimColor(&gfx[1], 0, 0xFF, primColors->r, primColors->g, primColors->b, primColors->a);
gSPSegment(&gfx[2], 0x08, D_801AEFA0);
gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -532,7 +532,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) {
POLY_OPA_DISP = &gfx[5];
}
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha);
gSPDisplayList(&gfx[2], dLists->unk0);
Matrix_ReplaceRotation(&play->billboardMtxF);
@@ -576,7 +576,7 @@ void func_80A4F4C8(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha);
gSPDisplayList(&gfx[2], dLists->unk0);
Matrix_ReplaceRotation(&play->billboardMtxF);
diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
index 67a0a1e77..a0a308ef9 100644
--- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c
+++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
@@ -211,7 +211,8 @@ void EnMm_Draw(Actor* thisx, PlayState* play) {
EnMm* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_190 != 0) {
s16 rotY = this->actor.world.rot.y - this->actor.shape.rot.y;
@@ -221,5 +222,6 @@ void EnMm_Draw(Actor* thisx, PlayState* play) {
}
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_055628);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
index 48a379304..5c6adcd8a 100644
--- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
+++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
@@ -82,7 +82,7 @@ void EnMm2_Update(Actor* thisx, PlayState* play) {
void EnMm2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sEnMm2DL);
diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c
index 366bddef3..ab387771c 100644
--- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c
+++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c
@@ -157,7 +157,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x279C, &this->actor);
this->unk_2B4 = 0x279C;
- func_80151BB4(play, 0xB);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
}
} else {
func_8019F208();
@@ -168,7 +168,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) {
func_8019F230();
Message_StartTextbox(play, 0x278F, &this->actor);
this->unk_2B4 = 0x278F;
- func_80151BB4(play, 0xB);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
}
break;
@@ -183,13 +183,13 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x279C, &this->actor);
this->unk_2B4 = 0x279C;
- func_80151BB4(play, 0xB);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
}
} else {
func_8019F230();
Message_StartTextbox(play, 0x279B, &this->actor);
this->unk_2B4 = 0x279B;
- func_80151BB4(play, 0xB);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
}
break;
}
@@ -282,7 +282,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
Message_StartTextbox(play, 0x279B, &this->actor);
this->unk_2B4 = 0x279B;
- func_80151BB4(play, 0xB);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
} else {
Message_StartTextbox(play, 0x2798, &this->actor);
this->unk_2B4 = 0x2798;
@@ -448,8 +448,8 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) {
player->stateFlags1 &= ~PLAYER_STATE1_20;
Message_StartTextbox(play, 0x2794, &this->actor);
this->unk_2B4 = 0x2794;
- func_80151BB4(play, 0xB);
- func_80151BB4(play, 0x2B);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP);
this->actor.flags &= ~ACTOR_FLAG_10000;
func_80A6F9C8(this);
} else {
@@ -561,7 +561,7 @@ void EnMm3_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A704FC[this->unk_1DC]));
gSPSegment(POLY_OPA_DISP++, 0x0C, sEnMm3DL);
diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c
index 3cbf7e2ad..732fc9b3b 100644
--- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c
+++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c
@@ -181,7 +181,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) {
void EnMs_Draw(Actor* thisx, PlayState* play) {
EnMs* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c
index c94a94b12..db05f0d61 100644
--- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c
+++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c
@@ -23,9 +23,9 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play);
void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play);
typedef enum {
- GORON_RACE_CHEAT_NO_CHEATING,
- GORON_RACE_CHEAT_FALSE_START,
- GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND,
+ /* 0 */ GORON_RACE_CHEAT_NO_CHEATING,
+ /* 1 */ GORON_RACE_CHEAT_FALSE_START,
+ /* 2 */ GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND
} PlayerCheatStatus;
ActorInit En_Mt_tag_InitVars = {
diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
index 4bf4db0e0..98b01d728 100644
--- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
+++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
@@ -851,14 +851,14 @@ void func_80A6A508(Actor* thisx) {
}
void func_80A6A5C0(EnMushi2* this, PlayState* play) {
- EnMushi2* this2 = this;
+ Actor* thisx = &this->actor;
func_80A69D3C(this);
- Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f);
if (this->unk_354 < SQ(40.0f)) {
f32 temp = 1.0f - ((SQ(40.0f) - this->unk_354) * (1.0f / (10.0f * SQ(40.0f))));
- this->actor.speed *= temp;
+ thisx->speed *= temp;
}
func_80A68ED8(this);
@@ -867,8 +867,8 @@ void func_80A6A5C0(EnMushi2* this, PlayState* play) {
func_80A69388(this);
}
- this->skelAnime.playSpeed = this->actor.speed * 1.6f;
- this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.1f, 1.9f);
+ this->skelAnime.playSpeed = thisx->speed * 1.6f;
+ this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.1f, 1.9f);
if ((this->unk_36A <= 0) || func_80A68BA0(this)) {
func_80A6B078(this);
@@ -895,9 +895,9 @@ void func_80A6A794(EnMushi2* this) {
}
void func_80A6A824(EnMushi2* this, PlayState* play) {
- EnMushi2* this2 = this;
+ Actor* thisx = &this->actor;
- Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f);
func_80A68ED8(this);
func_80A697C4(this, play);
@@ -905,8 +905,8 @@ void func_80A6A824(EnMushi2* this, PlayState* play) {
func_80A69388(this);
}
- this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f);
- this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.0f, 1.9f);
+ this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (thisx->speed * 1.2f);
+ this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.0f, 1.9f);
if ((this->unk_36A <= 0) || func_80A68BA0(this)) {
func_80A6B078(this);
@@ -1236,6 +1236,6 @@ void EnMushi2_Draw(Actor* thisx, PlayState* play) {
EnMushi2* this = THIS;
func_80A687A0(this);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL);
}
diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c
index 7c9d1e9b2..6eceb89d6 100644
--- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c
+++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c
@@ -74,7 +74,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) {
this->textIdIndex = 3;
}
- if (gSaveContext.save.day != 3 || !gSaveContext.save.isNight) {
+ if ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight) {
Actor_Kill(&this->actor);
}
} else {
@@ -113,7 +113,7 @@ void EnMuto_SetHeadRotation(EnMuto* this) {
s32 yawRotToTarget = ABS_ALT(BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y));
this->headRotTarget.y = 0;
- if (this->actor.xzDistToPlayer < 200.0f && yawRotToTarget < 0x4E20) {
+ if ((this->actor.xzDistToPlayer < 200.0f) && (yawRotToTarget < 0x4E20)) {
this->headRotTarget.y = BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y);
if (this->headRotTarget.y > 0x2710) {
this->headRotTarget.y = 0x2710;
@@ -146,7 +146,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) {
if (1) {} // Needed to match
- if (!this->isInMayorsRoom && Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) {
+ if (!this->isInMayorsRoom && (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK)) {
this->actor.textId = 0x2363;
}
@@ -229,8 +229,8 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) {
}
}
- if (play->msgCtx.currentTextId == 0x2AC6 || play->msgCtx.currentTextId == 0x2AC7 ||
- play->msgCtx.currentTextId == 0x2AC8) {
+ if ((play->msgCtx.currentTextId == 0x2AC6) || (play->msgCtx.currentTextId == 0x2AC7) ||
+ (play->msgCtx.currentTextId == 0x2AC8)) {
this->skelAnime.playSpeed = 0.0f;
this->yawTowardsTarget = this->actor.yawTowardsPlayer;
this->skelAnime.curFrame = 30.0f;
@@ -254,7 +254,7 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) {
EnMuto_SetHeadRotation(this);
}
- if (this->isInMayorsRoom && gSaveContext.save.day == 3 && gSaveContext.save.isNight) {
+ if (this->isInMayorsRoom && (gSaveContext.save.day == 3) && gSaveContext.save.isNight) {
Actor_Kill(&this->actor);
return;
}
@@ -300,7 +300,7 @@ s32 EnMuto_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void EnMuto_Draw(Actor* thisx, PlayState* play) {
EnMuto* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnMuto_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c
index c5a8b2498..79c2e5cba 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c
@@ -43,7 +43,7 @@ typedef enum EnNbScheduleResult {
/* 1 */ EN_NB_SCH_1,
/* 2 */ EN_NB_SCH_2,
/* 3 */ EN_NB_SCH_3,
- /* 4 */ EN_NB_SCH_4,
+ /* 4 */ EN_NB_SCH_4
} EnNbScheduleResult;
static u8 sScheduleScript[] = {
@@ -66,7 +66,7 @@ static u8 sScheduleScript[] = {
/* 0x3E */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1),
/* 0x41 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_2),
/* 0x44 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1),
- /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x57 - 0x4B),
+ /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x57 - 0x4B),
/* 0x4B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 18, 0, 0x54 - 0x51),
/* 0x51 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3),
/* 0x54 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1),
@@ -789,7 +789,7 @@ void EnNb_Draw(Actor* thisx, PlayState* play) {
EnNb* this = THIS;
if (this->scheduleResult != EN_NB_SCH_NONE) {
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnNb_OverrideLimbDraw, EnNb_PostLimbDraw,
EnNb_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.h b/src/overlays/actors/ovl_En_Nb/z_en_nb.h
index f11464c79..2a784e096 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.h
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.h
@@ -17,7 +17,7 @@ typedef enum EnNbAnimation {
/* 2 */ EN_NB_ANIM_TALK_ONCE,
/* 3 */ EN_NB_ANIM_TALK_LOOP,
/* 4 */ EN_NB_ANIM_ANGRY,
- /* 5 */ EN_NB_ANIM_RELIEVED,
+ /* 5 */ EN_NB_ANIM_RELIEVED
} EnNbAnimation;
typedef struct EnNb {
diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c
index 960767b11..755385d00 100644
--- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c
+++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c
@@ -57,7 +57,7 @@ typedef enum {
/* 0xC */ EN_NEO_REEBA_DMGEFF_HOOKSHOT = 0xC, // No damage, used only for hookshot
/* 0xD */ EN_NEO_REEBA_DMGEFF_ELECTRIC_STUN, // Electric effects, frozen in place
/* 0xE */ EN_NEO_REEBA_DMGEFF_NONE, // Normal hit
- /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER, // Normal hit that can break ice if leever is frozen
+ /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER // Normal hit that can break ice if leever is frozen
} EnNeoReebaDamageEffect;
static DamageTable sDamageTable = {
@@ -729,11 +729,14 @@ s32 EnNeoReeba_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
void EnNeoReeba_Draw(Actor* thisx, PlayState* play) {
EnNeoReeba* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
+
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x01, 255, 255, 255, 255);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnNeoReeba_OverrideLimbDraw, NULL,
&this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
if (this->stunTimer > 0) {
diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c
index 807bbd849..472196ae9 100644
--- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c
+++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c
@@ -87,9 +87,9 @@ void EnNimotsu_Update(Actor* thisx, PlayState* play) {
}
if ((play->state.frames % 3) == 0) {
- dustPosition.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f);
+ dustPosition.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f);
dustPosition.y = this->actor.world.pos.y;
- dustPosition.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f);
+ dustPosition.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f);
Actor_SpawnFloorDustRing(play, &this->actor, &dustPosition, 20.0f, 0, 2.0f, 0, 0, 0);
}
}
@@ -104,10 +104,11 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) {
Vec3f scale;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, &gBombShopBagDL);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
position.x = this->actor.world.pos.x + 7.0f;
position.y = this->actor.world.pos.y;
@@ -118,5 +119,6 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) {
scale.z = 0.2f;
func_800BC620(&position, &scale, 255, play);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
index bded43eda..0e96590d5 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -36,7 +36,7 @@ void EnNiw_SpawnFeather(EnNiw* this, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 s
s16 sCuccoStormActive = false;
// why wouldnt they just use actionFunc?
-enum EnNiwState {
+typedef enum EnNiwState {
/* 0 */ NIW_STATE_IDLE,
/* 1 */ NIW_STATE_ANGRY1, // 1/2/3 are stages of summoning cucco storm
/* 2 */ NIW_STATE_ANGRY2,
@@ -45,8 +45,8 @@ enum EnNiwState {
/* 5 */ NIW_STATE_FALLING,
/* 6 */ NIW_STATE_SWIMMING,
/* 7 */ NIW_STATE_RUNNING,
- /* 8 */ NIW_STATE_HOPPING,
-};
+ /* 8 */ NIW_STATE_HOPPING
+} EnNiwState;
ActorInit En_Niw_InitVars = {
ACTOR_EN_NIW,
@@ -188,6 +188,7 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) {
this->targetLimbRots[2] = 0.0f; // both wingRotZ
this->targetLimbRots[1] = 0.0f;
break;
+
case NIW_ANIM_HEAD_PECKING:
this->unkTimer24E = 3;
this->targetLimbRots[2] = 7000.0f * tempOne; // both wingRotZ
@@ -235,6 +236,9 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) {
this->targetLimbRots[7] = 10000.0f;
}
break;
+
+ default:
+ break;
}
}
@@ -271,12 +275,12 @@ void EnNiw_SpawnAttackNiw(EnNiw* this, PlayState* play) {
Vec3f newNiwPos;
Actor* attackNiw;
- if (this->attackNiwSpawnTimer == 0 && this->attackNiwCount < 7) {
+ if ((this->attackNiwSpawnTimer == 0) && (this->attackNiwCount < 7)) {
xView = play->view.at.x - play->view.eye.x;
yView = play->view.at.y - play->view.eye.y;
zView = play->view.at.z - play->view.eye.z;
newNiwPos.x = ((Rand_ZeroOne() - 0.5f) * xView) + play->view.eye.x;
- newNiwPos.y = randPlusMinusPoint5Scaled(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f));
+ newNiwPos.y = Rand_CenteredFloat(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f));
newNiwPos.z = ((Rand_ZeroOne() - 0.5f) * zView) + play->view.eye.z;
attackNiw = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ATTACK_NIW, newNiwPos.x,
newNiwPos.y, newNiwPos.z, 0, 0, 0, ATTACK_NIW_REGULAR);
@@ -312,7 +316,7 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) {
runningDirection = -runningAngles[isStormCucco];
}
- if (isStormCucco == true && (this->runAwayTimer == 0 || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) {
+ if ((isStormCucco == true) && ((this->runAwayTimer == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) {
this->runAwayTimer = 150;
if (this->yawTimer == 0) {
this->yawTimer = 70;
@@ -336,8 +340,8 @@ void EnNiw_SetupIdle(EnNiw* this) {
void EnNiw_Idle(EnNiw* this, PlayState* play) {
f32 posX2;
f32 posZ2;
- f32 posX1 = randPlusMinusPoint5Scaled(100.0f);
- f32 posZ1 = randPlusMinusPoint5Scaled(100.0f);
+ f32 posX1 = Rand_CenteredFloat(100.0f);
+ f32 posZ1 = Rand_CenteredFloat(100.0f);
s16 nextAnimIndex;
if (this->niwType == NIW_TYPE_REGULAR) {
@@ -367,7 +371,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) {
Math_ApproachF(&this->targetLimbRots[9], sHeadRotations[this->headRotationToggle], 0.5f, 4000.0f); // head rot
}
- if (this->unkIdleTimer2 == 0 && this->unkIdleTimer == 0) {
+ if ((this->unkIdleTimer2 == 0) && (this->unkIdleTimer == 0)) {
this->unk298++;
if (this->unk298 > 7) {
this->unkIdleTimer2 = Rand_ZeroFloat(30.0f);
@@ -434,9 +438,9 @@ void EnNiw_Held(EnNiw* this, PlayState* play) {
this->heldTimer = (s32)(Rand_ZeroFloat(1.0f) * 10.0f) + 10;
}
- this->actor.shape.rot.x = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.x;
- this->actor.shape.rot.y = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.y;
- this->actor.shape.rot.z = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.z;
+ this->actor.shape.rot.x = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.x;
+ this->actor.shape.rot.y = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.y;
+ this->actor.shape.rot.z = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.z;
if (this->niwType == NIW_TYPE_REGULAR) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.shape.rot.z = 0;
@@ -469,14 +473,14 @@ void EnNiw_Held(EnNiw* this, PlayState* play) {
void EnNiw_Thrown(EnNiw* this, PlayState* play) {
if (this->unk2EC == 0) {
- if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- this->unk2EC = 1;
- this->hoppingTimer = 80; // hop timer
- this->actor.speed = 0.0f;
- this->actor.velocity.y = 4.0f;
- } else {
- return; // wait until back on floor
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ // wait until back on floor
+ return;
}
+ this->unk2EC = 1;
+ this->hoppingTimer = 80;
+ this->actor.speed = 0.0f;
+ this->actor.velocity.y = 4.0f;
} else {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->sfxTimer1 = 0;
@@ -683,10 +687,10 @@ void EnNiw_LandBeforeIdle(EnNiw* this, PlayState* play) {
}
void EnNiw_CheckRage(EnNiw* this, PlayState* play) {
- if (!this->isStormActive && this->iframeTimer == 0 && this->niwType == NIW_TYPE_REGULAR) {
+ if (!this->isStormActive && (this->iframeTimer == 0) && (this->niwType == NIW_TYPE_REGULAR)) {
// is this used? this is before we even know if we've been hit
- if (this->niwState != NIW_STATE_RUNNING && this->unk2BC.x != 90000.0f) {
+ if ((this->niwState != NIW_STATE_RUNNING) && (this->unk2BC.x != 90000.0f)) {
this->iframeTimer = 10;
this->sfxTimer1 = 30;
this->unk29E = 1;
@@ -703,7 +707,7 @@ void EnNiw_CheckRage(EnNiw* this, PlayState* play) {
this->actor.colChkInfo.health--;
}
- if (!sCuccoStormActive && this->actor.colChkInfo.health == 0) {
+ if (!sCuccoStormActive && (this->actor.colChkInfo.health == 0)) {
this->runAwayTimer = 100; // main cucco will run away after storm starts
sCuccoStormActive = true;
this->unk298 = 0;
@@ -769,21 +773,21 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
featherCount = 4;
}
for (i = 0; i < featherCount; i++) {
- pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x;
- pos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + this->unk308);
- pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z;
+ pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x;
+ pos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + this->unk308);
+ pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z;
featherScale = Rand_ZeroFloat(6.0f) + 6.0f;
- if (this->unk29E == 2 && this->unk308 != 0) {
+ if ((this->unk29E == 2) && (this->unk308 != 0)) {
pos.y += 10.0f;
}
if (this->unk308 == 0) {
featherScale = Rand_ZeroFloat(2.0f) + 2.0f;
}
- vel.x = randPlusMinusPoint5Scaled(3.0f);
+ vel.x = Rand_CenteredFloat(3.0f);
vel.y = Rand_ZeroFloat(2.0f) * 0.5f + 2.0f;
- vel.z = randPlusMinusPoint5Scaled(3.0f);
+ vel.z = Rand_CenteredFloat(3.0f);
accel.z = accel.x = 0.0f;
accel.y = -0.15f;
@@ -817,7 +821,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
// if cucco is off the map
- if (this->actor.floorHeight <= BGCHECK_Y_MIN || this->actor.floorHeight >= BGCHECK_Y_MAX) {
+ if ((this->actor.floorHeight <= BGCHECK_Y_MIN) || (this->actor.floorHeight >= BGCHECK_Y_MAX)) {
Vec3f viewAtToEye;
// Direction vector for the direction the camera is facing
@@ -881,12 +885,12 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
return;
}
- if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && player->invincibilityTimer == 0) {
+ if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && (player->invincibilityTimer == 0)) {
func_800B8D50(play, &this->actor, 2.0f, this->actor.world.rot.y, 0.0f, 0x10);
}
EnNiw_CheckRage(this, play);
- if (this->flutterSfxTimer == 0 && this->niwState == NIW_STATE_HELD) {
+ if ((this->flutterSfxTimer == 0) && (this->niwState == NIW_STATE_HELD)) {
this->flutterSfxTimer = 7;
Actor_PlaySfx(&this->actor, NA_SE_EN_CHICKEN_FLUTTER);
}
@@ -901,13 +905,13 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
}
}
- if (!this->isStormActive && this->niwType == NIW_TYPE_REGULAR) {
+ if (!this->isStormActive && (this->niwType == NIW_TYPE_REGULAR)) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
if (play) {}
- if (this->niwState != NIW_STATE_HELD && this->niwState != NIW_STATE_FALLING) {
+ if ((this->niwState != NIW_STATE_HELD) && (this->niwState != NIW_STATE_FALLING)) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
}
@@ -938,7 +942,7 @@ s32 EnNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnNiw_Draw(Actor* thisx, PlayState* play) {
EnNiw* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount,
EnNiw_OverrideLimbDraw, NULL, &this->actor);
EnNiw_DrawFeathers(this, play);
@@ -1002,7 +1006,8 @@ void EnNiw_DrawFeathers(EnNiw* this, PlayState* play) {
s16 i;
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->feathers); i++, feather++) {
if (feather->isEnabled == true) {
diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.h b/src/overlays/actors/ovl_En_Niw/z_en_niw.h
index c60397535..06f487800 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.h
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.h
@@ -106,7 +106,7 @@ typedef enum {
/* 2 */ NIW_ANIM_PECKING_AND_WAVING, // wings move along their axis, like human hand waving
/* 3 */ NIW_ANIM_PECKING_AND_FORFLAPPING, // (unused) low (yaw based) flapping, forward and back
/* 4 */ NIW_ANIM_FREEZE, // used during Cucco Storm
- /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING, // wing speed half that of 3
+ /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING // wing speed half that of 3
} EnNiwHeadAndWingAnimationState;
diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c
index 0187e1c88..3b2659d1e 100644
--- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c
+++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c
@@ -107,7 +107,7 @@ void EnNnh_Draw(Actor* thisx, PlayState* play) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
s32 pad;
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyOpa.p++, gButlerSonMainBodyDL);
}
diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
index 9c6fe4a9d..f8673c307 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -80,7 +80,7 @@ void EnNutsball_Destroy(Actor* thisx, PlayState* play) {
}
void EnNutsball_InitColliderParams(EnNutsball* this) {
- this->collider.base.atFlags &= ~AT_TYPE_ENEMY & ~AT_BOUNCED & ~AT_HIT;
+ this->collider.base.atFlags &= ~(AT_HIT | AT_TYPE_ENEMY | AT_BOUNCED);
this->collider.base.atFlags |= AT_TYPE_PLAYER;
this->collider.info.toucher.dmgFlags = 0x400000;
this->collider.info.toucher.damage = 2;
@@ -173,10 +173,12 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) {
EnNutsball* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZS(this->actor.home.rot.z, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_058BA0);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
index b11e8c408..ab77eb2a3 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
@@ -32,14 +32,14 @@ void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play);
s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
EnHs* EnNwc_FindGrog(PlayState* play);
-enum EnNiwState {
- /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw
- /* 0 */ NWC_STATE_CHECK_BREMAN = 0, // checking for breman mask
- /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore
- /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore
- /* 3 */ NWC_STATE_FOLLOWING, // following the player
- /* 4 */ NWC_STATE_RUNNING, // running from the player after failed breman march
-};
+typedef enum EnNwcState {
+ /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw
+ /* 0 */ NWC_STATE_CHECK_BREMAN, // checking for breman mask
+ /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore
+ /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore
+ /* 3 */ NWC_STATE_FOLLOWING, // following the player
+ /* 4 */ NWC_STATE_RUNNING // running from the player after failed breman march
+} EnNwcState;
ActorInit En_Nwc_InitVars = {
ACTOR_EN_NWC,
@@ -110,9 +110,9 @@ void EnNwc_SpawnDust(EnNwc* this, PlayState* play) {
vec5.z = this->actor.world.pos.z - 5.0f * Math_CosS(yaw) * Math_CosS(pitch);
for (i = 0; i < 5; i++) {
- vel.x = randPlusMinusPoint5Scaled(4.0f);
- vel.y = randPlusMinusPoint5Scaled(4.0f);
- vel.z = randPlusMinusPoint5Scaled(4.0f);
+ vel.x = Rand_CenteredFloat(4.0f);
+ vel.y = Rand_CenteredFloat(4.0f);
+ vel.z = Rand_CenteredFloat(4.0f);
accel.x = -vel.x * 0.1f;
accel.y = -vel.y * 0.1f;
accel.z = -vel.z * 0.1f;
@@ -164,7 +164,7 @@ s32 EnNwc_IsFound(EnNwc* this, PlayState* play) {
return false;
}
- if ((player->stateFlags3 & PLAYER_STATE3_20000000) && this->actor.xzDistToPlayer < 100.0f) {
+ if ((player->stateFlags3 & PLAYER_STATE3_20000000) && (this->actor.xzDistToPlayer < 100.0f)) {
return true;
}
@@ -178,26 +178,34 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) {
this->stateTimer = 10;
this->actionFunc = EnNwc_CheckForBreman;
break;
+
case NWC_STATE_TURNING:
this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f;
this->actionFunc = EnNwc_Turn;
- this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(65536.0f);
+ this->fallingRotY = (s16)(s32)Rand_CenteredFloat(0x10000);
break;
+
case NWC_STATE_HOPPING_FORWARD:
this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f;
this->actionFunc = EnNwc_HopForward;
break;
+
case NWC_STATE_FOLLOWING:
this->actionFunc = EnNwc_Follow;
this->transformTimer = 0;
- this->randomRot = (s16)(s32)randPlusMinusPoint5Scaled(10000.0f);
+ this->randomRot = (s16)(s32)Rand_CenteredFloat(0x2710);
break;
+
case NWC_STATE_RUNNING:
- this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF; // Fake Match?: & 0xFFFF
+ //! FAKE: & 0xFFFF
+ this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->stateTimer = Rand_ZeroFloat(40.0f) + 120.0f;
this->actionFunc = EnNwc_RunAway;
break;
+
+ default:
+ break;
}
this->state = newState;
@@ -289,7 +297,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
Math_SmoothStepToS(&this->upperBodyRotY, targetUpperBodyRot, 2, 0x1B58, 0x3E8);
} else { // NOT grown up
- if ((this->stateTimer & 3) == 3 && this->stateTimer & 20) {
+ if (((this->stateTimer & 3) == 3) && ((this->stateTimer & 0x14) != 0)) {
this->actor.velocity.y = 2.0f; // hop up and down
}
if ((this->stateTimer & 0x1B) == 24) {
@@ -297,8 +305,8 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
}
}
- if (this->grog->actor.home.rot.z >= 20 && // all 10 chicks have been found
- (this->hasGrownUp & 1) == false) {
+ if ((this->grog->actor.home.rot.z >= 20) && // all 10 chicks have been found
+ !(this->hasGrownUp & 1)) {
this->transformTimer += 2;
if (this->transformTimer >= (s32)(s16)((this->actor.home.rot.z * 0x1E) + 0x1E)) {
// it is our turn to transform
@@ -323,7 +331,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
}
} else { // not too close: keep moving
- this->randomRot += (s16)randPlusMinusPoint5Scaled(1500.0f);
+ this->randomRot += (s16)(s32)Rand_CenteredFloat(0x5DC);
if (this->randomRot > 0x1388) {
this->randomRot = 0x1388;
} else if (this->randomRot < -0x1388) {
@@ -473,7 +481,7 @@ void EnNwc_Update(Actor* thisx, PlayState* play) {
this->blinkTimer = Rand_S16Offset(0x3C, 0x3C);
}
- if (this->blinkTimer == 1 || this->blinkTimer == 3) {
+ if ((this->blinkTimer == 1) || (this->blinkTimer == 3)) {
this->blinkState = true;
} else {
this->blinkState = false;
@@ -487,7 +495,7 @@ void EnNwc_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
dispHead = POLY_OPA_DISP;
@@ -508,7 +516,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
if (limbIndex == NIW_LIMB_UPPER_BODY) {
rot->y += this->upperBodyRotY;
}
- if (limbIndex == NIW_LIMB_RIGHT_WING_ROOT || limbIndex == NIW_LIMB_LEFT_WING_ROOT) {
+ if ((limbIndex == NIW_LIMB_RIGHT_WING_ROOT) || (limbIndex == NIW_LIMB_LEFT_WING_ROOT)) {
rot->y += this->footRotY;
rot->z += this->footRotZ;
}
@@ -519,7 +527,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play) {
EnNwc* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->niwSkeleton.skeleton, this->niwSkeleton.jointTable, this->niwSkeleton.dListCount,
EnNwc_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c
index 3f10f6771..9867cb963 100644
--- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c
+++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c
@@ -118,9 +118,9 @@ void func_80BF5E68(EnOsk* this, AnimationHeader** animations, s16 index, f32 pla
void func_80BF5EBC(EnOsk* this, PlayState* play) {
Vec3f sp2C;
- sp2C.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x;
- sp2C.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z;
- sp2C.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.y;
+ sp2C.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x;
+ sp2C.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z;
+ sp2C.y = Rand_CenteredFloat(30.0f) + this->actor.world.pos.y;
func_800B3030(play, &sp2C, &D_80BF7018, &D_80BF7018, 100, 0, 2);
}
@@ -423,7 +423,7 @@ void func_80BF68E0(EnOsk* this) {
break;
case 5:
- if ((Animation_OnFrame(&this->skelAnime, 6.0f)) || Animation_OnFrame(&this->skelAnime, 11.0f)) {
+ if (Animation_OnFrame(&this->skelAnime, 6.0f) || Animation_OnFrame(&this->skelAnime, 11.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
@@ -512,7 +512,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_PrimColor(play->state.gfxCtx, 0x80, 255, 255, 255, 255));
@@ -536,13 +536,13 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) {
Matrix_Translate(this->actor.focus.pos.x + sp80.x, this->actor.focus.pos.y + sp80.y,
sp80.z = this->actor.focus.pos.z + sp80.z, MTXMODE_NEW);
- sp80.z = Math_SinS(play->gameplayFrames << 0xE);
+ sp80.z = Math_SinS(play->gameplayFrames * 0x4000);
sp80.z = ((sp80.z + 1.0f) * 0.1f) + 2.0f;
Matrix_Scale(this->actor.scale.x * sp80.z, this->actor.scale.y * sp80.z, this->actor.scale.z * sp80.z,
MTXMODE_APPLY);
}
- gfx = func_8012C868(POLY_XLU_DISP);
+ gfx = Gfx_SetupDL20_NoCD(POLY_XLU_DISP);
gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080);
if (1) {}
diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c
index 6cc29578a..f209caa1c 100644
--- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c
+++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c
@@ -869,9 +869,9 @@ void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) {
}
if ((this->animIndex == OSN_ANIM_WALK_AWAY) &&
- (((Animation_OnFrame(&this->skelAnime, 17.0f))) || (Animation_OnFrame(&this->skelAnime, 27.0f)) ||
- (Animation_OnFrame(&this->skelAnime, 37.0f)) || (Animation_OnFrame(&this->skelAnime, 47.0f)) ||
- (Animation_OnFrame(&this->skelAnime, 57.0f)) || (Animation_OnFrame(&this->skelAnime, 67.0f)))) {
+ (Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 27.0f) ||
+ Animation_OnFrame(&this->skelAnime, 37.0f) || Animation_OnFrame(&this->skelAnime, 47.0f) ||
+ Animation_OnFrame(&this->skelAnime, 57.0f) || Animation_OnFrame(&this->skelAnime, 67.0f))) {
Actor_PlaySfx(&this->actor, NA_SE_EV_OMENYA_WALK);
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
@@ -1037,7 +1037,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->alpha == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if ((this->animIndex == OSN_ANIM_CHOKE) || (this->animIndex == OSN_ANIM_DESPAIR) ||
(this->animIndex == OSN_ANIM_HAND_OUT_2) || (play->msgCtx.currentTextId == 0x1FCA)) {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeOpenTex));
@@ -1056,7 +1056,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnOsn_OverrideLimbDraw, EnOsn_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeClosedHappyTex));
gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(sSmileTex));
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha);
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 2444acca5..7ada3a223 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -198,7 +198,7 @@ void EnOssan_SetupAction(EnOssan* this, EnOssanActionFunc action) {
s32 EnOssan_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) {
+ if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -210,7 +210,7 @@ void EnOssan_CheckValidSpawn(EnOssan* this) {
switch (gSaveContext.save.day) {
case 1:
case 2:
- if (gSaveContext.save.time <= CLOCK_TIME(21, 30) && gSaveContext.save.time > CLOCK_TIME(6, 00)) {
+ if ((gSaveContext.save.time <= CLOCK_TIME(21, 30)) && (gSaveContext.save.time > CLOCK_TIME(6, 00))) {
if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) {
Actor_Kill(&this->actor);
}
@@ -218,16 +218,20 @@ void EnOssan_CheckValidSpawn(EnOssan* this) {
Actor_Kill(&this->actor);
}
break;
+
case 3:
if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) {
Actor_Kill(&this->actor);
}
- if (!(gSaveContext.save.time <= CLOCK_TIME(22, 00) && gSaveContext.save.time >= CLOCK_TIME(6, 00))) {
+ if ((gSaveContext.save.time > CLOCK_TIME(22, 00)) || (gSaveContext.save.time < CLOCK_TIME(6, 00))) {
if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) {
Actor_Kill(&this->actor);
}
}
break;
+
+ default:
+ break;
}
}
@@ -377,9 +381,9 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) {
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
}
} else {
- if (this->actor.xzDistToPlayer < 100.0f &&
- (player->actor.world.pos.x >= -40.0f && player->actor.world.pos.x <= 40.0f) &&
- (player->actor.world.pos.z >= -91.0f && player->actor.world.pos.z <= -60.0f)) {
+ if ((this->actor.xzDistToPlayer < 100.0f) && (player->actor.world.pos.x >= -40.0f) &&
+ (player->actor.world.pos.x <= 40.0f) && (player->actor.world.pos.z >= -91.0f) &&
+ (player->actor.world.pos.z <= -60.0f)) {
func_800B8614(&this->actor, play, 100.0f);
}
if (this->actor.params == ENOSSAN_PART_TIME_WORKER) {
@@ -411,11 +415,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) {
this->animIndex = FSN_ANIM_TURN_AROUND_FORWARD;
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_FORWARD);
break;
+
case FSN_ANIM_TURN_AROUND_FORWARD:
EnOssan_SetHaveMet(this);
this->textId = EnOssan_CuriosityShopMan_GetWelcome(this, play);
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, this->animIndex);
break;
+
case FSN_ANIM_HANDS_ON_COUNTER_START:
case FSN_ANIM_HAND_ON_FACE_START:
case FSN_ANIM_LEAN_FORWARD_START:
@@ -425,6 +431,7 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) {
Message_StartTextbox(play, this->textId, &this->actor);
EnOssan_SetupStartShopping(play, this, false);
break;
+
case FSN_ANIM_HANDS_ON_COUNTER_LOOP:
case FSN_ANIM_HAND_ON_FACE_LOOP:
case FSN_ANIM_LEAN_FORWARD_LOOP:
@@ -432,11 +439,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) {
this->animIndex = FSN_ANIM_TURN_AROUND_REVERSE;
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_REVERSE);
break;
+
case FSN_ANIM_TURN_AROUND_REVERSE:
this->animIndex = FSN_ANIM_SCRATCH_BACK;
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK);
EnOssan_SetupAction(this, EnOssan_Idle);
break;
+
default:
this->animIndex = FSN_ANIM_SCRATCH_BACK;
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK);
@@ -459,11 +468,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) {
this->moveHorizontal = this->moveVertical = false;
if (this->stickAccumX == 0) {
- if (stickX > 30 || stickX < -30) {
+ if ((stickX > 30) || (stickX < -30)) {
this->stickAccumX = stickX;
this->moveHorizontal = true;
}
- } else if (stickX <= 30 && stickX >= -30) {
+ } else if ((stickX <= 30) && (stickX >= -30)) {
this->stickAccumX = 0;
} else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions
this->stickAccumX = stickX;
@@ -477,11 +486,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) {
}
}
if (this->stickAccumY == 0) {
- if (stickY > 30 || stickY < -30) {
+ if ((stickY > 30) || (stickY < -30)) {
this->stickAccumY = stickY;
this->moveVertical = true;
}
- } else if (stickY <= 30 && stickY >= -30) {
+ } else if ((stickY <= 30) && (stickY >= -30)) {
this->stickAccumY = 0;
} else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions
this->stickAccumY = stickY;
@@ -533,9 +542,9 @@ u8 EnOssan_SetCursorIndexFromNeutral(EnOssan* this, u8 shelfOffset) {
u8 EnOssan_CursorRight(EnOssan* this, u8 cursorIndex, u8 shelfSlotMin) {
u8 end = shelfSlotMin + 4;
- while (cursorIndex >= shelfSlotMin && cursorIndex < end) {
+ while ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) {
cursorIndex -= 2;
- if (cursorIndex >= shelfSlotMin && cursorIndex < end) {
+ if ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) {
if (this->items[cursorIndex] != NULL) {
return cursorIndex;
}
@@ -607,12 +616,15 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) {
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
return true;
+
case 1:
func_8019F230();
EnOssan_EndInteraction(play, this);
return true;
+
+ default:
+ return false;
}
- return false;
}
void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
@@ -656,7 +668,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
return;
}
}
- if (this->actor.params == ENOSSAN_PART_TIME_WORKER && player->transformation != PLAYER_FORM_ZORA) {
+ if ((this->actor.params == ENOSSAN_PART_TIME_WORKER) && (player->transformation != PLAYER_FORM_ZORA)) {
Math_SmoothStepToS(&this->partTimerHeadRot.y, 8000, 3, 2000, 0);
}
}
@@ -871,7 +883,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) {
}
}
} else {
- if (this->stickAccumX > 0 && this->stickAccumX > 500) {
+ if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) {
cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 4);
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
@@ -879,7 +891,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) {
EnOssan_SetupLookToShopkeeperFromShelf(play, this);
return;
}
- } else if (this->stickAccumX < 0 && this->stickAccumX < -500) {
+ } else if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) {
cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 8);
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
@@ -929,7 +941,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) {
}
}
} else {
- if (this->stickAccumX < 0 && this->stickAccumX < -500) {
+ if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) {
cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 0);
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
@@ -937,7 +949,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) {
EnOssan_SetupLookToShopkeeperFromShelf(play, this);
return;
}
- } else if (this->stickAccumX > 0 && this->stickAccumX > 500) {
+ } else if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) {
cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4);
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
@@ -1016,6 +1028,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) {
this->shopItemSelectedTween = 0.0f;
item->boughtFunc(play, item);
break;
+
case CANBUY_RESULT_SUCCESS_2:
func_8019F208();
item->buyFunc(play, item);
@@ -1024,27 +1037,35 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) {
this->shopItemSelectedTween = 0.0f;
item->boughtFunc(play, item);
break;
+
case CANBUY_RESULT_NO_ROOM:
case CANBUY_RESULT_NO_ROOM_2:
play_sound(NA_SE_SY_ERROR);
EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]);
break;
+
case CANBUY_RESULT_NEED_EMPTY_BOTTLE:
play_sound(NA_SE_SY_ERROR);
EnOssan_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->actor.params]);
break;
+
case CANBUY_RESULT_NEED_RUPEES:
play_sound(NA_SE_SY_ERROR);
EnOssan_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->actor.params]);
break;
+
case CANBUY_RESULT_CANNOT_GET_NOW_2:
play_sound(NA_SE_SY_ERROR);
EnOssan_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->actor.params]);
break;
+
case CANBUY_RESULT_CANNOT_GET_NOW:
play_sound(NA_SE_SY_ERROR);
EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]);
break;
+
+ default:
+ break;
}
}
@@ -1058,11 +1079,15 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) {
case 0:
EnOssan_HandleCanBuyItem(play, this);
break;
+
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
break;
+
+ default:
+ break;
}
}
}
@@ -1134,6 +1159,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) {
EnOssan_SetupStartShopping(play, this, true);
func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1);
break;
+
case 1:
default:
func_8019F230();
@@ -1142,7 +1168,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) {
}
}
}
- } else if (talkState == TEXT_STATE_5 && Message_ShouldAdvance(play)) {
+ } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
EnOssan_ResetItemPosition(this);
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
@@ -1241,11 +1267,11 @@ void EnOssan_UpdateItemSelectedProperty(EnOssan* this) {
for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) {
item = *items;
if (item != NULL) {
- if (this->actionFunc != EnOssan_SelectItem && this->actionFunc != EnOssan_CannotBuy &&
- this->drawCursor == 0) {
+ if ((this->actionFunc != EnOssan_SelectItem) && (this->actionFunc != EnOssan_CannotBuy) &&
+ (this->drawCursor == 0)) {
item->isSelected = false;
} else {
- item->isSelected = this->cursorIndex == i ? true : false;
+ item->isSelected = (this->cursorIndex == i) ? true : false;
}
}
}
@@ -1383,6 +1409,7 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) {
this->flags |= END_INTERACTION;
return textId;
}
+
switch (player->transformation) {
case PLAYER_FORM_DEKU:
this->animIndex = FSN_ANIM_SLAM_COUNTER_START;
@@ -1390,21 +1417,25 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) {
return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
+
case PLAYER_FORM_ZORA:
this->animIndex = FSN_ANIM_LEAN_FORWARD_START;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_08)) {
return sWelcomeZoraTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
return sWelcomeZoraFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
+
case PLAYER_FORM_GORON:
this->animIndex = FSN_ANIM_HAND_ON_FACE_START;
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) {
return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
+
+ default:
+ this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START;
+ return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
- this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START;
- return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) {
@@ -1415,24 +1446,29 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) {
this->flags |= END_INTERACTION;
return textId;
}
+
switch (player->transformation) {
case PLAYER_FORM_DEKU:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) {
return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
+
case PLAYER_FORM_ZORA:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) {
return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
+
case PLAYER_FORM_GORON:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) {
return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
+
+ default:
+ return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER];
}
- return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER];
}
void EnOssan_SetHaveMet(EnOssan* this) {
@@ -1440,21 +1476,29 @@ void EnOssan_SetHaveMet(EnOssan* this) {
case 0x06A9:
SET_WEEKEVENTREG(WEEKEVENTREG_18_10);
break;
+
case 0x06C6:
SET_WEEKEVENTREG(WEEKEVENTREG_55_10);
break;
+
case 0x06A7:
SET_WEEKEVENTREG(WEEKEVENTREG_18_08);
break;
+
case 0x06C4:
SET_WEEKEVENTREG(WEEKEVENTREG_55_08);
break;
+
case 0x06A5:
SET_WEEKEVENTREG(WEEKEVENTREG_18_04);
break;
+
case 0x06C2:
SET_WEEKEVENTREG(WEEKEVENTREG_55_04);
break;
+
+ default:
+ break;
}
}
@@ -1575,7 +1619,7 @@ void EnOssan_DrawCursor(PlayState* play, EnOssan* this, f32 x, f32 y, f32 z, u8
OPEN_DISPS(play->state.gfxCtx);
if (drawCursor != 0) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b,
this->cursorColor.a);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP,
@@ -1637,7 +1681,7 @@ void EnOssan_DrawStickDirectionPrompts(PlayState* play, EnOssan* this) {
OPEN_DISPS(play->state.gfxCtx);
if (drawStickRightPrompt || drawStickLeftPrompt) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD,
@@ -1698,7 +1742,8 @@ s32 EnOssan_PartTimer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dLi
void EnOssan_CuriosityShopMan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnOssan* this = THIS;
- if (limbIndex == FSN_LIMB_PELVIS || limbIndex == FSN_LIMB_LEFT_UPPER_ARM || limbIndex == FSN_LIMB_RIGHT_UPPER_ARM) {
+ if ((limbIndex == FSN_LIMB_PELVIS) || (limbIndex == FSN_LIMB_LEFT_UPPER_ARM) ||
+ (limbIndex == FSN_LIMB_RIGHT_UPPER_ARM)) {
rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200;
rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200;
}
@@ -1720,7 +1765,7 @@ void EnOssan_CuriosityShopMan_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnOssan_CuriosityShopMan_OverrideLimbDraw, EnOssan_CuriosityShopMan_PostLimbDraw,
@@ -1738,7 +1783,7 @@ void EnOssan_PartTimer_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnOssan_PartTimer_OverrideLimbDraw, EnOssan_PartTimer_PostLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c
index a4d820364..137829cf5 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c
@@ -4,6 +4,7 @@
* Description: Seahorse
*/
+#include "prevent_bss_reordering.h"
#include "z_en_ot.h"
#include "objects/object_ot/object_ot.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -670,6 +671,9 @@ void func_80B5CD40(EnOt* this, PlayState* play) {
func_80B5CE6C(this, play);
}
break;
+
+ default:
+ break;
}
}
@@ -1031,8 +1035,8 @@ void EnOt_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25);
- POLY_XLU_DISP = func_8012C2B4(POLY_XLU_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
+ POLY_XLU_DISP = Gfx_SetupDL71(POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx);
@@ -1044,7 +1048,7 @@ void EnOt_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- gfx = func_8012C7FC(POLY_XLU_DISP);
+ gfx = Gfx_SetupDL65_NoCD(POLY_XLU_DISP);
gDPSetDither(&gfx[0], G_CD_NOISE);
gDPSetCombineLERP(&gfx[1], 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE,
@@ -1139,24 +1143,25 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) {
OPEN_DISPS(play->state.gfxCtx);
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
for (i = 0; i < arg2; i++, arg1++) {
- if (arg1->unk_00) {
- if (!flag) {
- gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000040);
- flag = true;
- if (play) {}
- }
-
- Matrix_Translate(arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z, MTXMODE_NEW);
- Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY);
- Matrix_Scale(arg1->unk_04, arg1->unk_04, arg1->unk_04, MTXMODE_APPLY);
-
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex));
- gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000078);
+ if (arg1->unk_00 == 0) {
+ continue;
}
+
+ if (!flag) {
+ gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000040);
+ flag = true;
+ }
+
+ Matrix_Translate(arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z, MTXMODE_NEW);
+ Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY);
+ Matrix_Scale(arg1->unk_04, arg1->unk_04, arg1->unk_04, MTXMODE_APPLY);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex));
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000078);
}
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
index f71d227f6..c23fb3148 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -44,8 +44,8 @@ void EnOwl_ChangeMode(EnOwl* this, EnOwlActionFunc actionFunc, EnOwlFunc unkFunc
AnimationHeader* animation, f32 morphFrames);
typedef enum {
- /* 0x00 */ OWL_REPEAT,
- /* 0x01 */ OWL_OK
+ /* 0 */ OWL_REPEAT,
+ /* 1 */ OWL_OK
} EnOwlMessageChoice;
ActorInit En_Owl_InitVars = {
@@ -169,6 +169,9 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
return;
}
break;
+
+ default:
+ break;
}
this->unk_3DA = 0;
@@ -271,7 +274,7 @@ void func_8095AB1C(EnOwl* this, PlayState* play) {
}
void func_8095AB4C(EnOwl* this) {
- if (randPlusMinusPoint5Scaled(1.0f) < 0.0f) {
+ if (Rand_CenteredFloat(1.0f) < 0.0f) {
this->actionFlags |= 0x20;
} else {
this->actionFlags &= ~0x20;
@@ -335,6 +338,9 @@ void func_8095AD54(EnOwl* this, PlayState* play) {
Message_ContinueTextbox(play, 0x7D3);
this->actionFunc = func_8095ABF0;
break;
+
+ default:
+ break;
}
}
}
@@ -379,6 +385,9 @@ void func_8095AF2C(EnOwl* this, PlayState* play) {
func_8095ACEC(this);
this->actionFunc = func_8095ABF0;
break;
+
+ default:
+ break;
}
}
@@ -625,6 +634,9 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
func_8019F230();
Message_ContinueTextbox(play, 0xBEF);
break;
+
+ default:
+ break;
}
break;
@@ -633,14 +645,20 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
case 0:
func_8019F208();
Message_ContinueTextbox(play, 0xBF4);
- return;
+ break;
case 1:
func_8019F230();
Message_ContinueTextbox(play, 0xBF3);
- return;
+ break;
+
+ default:
+ break;
}
break;
+
+ default:
+ break;
}
}
break;
@@ -703,9 +721,15 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
this->actionFlags |= 8;
func_8095ACEC(this);
break;
+
+ default:
+ break;
}
}
break;
+
+ default:
+ break;
}
}
@@ -897,168 +921,179 @@ void EnOwl_Update(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- if (this->actor.update != NULL) {
- if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) {
- Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
+ if (this->actor.update == NULL) {
+ return;
+ }
+
+ if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
+ }
+
+ if (this->actionFlags & 2) {
+ this->eyeTexIndex = 2;
+ } else {
+ if (DECR(this->blinkTimer) == 0) {
+ this->blinkTimer = Rand_S16Offset(60, 60);
}
-
- if (this->actionFlags & 2) {
- this->eyeTexIndex = 2;
- } else {
- if (DECR(this->blinkTimer) == 0) {
- this->blinkTimer = Rand_S16Offset(60, 60);
- }
- this->eyeTexIndex = this->blinkTimer;
- if (this->eyeTexIndex >= 3) {
- this->eyeTexIndex = 0;
- }
+ this->eyeTexIndex = this->blinkTimer;
+ if (this->eyeTexIndex >= 3) {
+ this->eyeTexIndex = 0;
}
+ }
- if (!(this->actionFlags & 8)) {
- sp36 = 0;
+ if (!(this->actionFlags & 8)) {
+ sp36 = 0;
- if (this->actionFlags & 0x10) {
- switch (this->unk_408) {
- case 0:
- this->unk_408 = 1;
- this->unk_409 = 6;
- break;
+ if (this->actionFlags & 0x10) {
+ switch (this->unk_408) {
+ case 0:
+ this->unk_408 = 1;
+ this->unk_409 = 6;
+ break;
- case 1:
- this->unk_409--;
- if (this->unk_409 != 0) {
- sp36 = Math_CosS(this->unk_409 * 0x2000) * 0x1000;
+ case 1:
+ this->unk_409--;
+ if (this->unk_409 != 0) {
+ sp36 = Math_CosS(this->unk_409 * 0x2000) * 0x1000;
+ } else {
+ if (this->actionFlags & 2) {
+ this->unk_3DA = 0;
} else {
- if (this->actionFlags & 2) {
- this->unk_3DA = 0;
- } else {
- this->unk_3DA = 0x20;
- }
-
- if (this->actionFlags & 0x20) {
- this->unk_3DA -= 4;
- } else {
- this->unk_3DA += 4;
- }
- this->unk_408++;
+ this->unk_3DA = 0x20;
}
if (this->actionFlags & 0x20) {
- sp36 = -sp36;
- }
- break;
-
- case 2:
- if (func_8095C510(this)) {
- this->actionFlags &= ~0x10;
- this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
- this->unk_408 = 0;
- func_8095AB4C(this);
- }
- break;
- }
- } else {
- if (this->unk_40A > 0) {
- this->unk_40A--;
- } else {
- if (this->unk_408 == 0) {
- if (Rand_ZeroOne() < 0.3f) {
- this->unk_408 = 4;
- this->unk_409 = 12;
+ this->unk_3DA -= 4;
} else {
- this->unk_408 = 1;
- this->unk_409 = 4;
+ this->unk_3DA += 4;
}
- }
- this->unk_409--;
-
- switch (this->unk_408) {
- case 1:
- sp36 = Math_SinS((-this->unk_409 * 0x1000) + 0x4000) * 5000.0f;
- if (this->unk_409 <= 0) {
- this->unk_409 = (s32)(Rand_ZeroFloat(15.0f) + 5.0f);
- this->unk_408 = 2;
- }
- break;
-
- case 2:
- sp36 = 0x1388;
- if (this->unk_409 <= 0) {
- this->unk_408 = 3;
- this->unk_409 = 4;
- }
- break;
-
- case 3:
- sp36 = Math_SinS(this->unk_409 * 0x1000) * 5000.0f;
- if (this->unk_409 <= 0) {
- this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
- this->unk_408 = 0;
- func_8095AB4C(this);
- }
- break;
-
- case 4:
- sp36 = Math_SinS(this->unk_409 * 0x2000) * 5000.0f;
- if (this->unk_409 <= 0) {
- this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
- this->unk_408 = 0;
- func_8095AB4C(this);
- }
- break;
+ this->unk_408++;
}
if (this->actionFlags & 0x20) {
sp36 = -sp36;
}
- }
+ break;
- if (this->unk_40D > 0) {
- this->unk_40D--;
- } else {
- this->unk_40C--;
- switch (this->unk_40B) {
- case 0:
- this->unk_3DE = (-this->unk_40C * 0x5DC) + 0x1770;
- if (this->unk_40C <= 0) {
- this->unk_40B = 1;
- this->unk_40C = (s8)(Rand_ZeroFloat(15.0f) + 5.0f);
- }
- break;
+ case 2:
+ if (func_8095C510(this)) {
+ this->actionFlags &= ~0x10;
+ this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
+ this->unk_408 = 0;
+ func_8095AB4C(this);
+ }
+ break;
- case 1:
- this->unk_3DE = 0x1770;
- if (this->unk_40C <= 0) {
- this->unk_40B = 2;
- this->unk_40C = 4;
- }
- break;
-
- case 2:
- this->unk_3DE = this->unk_40C * 0x5DC;
- if (this->unk_40C <= 0) {
- this->unk_40B = 0;
- this->unk_40C = 4;
- this->unk_40D = (s32)Rand_ZeroFloat(40.0f) + 160;
- }
- break;
+ default:
+ break;
+ }
+ } else {
+ if (this->unk_40A > 0) {
+ this->unk_40A--;
+ } else {
+ if (this->unk_408 == 0) {
+ if (Rand_ZeroOne() < 0.3f) {
+ this->unk_408 = 4;
+ this->unk_409 = 12;
+ } else {
+ this->unk_408 = 1;
+ this->unk_409 = 4;
}
}
+ this->unk_409--;
+
+ switch (this->unk_408) {
+ case 1:
+ sp36 = Math_SinS((-this->unk_409 * 0x1000) + 0x4000) * 5000.0f;
+ if (this->unk_409 <= 0) {
+ this->unk_409 = (s32)(Rand_ZeroFloat(15.0f) + 5.0f);
+ this->unk_408 = 2;
+ }
+ break;
+
+ case 2:
+ sp36 = 0x1388;
+ if (this->unk_409 <= 0) {
+ this->unk_408 = 3;
+ this->unk_409 = 4;
+ }
+ break;
+
+ case 3:
+ sp36 = Math_SinS(this->unk_409 * 0x1000) * 5000.0f;
+ if (this->unk_409 <= 0) {
+ this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
+ this->unk_408 = 0;
+ func_8095AB4C(this);
+ }
+ break;
+
+ case 4:
+ sp36 = Math_SinS(this->unk_409 * 0x2000) * 5000.0f;
+ if (this->unk_409 <= 0) {
+ this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60;
+ this->unk_408 = 0;
+ func_8095AB4C(this);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (this->actionFlags & 0x20) {
+ sp36 = -sp36;
+ }
}
- if (sp36) {}
- this->unk_3DC = (u16)((this->unk_3DA << 2) << 8) + sp36;
- this->unk_3D8 = ABS(this->unk_3DC) >> 3;
- } else {
- this->unk_3DE = 0;
- if (this->actionFlags & 2) {
- this->unk_3DC = -0x8000;
+ if (this->unk_40D > 0) {
+ this->unk_40D--;
} else {
- this->unk_3DC = 0;
- }
+ this->unk_40C--;
+ switch (this->unk_40B) {
+ case 0:
+ this->unk_3DE = (-this->unk_40C * 0x5DC) + 0x1770;
+ if (this->unk_40C <= 0) {
+ this->unk_40B = 1;
+ this->unk_40C = (s8)(Rand_ZeroFloat(15.0f) + 5.0f);
+ }
+ break;
- this->unk_3D8 = ABS(this->unk_3DC) >> 3;
+ case 1:
+ this->unk_3DE = 0x1770;
+ if (this->unk_40C <= 0) {
+ this->unk_40B = 2;
+ this->unk_40C = 4;
+ }
+ break;
+
+ case 2:
+ this->unk_3DE = this->unk_40C * 0x5DC;
+ if (this->unk_40C <= 0) {
+ this->unk_40B = 0;
+ this->unk_40C = 4;
+ this->unk_40D = (s32)Rand_ZeroFloat(40.0f) + 160;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
}
+
+ if (sp36) {}
+ this->unk_3DC = (u16)((this->unk_3DA << 2) << 8) + sp36;
+ this->unk_3D8 = ABS(this->unk_3DC) >> 3;
+ } else {
+ this->unk_3DE = 0;
+ if (this->actionFlags & 2) {
+ this->unk_3DC = -0x8000;
+ } else {
+ this->unk_3DC = 0;
+ }
+
+ this->unk_3D8 = ABS(this->unk_3DC) >> 3;
}
}
@@ -1117,6 +1152,9 @@ s32 EnOwl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
rot->y += (s16)(this->unk_3D8 * 1.5f);
}
break;
+
+ default:
+ break;
}
return false;
@@ -1151,7 +1189,7 @@ void EnOwl_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex]));
@@ -1172,7 +1210,7 @@ void func_8095D074(Actor* thisx, PlayState* play) {
if (this->unk_3DC >= 0x20) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
@@ -1180,7 +1218,7 @@ void func_8095D074(Actor* thisx, PlayState* play) {
} else {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)(this->unk_3DC * 8));
diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.h b/src/overlays/actors/ovl_En_Owl/z_en_owl.h
index 5e02aba94..095434fa0 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h
@@ -17,7 +17,7 @@ typedef enum {
/* 0x002 */ ENOWL_GET_TYPE_2,
/* 0x003 */ ENOWL_GET_TYPE_3,
/* 0x01E */ ENOWL_GET_TYPE_30 = 30,
- /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000,
+ /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000
} EnOwlType;
typedef struct EnOwl {
diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c
index b4e7c29e3..e47515c5d 100644
--- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c
+++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c
@@ -154,8 +154,6 @@ void EnPamera_Init(Actor* thisx, PlayState* play) {
func_80BD8588(this, play);
func_80BD8658(this);
- if (1) {}
-
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) {
Actor_Kill(&this->actor);
@@ -169,9 +167,9 @@ void EnPamera_Init(Actor* thisx, PlayState* play) {
}
func_80BD8700(this);
} else {
- this->pathIndex = this->pathPointsCount - 1;
- Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathIndex]);
- Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->pathIndex - 1]);
+ this->waypointIndex = this->pathCount - 1;
+ Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->waypointIndex]);
+ Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->waypointIndex - 1]);
this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&sp44, &this->actor.world.pos);
func_80BD8CCC(this);
}
@@ -197,19 +195,19 @@ s32 func_80BD84F0(EnPamera* this, PlayState* play) {
}
void func_80BD8588(EnPamera* this, PlayState* play) {
- Path* path = &play->setupPathList[((this->actor.params & 0xFF0) >> 4)];
+ Path* path = &play->setupPathList[ENPAMERA_GET_PATH_INDEX(&this->actor)];
Vec3f sp28;
if (path == NULL) {
Actor_Kill(&this->actor);
}
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
this->pathPoints = Lib_SegmentedToVirtual(path->points);
- this->pathIndex = 0;
- this->pathPointsCount = path->count;
- this->pathId = path->unk1;
+ this->waypointIndex = 0;
+ this->pathCount = path->count;
+ this->additionalPathIndex = path->additionalPathIndex;
Math_Vec3s_ToVec3f(&sp28, this->pathPoints);
this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &sp28);
}
@@ -325,15 +323,15 @@ void func_80BD8B70(EnPamera* this, PlayState* play) {
Vec3f vec;
s16 sp32;
- vec.x = this->pathPoints[this->pathIndex].x;
- vec.y = this->pathPoints[this->pathIndex].y;
- vec.z = this->pathPoints[this->pathIndex].z;
+ vec.x = this->pathPoints[this->waypointIndex].x;
+ vec.y = this->pathPoints[this->waypointIndex].y;
+ vec.z = this->pathPoints[this->waypointIndex].z;
sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec);
if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) {
Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
- } else if (this->pathIndex < (this->pathPointsCount - 1)) {
- this->pathIndex++;
+ } else if (this->waypointIndex < (this->pathCount - 1)) {
+ this->waypointIndex++;
} else {
func_80BD8CCC(this);
}
@@ -358,8 +356,8 @@ void func_80BD8D1C(EnPamera* this, PlayState* play) {
}
void func_80BD8D80(EnPamera* this) {
- if (this->pathIndex > 0) {
- this->pathIndex--;
+ if (this->waypointIndex > 0) {
+ this->waypointIndex--;
}
this->actor.gravity = -2.0f;
this->actionFunc = func_80BD8DB0;
@@ -369,15 +367,15 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) {
Vec3f vec;
s16 sp32;
- vec.x = this->pathPoints[this->pathIndex].x;
- vec.y = this->pathPoints[this->pathIndex].y;
- vec.z = this->pathPoints[this->pathIndex].z;
+ vec.x = this->pathPoints[this->waypointIndex].x;
+ vec.y = this->pathPoints[this->waypointIndex].y;
+ vec.z = this->pathPoints[this->waypointIndex].z;
sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec);
if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) {
Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
- } else if (this->pathIndex > 0) {
- this->pathIndex--;
+ } else if (this->waypointIndex > 0) {
+ this->waypointIndex--;
} else {
func_80BD9338(this, play);
func_80BD8A38(this);
@@ -406,9 +404,9 @@ void func_80BD8FF0(EnPamera* this) {
Vec3f pameraPos;
s16 pameraYaw;
- this->pathIndex = this->pathPointsCount - 1;
- Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathPointsCount - 1]);
- Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathPointsCount - 2]);
+ this->waypointIndex = this->pathCount - 1;
+ Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathCount - 1]);
+ Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathCount - 2]);
pameraYaw = Math_Vec3f_Yaw(&pameraPos, &this->actor.world.pos);
this->actor.shape.rot.y = pameraYaw;
this->actor.world.rot.y = pameraYaw;
@@ -424,7 +422,7 @@ void func_80BD90AC(EnPamera* this, PlayState* play) {
if (Player_GetMask(play) != PLAYER_MASK_STONE && (this->actionFunc != func_80BD8758) &&
(this->actionFunc != func_80BD8964) && (this->actionFunc != func_80BD8A7C) &&
- (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->pathIndex != 0)) &&
+ (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->waypointIndex != 0)) &&
((this->actionFunc != func_80BD8DB0) || (this->actor.speed != 3.0f)) &&
((this->actor.xzDistToPlayer < 150.0f) ||
((this->actionFunc == func_80BD909C) &&
@@ -458,14 +456,14 @@ s32 func_80BD9234(EnPamera* this, PlayState* play) {
void func_80BD92D0(EnPamera* this, PlayState* play) {
Path* path;
- s32 pathId = this->pathId;
+ s32 pathIndex = this->additionalPathIndex;
- path = &play->setupPathList[pathId];
- if (pathId >= 0) {
+ path = &play->setupPathList[pathIndex];
+ if (pathIndex >= 0) {
this->pathPoints = Lib_SegmentedToVirtual(path->points);
- this->pathIndex = 0;
- this->pathPointsCount = path->count;
- this->pathId = path->unk1;
+ this->waypointIndex = 0;
+ this->pathCount = path->count;
+ this->additionalPathIndex = path->additionalPathIndex;
}
}
@@ -556,12 +554,14 @@ void EnPamera_Draw(Actor* thisx, PlayState* play) {
EnPamera* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80BDA604[this->unk_312]));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(D_80BDA610[this->unk_314]));
gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(D_80BDA5FC[this->unk_310]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnPamera_OverrideLimbDraw, EnPamera_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -599,7 +599,6 @@ void func_80BD9938(EnPamera* this) {
void func_80BD994C(EnPamera* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Player_GetMask(play) == PLAYER_MASK_GIBDO) {
- if (1) {}
func_80BD93CC(this, 0, 1);
Message_StartTextbox(play, 0x15A8, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
index 59bf40e09..4fa3e4f5f 100644
--- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
+++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
@@ -9,6 +9,8 @@ struct EnPamera;
typedef void (*EnPameraActionFunc)(struct EnPamera*, PlayState*);
typedef void (*EnPameraSetupFunc)(struct EnPamera*, PlayState*);
+#define ENPAMERA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF0) >> 4)
+
typedef struct EnPamera {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
@@ -16,9 +18,9 @@ typedef struct EnPamera {
/* 0x1D4 */ EnPameraActionFunc actionFunc;
/* 0x1D8 */ EnPameraSetupFunc setupFunc;
/* 0x1DC */ Vec3s* pathPoints;
- /* 0x1E0 */ s32 pathIndex;
- /* 0x1E4 */ s32 pathPointsCount;
- /* 0x1E8 */ s32 pathId;
+ /* 0x1E0 */ s32 waypointIndex;
+ /* 0x1E4 */ s32 pathCount;
+ /* 0x1E8 */ s32 additionalPathIndex;
/* 0x1EC */ s32 unk_1EC;
/* 0x1F0 */ Vec3s jointTable[PAMELA_LIMB_MAX];
/* 0x27A */ Vec3s morphTable[PAMELA_LIMB_MAX];
diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c
index 850442bad..4c75fac65 100644
--- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c
+++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c
@@ -80,12 +80,12 @@ ActorInit En_Pametfrog_InitVars = {
};
typedef enum {
- /* 0x0 */ GEKKO_DMGEFF_NONE,
- /* 0x1 */ GEKKO_DMGEFF_STUN,
- /* 0x2 */ GEKKO_DMGEFF_FIRE,
- /* 0x3 */ GEKKO_DMGEFF_ICE,
- /* 0x4 */ GEKKO_DMGEFF_LIGHT,
- /* 0x5 */ GEKKO_DMGEFF_ZORA_BARRIER,
+ /* 0 */ GEKKO_DMGEFF_NONE,
+ /* 1 */ GEKKO_DMGEFF_STUN,
+ /* 2 */ GEKKO_DMGEFF_FIRE,
+ /* 3 */ GEKKO_DMGEFF_ICE,
+ /* 4 */ GEKKO_DMGEFF_LIGHT,
+ /* 5 */ GEKKO_DMGEFF_ZORA_BARRIER
} EnPametfrogDamageEffect;
static DamageTable sDamageTable = {
@@ -306,7 +306,7 @@ s32 func_8086A2CC(EnPametfrog* this, CollisionPoly* floorPoly) {
return false;
}
- rotation = func_80086C48(arg0);
+ rotation = Math_FAcosF(arg0);
if (rotation < 0.0001f) {
return false;
}
@@ -523,7 +523,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, PlayState* play) {
this->timer--;
}
- sin = sin_rad(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f;
+ sin = Math_SinF(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f;
EnPametfrog_ShakeCamera(this, play, 300.0f * sin, 100.0f * sin);
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnPametfrog_StopCutscene(this, play);
@@ -966,9 +966,9 @@ void EnPametfrog_SetupSpawnFrog(EnPametfrog* this, PlayState* play) {
Flags_SetClearTemp(play, play->roomCtx.curRoom.num);
for (i = 0; i < 25; i++) {
- vel.x = randPlusMinusPoint5Scaled(5.0f);
+ vel.x = Rand_CenteredFloat(5.0f);
vel.y = Rand_ZeroFloat(3.0f) + 4.0f;
- vel.z = randPlusMinusPoint5Scaled(5.0f);
+ vel.z = Rand_CenteredFloat(5.0f);
EffectSsHahen_Spawn(play, &this->actor.world.pos, &vel, &sAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT,
10, 0);
}
@@ -981,7 +981,7 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, PlayState* play) {
f32 magShake;
this->timer--;
- magShake = (sin_rad(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f;
+ magShake = (Math_SinF(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f;
EnPametfrog_ShakeCamera(this, play, 75.0f * magShake, 10.0f * magShake);
if (this->timer == 0) {
EnPametfrog_StopCutscene(this, play);
@@ -1424,7 +1424,7 @@ void EnPametfrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
void EnPametfrog_Draw(Actor* thisx, PlayState* play) {
EnPametfrog* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_RotateYS(this->spinYaw, MTXMODE_APPLY);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
EnPametfrog_PostLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
index 90bc0cb1b..31a3be14b 100644
--- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
+++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
@@ -9,16 +9,16 @@ struct EnPametfrog;
typedef void (*EnPametfrogActionFunc)(struct EnPametfrog*, PlayState*);
typedef enum {
- /* 0x0 */ GEKKO_PRE_SNAPPER,
- /* 0x1 */ GEKKO_GET_SNAPPER,
- /* 0x2 */ GEKKO_INIT_SNAPPER,
- /* 0x3 */ GEKKO_ON_SNAPPER,
- /* 0x4 */ GEKKO_REAR_ON_SNAPPER,
- /* 0x5 */ GEKKO_CUTSCENE,
- /* 0x6 */ GEKKO_FALL_OFF_SNAPPER,
- /* 0x7 */ GEKKO_RETURN_TO_SNAPPER,
- /* 0x8 */ GEKKO_JUMP_ON_SNAPPER,
- /* 0x9 */ GEKKO_DEFEAT,
+ /* 0 */ GEKKO_PRE_SNAPPER,
+ /* 1 */ GEKKO_GET_SNAPPER,
+ /* 2 */ GEKKO_INIT_SNAPPER,
+ /* 3 */ GEKKO_ON_SNAPPER,
+ /* 4 */ GEKKO_REAR_ON_SNAPPER,
+ /* 5 */ GEKKO_CUTSCENE,
+ /* 6 */ GEKKO_FALL_OFF_SNAPPER,
+ /* 7 */ GEKKO_RETURN_TO_SNAPPER,
+ /* 8 */ GEKKO_JUMP_ON_SNAPPER,
+ /* 9 */ GEKKO_DEFEAT
} EnPametfrogState;
typedef struct EnPametfrog {
diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.c b/src/overlays/actors/ovl_En_Paper/z_en_paper.c
index 7659b524b..b2b3b5669 100644
--- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c
+++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c
@@ -213,7 +213,7 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, SHADE, 0, 0, 0, SHADE, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED);
diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c
index 2a12b9af8..e56970e10 100644
--- a/src/overlays/actors/ovl_En_Part/z_en_part.c
+++ b/src/overlays/actors/ovl_En_Part/z_en_part.c
@@ -90,10 +90,10 @@ void func_808654C4(EnPart* this, PlayState* play) {
break;
case ENPART_TYPE_4:
for (i = 7; i >= 0; i--) {
- effectPos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- effectPos.y = randPlusMinusPoint5Scaled(50.0f) +
+ effectPos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x;
+ effectPos.y = Rand_CenteredFloat(50.0f) +
(this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y));
- effectPos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
+ effectPos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z;
effectVelocity.y = Rand_ZeroOne() + 1.0f;
effectScale = Rand_S16Offset(80, 100);
EffectSsDtBubble_SpawnColorProfile(play, &effectPos, &effectVelocity, &gZeroVec3f, effectScale, 25,
@@ -125,7 +125,7 @@ void EnPart_Draw(Actor* thisx, PlayState* play) {
if (this->actor.params > ENPART_TYPE_0) {
Matrix_RotateZF(this->zRot, MTXMODE_APPLY);
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
if (this->actor.params == ENPART_TYPE_15) {
gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL);
diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.h b/src/overlays/actors/ovl_En_Part/z_en_part.h
index 662e8574e..5bd4de503 100644
--- a/src/overlays/actors/ovl_En_Part/z_en_part.h
+++ b/src/overlays/actors/ovl_En_Part/z_en_part.h
@@ -8,11 +8,11 @@ struct EnPart;
typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*);
typedef enum {
- ENPART_TYPE_0 = 0,
- ENPART_TYPE_1 = 1,
- ENPART_TYPE_4 = 4,
- ENPART_TYPE_15 = 15
-} EnPartParams;
+ /* 0x0 */ ENPART_TYPE_0,
+ /* 0x1 */ ENPART_TYPE_1,
+ /* 0x4 */ ENPART_TYPE_4 = 4,
+ /* 0xF */ ENPART_TYPE_15 = 15
+} EnPartParam;
typedef struct EnPart {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
index 2f4678b8d..645b7edf5 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
@@ -257,9 +257,9 @@ void func_80897258(PlayState* play, EnPeehat* this, Vec3f* arg2, f32 arg3, f32 a
sp44.x = (Math_SinS(sp42) * arg3) + arg2->x;
sp44.z = (Math_CosS(sp42) * arg3) + arg2->z;
- D_80899564.x = randPlusMinusPoint5Scaled(1.05f);
- D_80899564.z = randPlusMinusPoint5Scaled(1.05f);
- D_80899558.y = randPlusMinusPoint5Scaled(4.0f) + 8.0f;
+ D_80899564.x = Rand_CenteredFloat(1.05f);
+ D_80899564.z = Rand_CenteredFloat(1.05f);
+ D_80899558.y = Rand_CenteredFloat(4.0f) + 8.0f;
EffectSsHahen_Spawn(play, &sp44, &D_80899558, &D_80899564, 0, (Rand_ZeroFloat(5.0f) + 12.0f) * arg4,
HAHEN_OBJECT_DEFAULT, 10, NULL);
@@ -506,7 +506,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) {
this->actor.world.pos.y -= 1.0f;
}
- cos = cos_rad(this->unk_2B8);
+ cos = Math_CosF(this->unk_2B8);
this->actor.world.pos.y += cos * 1.4f;
this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f;
this->unk_2B0--;
@@ -514,7 +514,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) {
if (this->unk_2B0 <= 0) {
this->actor.speed = Rand_ZeroFloat(0.5f) + 2.5f;
this->unk_2B0 = Rand_ZeroFloat(10.0f) + 10.0f;
- this->unk_2B6 = randPlusMinusPoint5Scaled(1000.0f);
+ this->unk_2B6 = Rand_CenteredFloat(1000.0f);
}
SkelAnime_Update(&this->skelAnime);
@@ -549,10 +549,10 @@ void func_80898144(EnPeehat* this, PlayState* play) {
} else {
this->actor.world.pos.y += 1.0f;
}
- cos = cos_rad(this->unk_2B8);
+ cos = Math_CosF(this->unk_2B8);
this->actor.world.pos.y += cos * 1.4f;
- cos = cos_rad(this->unk_2B8);
+ cos = Math_CosF(this->unk_2B8);
this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f;
step = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos);
@@ -660,8 +660,9 @@ void func_80898654(EnPeehat* this) {
void func_808986A4(EnPeehat* this, PlayState* play) {
if (this->unk_2B0 == 5) {
- EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x602, 0);
+ EnBom* bomb =
+ (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x602, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
@@ -900,6 +901,7 @@ void EnPeehat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVecX(-400.0f, vec2);
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_OPA_DISP;
Matrix_Translate(-1000.0f, 0.0f, 0.0f, MTXMODE_APPLY);
@@ -925,7 +927,7 @@ void EnPeehat_Draw(Actor* thisx, PlayState* play) {
Vec3f sp40;
s32 i;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPeehat_OverrideLimbDraw,
(this->actor.params == 0) ? EnPeehat_PostLimbDraw : NULL, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c
index 088d5c8a4..072f6d6ac 100644
--- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c
+++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c
@@ -1105,7 +1105,11 @@ void func_80AF8AC8(EnPm* this) {
void func_80AF8BA8(s32 arg0) {
static u16 D_80AFB8D4[] = {
- WEEKEVENTREG_27_02, WEEKEVENTREG_27_04, WEEKEVENTREG_27_08, WEEKEVENTREG_27_10, WEEKEVENTREG_27_20,
+ WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN,
+ WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN,
+ WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN,
+ WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN,
+ WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN,
};
static u16 D_80AFB8E0[] = {
WEEKEVENTREG_27_40, WEEKEVENTREG_27_80, WEEKEVENTREG_28_01, WEEKEVENTREG_28_02, WEEKEVENTREG_28_04,
@@ -1197,7 +1201,7 @@ s32 func_80AF8DD4(EnPm* this, PlayState* play) {
}
s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 actorCat, s16 actorId) {
- u8 sp4F = this->actor.params & 0xFF;
+ u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor);
Vec3s* sp48;
Vec3f sp3C;
Vec3f sp30;
@@ -1208,7 +1212,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u
this->timePath = NULL;
sp2C = func_80AF7CB0(this, play, actorCat, actorId);
if (D_80AFB430[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]);
}
if ((sp2C != NULL) && (sp2C->update != NULL)) {
@@ -1228,7 +1232,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u
s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp56 = SCHEDULE_TIME_NOW;
- u8 sp55 = this->actor.params & 0xFF;
+ u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor);
EnDoor* door;
Vec3s* sp4C;
Vec3f sp40;
@@ -1239,10 +1243,10 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
door = func_80AF7D60(play, scheduleOutput->result);
if (D_80AFB430[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp55, D_80AFB430[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]);
}
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if (this->timePath != 0) {
sp4C = Lib_SegmentedToVirtual(this->timePath->points);
Math_Vec3s_ToVec3f(&sp40, &sp4C[0]);
@@ -1251,7 +1255,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
Math_Vec3f_Copy(&this->unk_278, &sp34);
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34);
Math_Vec3f_Copy(&this->actor.world.pos, &sp40);
- temp = this->actor.world.rot.y - door->dyna.actor.shape.rot.y;
+ temp = this->actor.world.rot.y - door->knobDoor.dyna.actor.shape.rot.y;
if (ABS_ALT(temp) <= 0x4000) {
this->unk_260 = -0x4B;
} else {
@@ -1277,7 +1281,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp2E = SCHEDULE_TIME_NOW;
u16 phi_v1;
- u8 sp2B = this->actor.params & 0xFF;
+ u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor);
u16 tmp;
s16 pad;
s32 ret = false;
@@ -1285,7 +1289,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
if (D_80AFB430[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80AFB430[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]);
}
if ((this->timePath != NULL) && (this->timePath->count < 3)) {
@@ -1357,7 +1361,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
}
s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
- u8 sp4F = this->actor.params & 0xFF;
+ u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor);
Vec3f sp40;
Vec3f sp34;
Vec3s* sp30;
@@ -1366,7 +1370,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
if (D_80AFB430[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]);
}
if ((this->timePath != 0) && (this->timePath->count >= 2)) {
@@ -1390,7 +1394,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
}
s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
- u8 sp4F = this->actor.params & 0xFF;
+ u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor);
Vec3f sp40;
Vec3f sp34;
Vec3s* sp30;
@@ -1419,7 +1423,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->timePath = NULL;
phi_a3 = D_80AFB430[scheduleOutput->result];
if (phi_a3 >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp4F, phi_a3);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, phi_a3);
}
if ((this->timePath != 0) && (this->timePath->count >= 2)) {
@@ -1704,7 +1708,7 @@ s32 func_80AF9D04(EnPm* this, PlayState* play) {
f32 temp;
if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) {
- if ((door != NULL) && (door->dyna.actor.update != NULL)) {
+ if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) {
if (((f32)this->unk_36E / this->unk_36C) <= 0.9f) {
door->unk_1A7 = this->unk_260;
} else {
@@ -2181,7 +2185,7 @@ void EnPm_Draw(Actor* thisx, PlayState* play) {
s32 pad;
if (this->unk_258 != 0) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.h b/src/overlays/actors/ovl_En_Pm/z_en_pm.h
index c7bf76e37..bf7bbe859 100644
--- a/src/overlays/actors/ovl_En_Pm/z_en_pm.h
+++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.h
@@ -9,6 +9,8 @@ typedef void (*EnPmActionFunc)(struct EnPm*, PlayState*);
typedef s32 (*EnPmFunc)(struct EnPm*, PlayState*);
typedef s32 (*EnPmFunc2)(struct EnPm*, PlayState*);
+#define ENPM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
+
typedef struct EnPm {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c
index beffe3bb8..24517f8aa 100644
--- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c
+++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c
@@ -58,7 +58,7 @@ static ColliderSphereInit sSphereInit = {
typedef enum {
/* 0x0 */ POE_BALLOON_DMGEFF_NONE,
- /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF,
+ /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF
} PoeBalloonDamageEffect;
static DamageTable sDamageTable = {
@@ -316,7 +316,7 @@ void EnPoFusen_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
void EnPoFusen_Draw(Actor* thisx, PlayState* play) {
EnPoFusen* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->anime.skeleton, this->anime.jointTable, this->anime.dListCount,
EnPoFusen_OverrideLimbDraw, EnPoFusen_PostLimbDraw, EnPoFusen_TransformLimbDraw,
&this->actor);
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
index 53ae73479..357b08bdd 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -101,7 +101,7 @@ typedef enum {
/* 0x1 */ POE_SISTERS_DMGEFF_UNKDMG12, // set in DamageTable, but unused
/* 0x4 */ POE_SISTERS_DMGEFF_LIGHTARROWS = 0x4,
/* 0xE */ POE_SISTERS_DMGEFF_SPINATTACK = 0xE,
- /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT = 0xF,
+ /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT
} PoeSisterDamageEffect;
static DamageTable sDamageTable = {
@@ -242,8 +242,9 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 dist;
- if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) {
- if ((player->meleeWeaponState == 0 || player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) &&
+ if ((this->megCloneId == POE_SISTERS_MEG_REAL) || (this->actionFunc != EnPoSisters_DamageFlinch)) {
+ if (((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) ||
+ (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) &&
((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) {
Math_StepToF(&this->megDistToPlayer, 110.0f, 3.0f);
} else {
@@ -276,7 +277,8 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) {
this->actor.world.pos.y += (2.0f + (0.5f * Rand_ZeroOne())) * Math_SinS(this->floatingBobbingTimer * 0x800);
// fully opaque
- if (this->color.a == 255 && this->actionFunc != EnPoSisters_SpinAttack && this->actionFunc != EnPoSisters_SpinUp) {
+ if ((this->color.a == 255) && (this->actionFunc != EnPoSisters_SpinAttack) &&
+ (this->actionFunc != EnPoSisters_SpinUp)) {
if (this->actionFunc == EnPoSisters_Flee) {
func_800B9010(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG);
} else {
@@ -578,7 +580,7 @@ void EnPoSisters_Flee(EnPoSisters* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
this->poSisterFlags |= POE_SISTERS_FLAG_UPDATE_SHAPE_ROT;
EnPoSisters_SetupSpinToInvis(this);
- } else if (this->fleeTimer == 0 && this->actor.xzDistToPlayer > 480.0f) {
+ } else if ((this->fleeTimer == 0) && (this->actor.xzDistToPlayer > 480.0f)) {
this->actor.world.rot.y = this->actor.shape.rot.y;
EnPoSisters_SetupAimlessIdleFlying(this);
}
@@ -817,7 +819,7 @@ void EnPoSisters_MegSurroundPlayer(EnPoSisters* this, PlayState* play) {
DECR(this->megSurroundTimer);
- if (this->megClonesRemaining > 0 && this->megSurroundTimer >= 16) {
+ if ((this->megClonesRemaining > 0) && (this->megSurroundTimer >= 16)) {
SkelAnime_Update(&this->skelAnime);
if (this->megCloneId == POE_SISTERS_MEG_REAL) {
if (ABS_ALT(16 - this->floatingBobbingTimer) < 14) {
@@ -1091,7 +1093,7 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
};
EnPoSisters* this = THIS;
- if (limbIndex == POE_SISTERS_LIMB_ROOT && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) {
+ if ((limbIndex == POE_SISTERS_LIMB_ROOT) && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) {
if (this->megSurroundTimer >= 284) {
rot->x += (this->megSurroundTimer - 284) * 0x1000;
} else {
@@ -1152,8 +1154,8 @@ void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
Matrix_MultVecX(3000.0f, &this->limbPos[7]);
}
- if (this->actionFunc == EnPoSisters_DeathStage1 && this->deathTimer >= 8 &&
- limbIndex == POE_SISTERS_LIMB_MAIN_BODY) {
+ if ((this->actionFunc == EnPoSisters_DeathStage1) && (this->deathTimer >= 8) &&
+ (limbIndex == POE_SISTERS_LIMB_MAIN_BODY)) {
gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList((*gfx)++, gPoeSistersBurnBodyDL);
}
@@ -1204,8 +1206,8 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
EnPoSisters_UpdateColors(this);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if ((this->color.a == 255) || (this->color.a == 0)) {
gDPSetEnvColor(POLY_OPA_DISP++, this->color.r, this->color.g, this->color.b, this->color.a);
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h
index cfb8a1697..f800788c7 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h
@@ -15,17 +15,17 @@ typedef void (*EnPoSistersActionFunc)(struct EnPoSisters*, PlayState*);
#define POE_SISTERS_PARAMS(observerFlag, megClone, type) (((observerFlag) << 0xC) | ((megClone & 3) << 0xA) | ((type & 3) << 8))
typedef enum {
- /* 0 */ POE_SISTERS_TYPE_MEG, // purple
- /* 1 */ POE_SISTERS_TYPE_JO, // red
- /* 2 */ POE_SISTERS_TYPE_BETH, // blue
- /* 3 */ POE_SISTERS_TYPE_AMY, // green
+ /* 0 */ POE_SISTERS_TYPE_MEG, // purple
+ /* 1 */ POE_SISTERS_TYPE_JO, // red
+ /* 2 */ POE_SISTERS_TYPE_BETH, // blue
+ /* 3 */ POE_SISTERS_TYPE_AMY // green
} EnPoSisterType;
typedef enum {
/* 0 */ POE_SISTERS_MEG_REAL,
/* 1 */ POE_SISTERS_MEG_CLONE1,
/* 2 */ POE_SISTERS_MEG_CLONE2,
- /* 3 */ POE_SISTERS_MEG_CLONE3,
+ /* 3 */ POE_SISTERS_MEG_CLONE3
} EnPoSisterMegCloneID;
typedef struct EnPoSisters {
diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
index c8da2f1ee..4669b1916 100644
--- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c
+++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
@@ -926,7 +926,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) {
if ((this->unk_197 == 255) || (this->unk_197 == 0)) {
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], this->unk_194, this->unk_195, this->unk_196, this->unk_197);
gSPSegment(&gfx[2], 0x08, D_801AEFA0);
@@ -937,7 +937,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) {
} else {
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->unk_197);
gSPSegment(&gfx[2], 0x08, D_801AEF88);
@@ -945,7 +945,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) {
EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, &gfx[3]);
gfx = POLY_OPA_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
}
gDPPipeSync(&gfx[0]);
@@ -986,7 +986,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) {
if (this->actionFunc == func_80B2DD2C) {
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gDPSetEnvColor(&gfx[1], this->unk_198, this->unk_199, this->unk_19A, 255);
func_80B2C910(&sp7C, play);
@@ -998,7 +998,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) {
POLY_OPA_DISP = &gfx[4];
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(
POLY_XLU_DISP++, 0x08,
diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c
index 5d1d6935e..2e0aaf0a2 100644
--- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c
+++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c
@@ -39,7 +39,7 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play);
typedef enum {
/* 0 */ EN_PP_COLLISION_RESULT_OK,
/* 1 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_INTO_WALL,
- /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE,
+ /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE
} EnPpCollisionResult;
typedef enum {
@@ -56,13 +56,13 @@ typedef enum {
/* 10 */ EN_PP_ACTION_MASK_DEAD,
/* 11 */ EN_PP_ACTION_SPAWN_BODY_PARTS,
/* 12 */ EN_PP_ACTION_DONE_SPAWNING_BODY_PARTS,
- /* 13 */ EN_PP_ACTION_BODY_PART_MOVE,
+ /* 13 */ EN_PP_ACTION_BODY_PART_MOVE
} EnPpAction;
typedef enum {
/* 0 */ EN_PP_MASK_DETACH_STATE_START,
/* 1 */ EN_PP_MASK_DETACH_STATE_FALL,
- /* 2 */ EN_PP_MASK_DETACH_STATE_DIE,
+ /* 2 */ EN_PP_MASK_DETACH_STATE_DIE
} EnPpMaskDetachState;
static s32 sCurrentDeadBodyPartIndex = 0;
@@ -77,7 +77,7 @@ typedef enum {
/* 0xC */ EN_PP_DMGEFF_KNOCK_OFF_MASK = 0xC, // Knocks off the Hiploop's mask or deals regular damage
/* 0xD */ EN_PP_DMGEFF_HOOKSHOT, // Pulls the Hiploop's mask to the player or deals regular damage
/* 0xE */ EN_PP_DMGEFF_GORON_POUND, // Knocks off the Hiploop's mask or forces it to jump
- /* 0xF */ EN_PP_DMGEFF_DAMAGE, // Deals regular damage
+ /* 0xF */ EN_PP_DMGEFF_DAMAGE // Deals regular damage
} EnPpDamageEffect;
static DamageTable sDamageTable = {
@@ -296,10 +296,6 @@ void EnPp_Init(Actor* thisx, PlayState* play) {
this->bodyCollider.elements[0].dim.modelSphere.center.y = -400;
this->bodyColliderElements[0].info.bumperFlags |= BUMP_HOOKABLE;
this->maskCollider.elements[0].info.toucher.damage = 0x10;
- //! FAKE: Needed to fix some regs
- //! https://decomp.me/scratch/6Yd1B
- if (this->actor.world.rot.z) {}
- if (this->actor.world.rot.z) {}
}
Collider_InitQuad(play, &this->hornCollider);
@@ -397,17 +393,17 @@ void EnPp_SpawnDust(EnPp* this, PlayState* play) {
Vec3f accel;
for (i = 0; i < ARRAY_COUNT(this->backFootPos); i++) {
- velocity.x = randPlusMinusPoint5Scaled(2.0f);
+ velocity.x = Rand_CenteredFloat(2.0f);
velocity.y = Rand_ZeroFloat(2.0f) + 1.0f;
- velocity.z = randPlusMinusPoint5Scaled(2.0f);
+ velocity.z = Rand_CenteredFloat(2.0f);
accel.y = -0.1f;
accel.z = 0.0f;
accel.x = 0.0f;
- pos.x = this->backFootPos[i].x + randPlusMinusPoint5Scaled(10.0f);
+ pos.x = this->backFootPos[i].x + Rand_CenteredFloat(10.0f);
pos.y = Rand_ZeroFloat(3.0f) + this->actor.floorHeight + 1.0f;
- pos.z = this->backFootPos[i].z + randPlusMinusPoint5Scaled(10.0f);
+ pos.z = this->backFootPos[i].z + Rand_CenteredFloat(10.0f);
func_800B0EB0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvColor, (Rand_ZeroFloat(50.0f) + 60.0f),
30, (Rand_ZeroFloat(5.0f) + 20.0f));
@@ -534,8 +530,8 @@ void EnPp_Idle(EnPp* this, PlayState* play) {
if ((this->timer == 0) && (this->secondaryTimer == 0)) {
this->secondaryTimer = Rand_ZeroFloat(20.0f) + 20.0f;
Math_Vec3f_Copy(&posToLookAt, &this->actor.home.pos);
- posToLookAt.x += randPlusMinusPoint5Scaled(50.0f);
- posToLookAt.z += randPlusMinusPoint5Scaled(50.0f);
+ posToLookAt.x += Rand_CenteredFloat(50.0f);
+ posToLookAt.z += Rand_CenteredFloat(50.0f);
this->targetRotY = Math_Vec3f_Yaw(&this->actor.world.pos, &posToLookAt);
this->actor.speed = 0.0f;
if (this->animIndex != EN_PP_ANIM_IDLE) {
@@ -1046,8 +1042,8 @@ void EnPp_Dead(EnPp* this, PlayState* play) {
if (this->actor.world.pos.y < waterSurface) {
for (i = 0; i < 5; i++) {
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
- splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i));
- splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i));
+ splashPos.x += Rand_CenteredFloat(10 + (5 * i));
+ splashPos.z += Rand_CenteredFloat(40 + (5 * i));
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f);
}
@@ -1143,9 +1139,9 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(sMaskFireVelocityAndAccel); i++) {
Math_Vec3f_Copy(&maskFirePos, &this->maskFlamesBasePos);
- maskFirePos.x += randPlusMinusPoint5Scaled(20.0f);
+ maskFirePos.x += Rand_CenteredFloat(20.0f);
maskFirePos.y = this->actor.floorHeight;
- maskFirePos.z += randPlusMinusPoint5Scaled(20.0f);
+ maskFirePos.z += Rand_CenteredFloat(20.0f);
func_800B3030(play, &maskFirePos, &sMaskFireVelocityAndAccel[i],
&sMaskFireVelocityAndAccel[i], 70, 0, 2);
}
@@ -1173,7 +1169,7 @@ void EnPp_BodyPart_SetupMove(EnPp* this) {
this->deadBodyPartRotationalVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00;
if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) {
this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f;
- this->actor.world.rot.y = ((s32)randPlusMinusPoint5Scaled(223.0f) + 0x1999) * this->deadBodyPartIndex;
+ this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex;
}
this->action = EN_PP_ACTION_BODY_PART_MOVE;
@@ -1213,8 +1209,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) {
if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) {
for (i = 0; i < 6; i++) {
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
- splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i));
- splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i));
+ splashPos.x += Rand_CenteredFloat(10 + (5 * i));
+ splashPos.z += Rand_CenteredFloat(40 + (5 * i));
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f);
}
} else {
@@ -1573,8 +1569,8 @@ void EnPp_Draw(Actor* thisx, PlayState* play) {
f32 scale;
f32 alpha;
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor);
@@ -1611,7 +1607,7 @@ void EnPp_Draw(Actor* thisx, PlayState* play) {
if ((this->action != EN_PP_ACTION_MASK_DETACH) && (this->action < EN_PP_ACTION_DEAD)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255);
Math_Vec3f_Copy(&pos, &this->actor.world.pos);
diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.h b/src/overlays/actors/ovl_En_Pp/z_en_pp.h
index aabbd9e2e..2409487be 100644
--- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h
+++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h
@@ -22,7 +22,7 @@ typedef enum {
/* 13 */ EN_PP_TYPE_BODY_PART_FRONT_RIGHT_LOWER_LEG = 13,
/* 17 */ EN_PP_TYPE_BODY_PART_LEFT_WING_MIDDLE = 17,
/* 23 */ EN_PP_TYPE_BODY_PART_RIGHT_WING_MIDDLE = 23,
- /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26,
+ /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26
} EnPpType;
typedef struct EnPp {
diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c
index ab47e693f..98762c907 100644
--- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c
+++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c
@@ -319,7 +319,7 @@ void func_80A32A40(EnPr* this, PlayState* play) {
WaterBox* sp30;
Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
- sp34.y = randPlusMinusPoint5Scaled(50.0f) + this->actor.home.pos.y;
+ sp34.y = Rand_CenteredFloat(50.0f) + this->actor.home.pos.y;
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &this->unk_2B4,
&sp30)) {
@@ -551,9 +551,9 @@ void EnPr_Update(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&sp40, &this->unk_2D4);
this->unk_204 = 0;
- sp40.x += randPlusMinusPoint5Scaled(20.0f);
- sp40.y += randPlusMinusPoint5Scaled(5.0f);
- sp40.z += randPlusMinusPoint5Scaled(20.0f);
+ sp40.x += Rand_CenteredFloat(20.0f);
+ sp40.y += Rand_CenteredFloat(5.0f);
+ sp40.z += Rand_CenteredFloat(20.0f);
for (i = 0; i < (s32)Rand_ZeroFloat(5.0f) + 5; i++) {
EffectSsBubble_Spawn(play, &sp40, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f);
@@ -595,8 +595,8 @@ void EnPr_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->unk_2D2 == 0) {
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
index 1c76d5985..a4dd96d4b 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
@@ -151,8 +151,8 @@ void EnPr2_Init(Actor* thisx, PlayState* play) {
Actor* parent = this->actor.parent;
if (parent->update != NULL) {
- this->unk_1C8 = ((EnEncount1*)parent)->pathIndex;
- this->path = SubS_GetPathByIndex(play, this->unk_1C8, 0x3F);
+ this->pathIndex = ((EnEncount1*)parent)->pathIndex;
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, ENPR2_PATH_INDEX_NONE);
this->unk_208 = parent->world.rot.z * 20.0f;
if (this->unk_208 < 20.0f) {
this->unk_208 = 20.0f;
@@ -272,7 +272,7 @@ void func_80A745FC(EnPr2* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG);
Math_ApproachF(&this->unk_204, 0.02f, 0.1f, 0.005f);
- if (this->path->unk2 < this->unk_1D0) {
+ if (this->path->customValue < this->unk_1D0) {
Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f);
} else {
Math_ApproachF(&this->actor.speed, 10.0f, 0.3f, 1.0f);
@@ -390,8 +390,8 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
if (this->unk_1DA == 1) {
this->unk_1D8 = Rand_S16Offset(100, 100);
Math_Vec3f_Copy(&sp3C, &this->unk_228);
- sp3C.x += randPlusMinusPoint5Scaled(300.0f);
- sp3C.z += randPlusMinusPoint5Scaled(300.0f);
+ sp3C.x += Rand_CenteredFloat(300.0f);
+ sp3C.z += Rand_CenteredFloat(300.0f);
Math_Vec3f_Copy(&this->unk_21C, &sp3C);
}
} else {
@@ -536,7 +536,7 @@ void func_80A751B4(EnPr2* this) {
this->actor.shape.rot.z = this->actor.world.rot.z;
this->unk_1D8 = 30;
this->actor.speed = Rand_ZeroFloat(0.5f);
- this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000);
+ this->actor.world.rot.y = Rand_CenteredFloat(0x8000);
}
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 10);
this->unk_1D4 = 3;
@@ -596,9 +596,9 @@ void func_80A75310(EnPr2* this, PlayState* play) {
for (i = 0; i < 10; i++) {
Math_Vec3f_Copy(&sp64, &this->actor.world.pos);
- sp64.x += randPlusMinusPoint5Scaled(20.0f);
- sp64.y += randPlusMinusPoint5Scaled(5.0f);
- sp64.z += randPlusMinusPoint5Scaled(20.0f);
+ sp64.x += Rand_CenteredFloat(20.0f);
+ sp64.y += Rand_CenteredFloat(5.0f);
+ sp64.z += Rand_CenteredFloat(20.0f);
frame = Rand_ZeroFloat(0.03f) + 0.07f;
EffectSsBubble_Spawn(play, &sp64, 0.0f, 5.0f, 5.0f, frame);
@@ -675,9 +675,9 @@ void EnPr2_Update(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&sp58, &this->unk_270);
this->unk_1D6 = false;
- sp58.x += randPlusMinusPoint5Scaled(20.0f);
- sp58.y += randPlusMinusPoint5Scaled(5.0f);
- sp58.z += randPlusMinusPoint5Scaled(20.0f);
+ sp58.x += Rand_CenteredFloat(20.0f);
+ sp58.y += Rand_CenteredFloat(5.0f);
+ sp58.z += Rand_CenteredFloat(20.0f);
for (i = 0; i < 2; i++) {
rand = Rand_ZeroFloat(0.03f) + 0.07f;
@@ -741,7 +741,7 @@ void EnPr2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_1F4 == 255) {
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
index bbcd28afd..94fb7e033 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
@@ -10,6 +10,7 @@ typedef void (*EnPr2ActionFunc)(struct EnPr2*, PlayState*);
#define ENPR2_GET_F(thisx) ((thisx)->params & 0xF)
#define ENPR2_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF)
+#define ENPR2_PATH_INDEX_NONE 0x3F
#define ENPR2_PARAMS(paramF, paramFF0) (((paramF) & 0xF) | (((paramFF0) << 4) & 0xFF0))
typedef struct EnPr2 {
@@ -18,7 +19,7 @@ typedef struct EnPr2 {
/* 0x188 */ Vec3s jointTable[5];
/* 0x1A6 */ Vec3s morphtable[5];
/* 0x1C4 */ EnPr2ActionFunc actionFunc;
- /* 0x1C8 */ s16 unk_1C8;
+ /* 0x1C8 */ s16 pathIndex;
/* 0x1CC */ Path* path;
/* 0x1D0 */ s32 unk_1D0;
/* 0x1D4 */ s16 unk_1D4;
diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c
index e34ffe1f6..ef37cf9f0 100644
--- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c
+++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c
@@ -127,7 +127,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) {
this->unk_220 = &this->actor;
this->unk_1EC = 255;
- this->unk_202 = randPlusMinusPoint5Scaled((this->unk_1E6 * 100.0f) + 1000.0f);
+ this->unk_202 = Rand_CenteredFloat((this->unk_1E6 * 100.0f) + 1000.0f);
func_80A76388(this);
}
@@ -176,7 +176,7 @@ void func_80A76070(EnPrz* this, s16 arg1, PlayState* play) {
temp_s0 = -100;
}
- if (fabsf(this->actor.world.rot.y - (f32)arg1) < (randPlusMinusPoint5Scaled(20.0f) + 100.0f)) {
+ if (fabsf(this->actor.world.rot.y - (f32)arg1) < (Rand_CenteredFloat(20.0f) + 100.0f)) {
Math_ApproachZeroF(&this->unk_218, 0.5f, 20.0f);
} else {
Math_ApproachF(&this->unk_218, temp_s0, 0.5f, 5.0f);
@@ -218,7 +218,7 @@ s32 func_80A762C0(EnPrz* this, PlayState* play) {
}
void func_80A76388(EnPrz* this) {
- this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
+ this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f;
func_80A75F18(this, 0);
this->unk_1EA = 1;
this->actionFunc = func_80A763E8;
@@ -251,11 +251,11 @@ void func_80A763E8(EnPrz* this, PlayState* play) {
if ((this->unk_1EE == 0) && (this->unk_1F2 == 0)) {
s16 rot;
- this->unk_214 = randPlusMinusPoint5Scaled(40.0f);
+ this->unk_214 = Rand_CenteredFloat(40.0f);
rot = BINANG_ROT180(this->unk_220->world.rot.y);
this->unk_1D8.x += Math_SinS(rot) * this->unk_214;
- this->unk_1D8.y = randPlusMinusPoint5Scaled(40.0f) + (this->unk_220->world.pos.y + 40.0f);
+ this->unk_1D8.y = Rand_CenteredFloat(40.0f) + (this->unk_220->world.pos.y + 40.0f);
rot = BINANG_ROT180(this->unk_220->world.rot.y);
this->unk_1D8.z += Math_CosS(rot) * this->unk_214;
@@ -302,7 +302,7 @@ void func_80A76634(EnPrz* this, PlayState* play) {
}
void func_80A76748(EnPrz* this) {
- this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 3.0f;
+ this->actor.speed = Rand_CenteredFloat(1.0f) + 3.0f;
this->unk_1EE = 0;
this->unk_1EA = 3;
this->skelAnime.playSpeed = 2.0f;
@@ -317,7 +317,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) {
if (func_80A762C0(this, play)) {
func_80A75F18(this, 0);
- this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
+ this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f;
func_80A76604(this, play);
return;
}
@@ -353,8 +353,8 @@ void func_80A767A8(EnPrz* this, PlayState* play) {
this->unk_1C8 = 1;
}
- this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) +
- randPlusMinusPoint5Scaled((2.0f * this->unk_1E6) + 1.0f);
+ this->unk_1D8.y =
+ (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + Rand_CenteredFloat((2.0f * this->unk_1E6) + 1.0f);
func_80A76070(this, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_1D8), play);
}
@@ -374,7 +374,7 @@ void func_80A76A1C(EnPrz* this) {
this->unk_1FE = this->actor.world.rot.y;
this->actor.speed = Rand_ZeroFloat(0.5f);
- this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000);
+ this->actor.world.rot.y = Rand_CenteredFloat(0x8000);
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 30);
this->unk_1EE = 50;
@@ -409,9 +409,9 @@ void func_80A76B14(EnPrz* this, PlayState* play) {
for (i = 0; i < 10; i++) {
Math_Vec3f_Copy(&sp6C, &this->actor.world.pos);
- sp6C.x += randPlusMinusPoint5Scaled(20.0f);
- sp6C.y += randPlusMinusPoint5Scaled(5.0f);
- sp6C.z += randPlusMinusPoint5Scaled(20.0f);
+ sp6C.x += Rand_CenteredFloat(20.0f);
+ sp6C.y += Rand_CenteredFloat(5.0f);
+ sp6C.z += Rand_CenteredFloat(20.0f);
EffectSsBubble_Spawn(play, &sp6C, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f);
}
@@ -473,9 +473,9 @@ void EnPrz_Update(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&sp38, &this->unk_1CC);
this->unk_1C8 = 0;
- sp38.x += randPlusMinusPoint5Scaled(20.0f);
- sp38.y += randPlusMinusPoint5Scaled(5.0f);
- sp38.z += randPlusMinusPoint5Scaled(20.0f);
+ sp38.x += Rand_CenteredFloat(20.0f);
+ sp38.y += Rand_CenteredFloat(5.0f);
+ sp38.z += Rand_CenteredFloat(20.0f);
EffectSsBubble_Spawn(play, &sp38, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f);
}
@@ -506,7 +506,7 @@ void EnPrz_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_1EC == 255) {
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c
index cef354c70..7a507e0ef 100644
--- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c
+++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c
@@ -26,7 +26,7 @@ typedef enum {
typedef enum {
/* 0 */ POSTBOX_BEHAVIOUR_WAIT_FOR_ITEM,
- /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM,
+ /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM
} PostboxBehaviour;
static u8 D_80B2C200[] = {
@@ -162,15 +162,15 @@ void EnPst_UpdateCollision(EnPst* this, PlayState* play) {
s32 EnPst_HandleLetterDay1(EnPst* this) {
switch (this->actor.params) {
case POSTBOX_SOUTH_UPPER_CLOCKTOWN:
- return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_02);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN);
case POSTBOX_NORTH_CLOCKTOWN:
- return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_04);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN);
case POSTBOX_EAST_UPPER_CLOCKTOWN:
- return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_08);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN);
case POSTBOX_EAST_LOWER_CLOCKTOWN:
- return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_10);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN);
case POSTBOX_SOUTH_LOWER_CLOCKTOWN:
- return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_20);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN);
default:
return false;
}
@@ -436,7 +436,7 @@ void EnPst_Draw(Actor* thisx, PlayState* play) {
EnPst* this = THIS;
if (this->scheduleResult != POSTBOX_SCH_NONE) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnPst_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.h b/src/overlays/actors/ovl_En_Pst/z_en_pst.h
index 6051924da..c3ebd58a8 100644
--- a/src/overlays/actors/ovl_En_Pst/z_en_pst.h
+++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.h
@@ -9,7 +9,7 @@ typedef enum {
/* 1 */ POSTBOX_NORTH_CLOCKTOWN,
/* 2 */ POSTBOX_EAST_UPPER_CLOCKTOWN,
/* 3 */ POSTBOX_EAST_LOWER_CLOCKTOWN,
- /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN,
+ /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN
} PostboxType;
struct EnPst;
diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c
index a8e222bec..6b0dcd60a 100644
--- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c
+++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c
@@ -62,13 +62,13 @@ void EnRacedog_PlaySfxWalk(EnRacedog* this);
* Stores various information for each dog in the race, mostly related to speed.
*/
typedef struct {
- f32 sprintSpeedMultiplier; // Target speed is multiplied by this when the dog is in the last 1/4 of the race
- f32 goodConditionSpeedMultiplier; // Target speed is multiplied by this if the dog is in good condition
- s16 color; // The dog's color, which is used as an index into sBaseSpeeds
- s16 index; // The dog's index within sDogInfo
- s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, the second value in sBaseSpeeds is used
- s16 textId; // Used to determine the dog's condition
-} RaceDogInfo;
+ /* 0x0 */ f32 sprintSpeedMultiplier; // Multiplies target speed when the dog is in the last 1/4 of the race
+ /* 0x4 */ f32 goodConditionSpeedMultiplier; // Multiplies target speed if the dog is in good condition
+ /* 0x8 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds
+ /* 0xA */ s16 index; // The dog's index within sDogInfo
+ /* 0xC */ s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, use the second sBaseSpeeds value
+ /* 0xE */ s16 textId; // Used to determine the dog's condition
+} RaceDogInfo; // size = 0x10
ActorInit En_Racedog_InitVars = {
ACTOR_EN_RACEDOG,
@@ -275,8 +275,8 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ)
if (path != NULL) {
point = Lib_SegmentedToVirtual(path->points);
point = &point[pointIndex];
- diffXRand = (randPlusMinusPoint5Scaled(100.0f) + point->x) - pos->x;
- diffZRand = (randPlusMinusPoint5Scaled(100.0f) + point->z) - pos->z;
+ diffXRand = (Rand_CenteredFloat(100.0f) + point->x) - pos->x;
+ diffZRand = (Rand_CenteredFloat(100.0f) + point->z) - pos->z;
diffX = point->x - pos->x;
diffZ = point->z - pos->z;
} else {
@@ -313,7 +313,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH_INDEX(&this->actor), ENRACEDOG_PATH_INDEX_NONE);
Actor_SetScale(&this->actor, 0.0075f);
this->actor.gravity = -3.0f;
if (ENRACEDOG_GET_INDEX(&this->actor) < RACEDOG_COUNT) {
@@ -474,9 +474,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) {
// The dog is past the very start, but is still less than 1/4th of the way through the race track.
// This code will give the blue dog a higher base speed than any other dog (6.0 instead of 5.0).
if (sDogInfo[this->index].color == DOG_COLOR_BLUE) {
- this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + randPlusMinusPoint5Scaled(1.0f);
+ this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + Rand_CenteredFloat(1.0f);
} else {
- this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f);
+ this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f);
}
if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) {
@@ -485,9 +485,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) {
} else if (this->currentPoint < (quarterPathCount * 3)) {
// The dog is between 1/4th and 3/4ths of the way through the race track.
if (this->currentPoint < sDogInfo[this->index].pointToUseSecondBaseSpeed) {
- this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f);
+ this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f);
} else {
- this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + randPlusMinusPoint5Scaled(1.0f);
+ this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + Rand_CenteredFloat(1.0f);
if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) {
this->targetSpeed *= sDogInfo[this->index].goodConditionSpeedMultiplier;
@@ -497,7 +497,7 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) {
// The dog is more than 3/4ths of the way through the race track.
EnRacedog_CalculateFinalStretchTargetSpeed(this);
} else {
- this->targetSpeed = randPlusMinusPoint5Scaled(1.0f) + 5.0f;
+ this->targetSpeed = Rand_CenteredFloat(1.0f) + 5.0f;
}
}
}
@@ -628,13 +628,28 @@ s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates) {
// frontPointsCrossProduct is positive if the dog is to the left of the line formed by the front points
// crossProductTemp is positive if the dog is above the line formed by the bottom points
+ // This is checking that the dog within the region defined by front and bottom lines like so:
+ // |
+ // X | Front
+ // |
+ // --------
+ // Bottom
frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront));
crossProductTemp = (((xDistToBottomFront * zDistToBottomBack) - (xDistToBottomBack * zDistToBottomFront)));
+ //! @bug If any dog is precisely (with floating-point precision) on top of the line formed by the front points,
+ //! then frontPointsCrossProduct will be zero. This will cause this multiplication (and all future multiplications)
+ //! to be zero, which will make this function think the dog has crossed the finish line. The line formed by the
+ //! front points extends throughout the entire racetrack, so a dog can trigger this when they're not even close to
+ //! the actual finish line, causing them to finish the race incredibly early.
if (frontPointsCrossProduct * crossProductTemp < 0.0f) {
return false;
}
// crossProductTemp is positive if the dog is to the right of the line formed by the back points
+ // This is checking that the dog within the region defined by front and back lines like so:
+ // | |
+ // Back | X | Front
+ // | |
frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront));
crossProductTemp = ((xDistToBottomBack * zDistToTopBack) - (xDistToTopBack * zDistToBottomBack));
if (frontPointsCrossProduct * crossProductTemp < 0.0f) {
@@ -642,6 +657,12 @@ s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates) {
}
// crossProductTemp is positive if the dog is below the line formed by the top points
+ // This is checking that the dog within the region defined by front and top lines like so:
+ // Top
+ // --------
+ // |
+ // X | Front
+ // |
frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront));
crossProductTemp = ((xDistToTopBack * zDistToTopFront) - (xDistToTopFront * zDistToTopBack));
if (frontPointsCrossProduct * crossProductTemp < 0.0f) {
@@ -657,9 +678,9 @@ void EnRacedog_SpawnFloorDustRing(EnRacedog* this, PlayState* play) {
Vec3f pos;
if (((this->index + curFrame) % mod) == 0) {
- pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f);
+ pos.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f);
pos.y = this->actor.world.pos.y;
- pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f);
+ pos.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f);
Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true);
}
}
@@ -725,7 +746,7 @@ void EnRacedog_DrawSelectionArrow(EnRacedog* this, PlayState* play) {
if (shouldDrawSelectionArrow) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
EnRacedog_UpdateSelectionArrow(this);
Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z,
&rotation);
@@ -766,7 +787,7 @@ void EnRacedog_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h
index a8cf2a9f9..a3d9afee5 100644
--- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h
+++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h
@@ -5,7 +5,10 @@
#include "objects/object_dog/object_dog.h"
#define ENRACEDOG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5)
-#define ENRACEDOG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10)
+#define ENRACEDOG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10)
+
+#define ENRACEDOG_PATH_INDEX_NONE 0x3F
+
#define ENRACEDOG_PARAMS(index, path) ((index << 5) | (path))
/**
diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
index 6a3f1af5a..1a4024f51 100644
--- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c
+++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
@@ -40,7 +40,7 @@ typedef enum {
/* 2 */ EN_RAF_ANIM_CHEW,
/* 3 */ EN_RAF_ANIM_SPIT,
/* 4 */ EN_RAF_ANIM_CONVULSE,
- /* 5 */ EN_RAF_ANIM_DEATH,
+ /* 5 */ EN_RAF_ANIM_DEATH
} EnRafAnimation;
typedef enum {
@@ -51,7 +51,7 @@ typedef enum {
/* 4 */ EN_RAF_ACTION_EXPLODE,
/* 5 */ EN_RAF_ACTION_CONVULSE,
/* 6 */ EN_RAF_ACTION_DISSOLVE,
- /* 7 */ EN_RAF_ACTION_DORMANT,
+ /* 7 */ EN_RAF_ACTION_DORMANT
} EnRafAction;
typedef enum {
@@ -873,8 +873,8 @@ void EnRaf_TransformLimbDraw(PlayState* play2, s32 limbIndex, Actor* thisx) {
void EnRaf_Draw(Actor* thisx, PlayState* play) {
EnRaf* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, NULL, EnRaf_TransformLimbDraw, &this->dyna.actor);
@@ -895,9 +895,9 @@ void EnRaf_InitializeEffect(EnRaf* this, Vec3f* pos, Vec3f* velocity, Vec3f* acc
effect->accel = *accel;
effect->scale = scale;
effect->timer = timer;
- effect->rotation.x = randPlusMinusPoint5Scaled(30000.0f);
- effect->rotation.y = randPlusMinusPoint5Scaled(30000.0f);
- effect->rotation.z = randPlusMinusPoint5Scaled(30000.0f);
+ effect->rotation.x = Rand_CenteredFloat(30000.0f);
+ effect->rotation.y = Rand_CenteredFloat(30000.0f);
+ effect->rotation.z = Rand_CenteredFloat(30000.0f);
return;
}
}
@@ -948,7 +948,7 @@ void EnRaf_DrawEffects(EnRaf* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
if (effect->isEnabled) {
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
index 10d654cc7..a280e9bfa 100644
--- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
+++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
@@ -1143,7 +1143,7 @@ void EnRailSkb_Draw(Actor* thisx, PlayState* play) {
EnRailSkb* this = THIS;
this->limbCount = 0;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnRailSkb_OverrideLimbDraw,
EnRailSkb_PostLimbDraw, &this->actor);
if (this->drawDmgEffTimer > 0) {
diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
index 853dbfd61..9a0e1864e 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
@@ -70,18 +70,18 @@ typedef enum {
/* 16 */ EN_RAILGIBUD_ANIM_SLUMP_LOOP,
/* 17 */ EN_RAILGIBUD_ANIM_CONVULSION,
/* 18 */ EN_RAILGIBUD_ANIM_ARMS_UP_START,
- /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP,
+ /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP
} EnRailgibudAnimation;
typedef enum {
/* 0 */ EN_RAILGIBUD_TYPE_GIBDO,
- /* 1 */ EN_RAILGIBUD_TYPE_REDEAD,
+ /* 1 */ EN_RAILGIBUD_TYPE_REDEAD
} EnRailgibudType;
typedef enum {
/* 0 */ EN_RAILGIBUD_GRAB_START,
/* 1 */ EN_RAILGIBUD_GRAB_ATTACK,
- /* 2 */ EN_RAILGIBUD_GRAB_RELEASE,
+ /* 2 */ EN_RAILGIBUD_GRAB_RELEASE
} EnRailgibudGrabState;
ActorInit En_Railgibud_InitVars = {
@@ -147,7 +147,7 @@ typedef enum {
/* 0xC */ EN_RAILGIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect
/* 0xD */ EN_RAILGIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation
/* 0xE */ EN_RAILGIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact
- /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation
+ /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation
} EnRailgibudDamageEffect;
static DamageTable sDamageTable = {
@@ -196,7 +196,7 @@ void EnRailgibud_SpawnOtherGibdosAndSetPositionAndRotation(EnRailgibud* this, Pl
static s32 currentGibdoIndex = 0;
s32 nextPoint;
Vec3f targetPos;
- Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH(&this->actor)];
+ Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH_INDEX(&this->actor)];
this->points = Lib_SegmentedToVirtual(path->points);
this->currentPoint = currentGibdoIndex;
@@ -1076,7 +1076,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) {
this->limbIndex = 0;
if (this->actor.shape.shadowAlpha == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
@@ -1085,7 +1085,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnRailgibud_OverrideLimbDraw, EnRailgibud_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
index 95a2bbd7b..f9d3922c8 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
@@ -10,7 +10,7 @@ typedef void (*EnRailgibudActionFunc)(struct EnRailgibud*, PlayState*);
#define ENRAILGIBUD_GET_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x7F)
#define ENRAILGIBUD_IS_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x80)
-#define ENRAILGIBUD_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define ENRAILGIBUD_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
typedef struct EnRailgibud {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c
index 81898dfa6..e08cb5574 100644
--- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c
+++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c
@@ -32,7 +32,7 @@ void EnRat_PostDetonation(EnRat* this, PlayState* play);
typedef enum {
/* -2 */ EN_RAT_HOOK_STARTED = -2,
- /* -1 */ EN_RAT_HOOKED,
+ /* -1 */ EN_RAT_HOOKED
} EnRatHookedState;
ActorInit En_Rat_InitVars = {
@@ -70,7 +70,7 @@ static ColliderSphereInit sSphereInit = {
typedef enum {
/* 0x0 */ EN_RAT_DMGEFF_NONE,
/* 0x1 */ EN_RAT_DMGEFF_STUN,
- /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF, // Pulls the Real Bombchu towards the player
+ /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF // Pulls the Real Bombchu towards the player
} EnRatDamageEffect;
static DamageTable sDamageTable = {
@@ -230,7 +230,7 @@ s32 EnRat_UpdateFloorPoly(EnRat* this, CollisionPoly* floorPoly, PlayState* play
return false;
}
- angle = func_80086C48(normDotUp);
+ angle = Math_FAcosF(normDotUp);
if (angle < 0.001f) {
return false;
}
@@ -324,9 +324,9 @@ void EnRat_ChooseDirection(EnRat* this) {
angle -= 0x8000;
}
- angle += (s16)randPlusMinusPoint5Scaled(0x800);
+ angle += (s16)(s32)Rand_CenteredFloat(0x800);
} else {
- angle = (Rand_ZeroOne() < 0.1f) ? (s16)randPlusMinusPoint5Scaled(0x800) : 0;
+ angle = (Rand_ZeroOne() < 0.1f) ? (s16)(s32)Rand_CenteredFloat(0x800) : 0;
}
}
@@ -633,9 +633,9 @@ void EnRat_UpdateSparkOffsets(EnRat* this) {
for (i = 0; i < ARRAY_COUNT(this->sparkOffsets); i++) {
ptr = &this->sparkOffsets[i];
- ptr->x = randPlusMinusPoint5Scaled(6.0f);
- ptr->y = randPlusMinusPoint5Scaled(6.0f);
- ptr->z = randPlusMinusPoint5Scaled(6.0f);
+ ptr->x = Rand_CenteredFloat(6.0f);
+ ptr->y = Rand_CenteredFloat(6.0f);
+ ptr->z = Rand_CenteredFloat(6.0f);
}
}
@@ -740,8 +740,9 @@ void EnRat_Bounced(EnRat* this, PlayState* play) {
}
void EnRat_Explode(EnRat* this, PlayState* play) {
- EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY);
+ EnBom* bomb =
+ (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
@@ -936,14 +937,14 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gBombCapDL);
if (EN_RAT_GET_TYPE(&this->actor) == EN_RAT_TYPE_DUNGEON) {
- redModifier = fabsf(cos_rad(this->timer * (M_PI / 30.f)));
+ redModifier = fabsf(Math_CosF(this->timer * (M_PI / 30.f)));
} else {
if (this->timer >= 120) {
- redModifier = fabsf(cos_rad((this->timer % 30) * (M_PI / 30.0f)));
+ redModifier = fabsf(Math_CosF((this->timer % 30) * (M_PI / 30.0f)));
} else if (this->timer >= 30) {
- redModifier = fabsf(cos_rad((this->timer % 6) * (M_PI / 6.0f)));
+ redModifier = fabsf(Math_CosF((this->timer % 6) * (M_PI / 6.0f)));
} else {
- redModifier = fabsf(cos_rad((this->timer % 3) * (M_PI / 3.0f)));
+ redModifier = fabsf(Math_CosF((this->timer % 3) * (M_PI / 3.0f)));
}
}
@@ -960,8 +961,8 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot
void EnRat_Draw(Actor* thisx, PlayState* play) {
EnRat* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C974(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL60_XluNoCD(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnRat_OverrideLimbDraw, EnRat_PostLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.h b/src/overlays/actors/ovl_En_Rat/z_en_rat.h
index 9472e8c31..28c880a92 100644
--- a/src/overlays/actors/ovl_En_Rat/z_en_rat.h
+++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.h
@@ -21,7 +21,7 @@
*/
typedef enum {
/* 0 */ EN_RAT_TYPE_DUNGEON,
- /* 1 */ EN_RAT_TYPE_OVERWORLD,
+ /* 1 */ EN_RAT_TYPE_OVERWORLD
} EnRatType;
struct EnRat;
diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
index b8e8e4139..34fc41192 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
@@ -94,7 +94,7 @@ typedef enum {
/* 1 */ EN_RD_GRAB_INITIAL_DAMAGE,
/* 2 */ EN_RD_GRAB_ATTACK,
/* 3 */ EN_RD_GRAB_RELEASE,
- /* 4 */ EN_RD_GRAB_END,
+ /* 4 */ EN_RD_GRAB_END
} EnRdGrabState;
ActorInit En_Rd_InitVars = {
@@ -139,7 +139,7 @@ typedef enum {
/* 0xC */ EN_RD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect
/* 0xD */ EN_RD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation
/* 0xE */ EN_RD_DMGEFF_LIGHT_RAY, // Instantly kills on contact
- /* 0xF */ EN_RD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation
+ /* 0xF */ EN_RD_DMGEFF_DAMAGE // Deals damage and plays the damage animation
} EnRdDamageEffect;
static DamageTable sDamageTable = {
@@ -1338,7 +1338,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) {
this->limbIndex = 0;
if (this->alpha == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->alpha);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
@@ -1349,7 +1349,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) {
func_800BC620(&pos, &sScale, 255, play);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.h b/src/overlays/actors/ovl_En_Rd/z_en_rd.h
index f5fbf82cb..fced38e75 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h
@@ -27,7 +27,7 @@ typedef enum {
/* 4 */ EN_RD_TYPE_FROZEN, // Unused in the final game
/* 5 */ EN_RD_TYPE_SQUATTING_DANCE,
/* 6 */ EN_RD_TYPE_CLAPPING_DANCE,
- /* 7 */ EN_RD_TYPE_PIROUETTE,
+ /* 7 */ EN_RD_TYPE_PIROUETTE
} EnRdType;
typedef struct EnRd {
diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
index 64313c4be..3632efa2a 100644
--- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
+++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
@@ -205,7 +205,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeTexIndex]);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c
index d552c5605..b6407d24b 100644
--- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c
+++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c
@@ -164,12 +164,12 @@ void func_80BF3920(EnRgStruct* ptr, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 32; i++, ptr++) {
if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) {
if (!phi_fp) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL);
phi_fp = true;
}
@@ -373,11 +373,11 @@ s32 func_80BF43FC(EnRg* this) {
f32 sp88;
f32 sp84;
f32 phi_f20 = 0.0f;
- s32 temp_s7 = ENRG_GET_7F80(&this->actor);
+ s32 pathIndex = ENRG_GET_PATH_INDEX(&this->actor);
s32 phi_s4 = -1;
s32 temp_s5 = this->unk_344;
s16 phi_s6 = 0;
- s32 phi_s0 = D_80BF57E4[this->unk_344][temp_s7];
+ s32 phi_s0 = D_80BF57E4[this->unk_344][pathIndex];
do {
SubS_CopyPointFromPathCheckBounds(this->path, phi_s0 - 1, &sp9C);
@@ -390,7 +390,7 @@ s32 func_80BF43FC(EnRg* this) {
phi_s4 = phi_s0;
}
phi_s0++;
- } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][temp_s7]));
+ } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][pathIndex]));
return phi_s4;
}
@@ -589,8 +589,8 @@ void func_80BF4AB8(EnRg* this, PlayState* play) {
this->unk_326 = 0x28;
if (player->stateFlags3 & PLAYER_STATE3_1000) {
player->linearVelocity *= 0.5f;
- player->unk_B08[0] = player->linearVelocity;
- player->unk_B08[1] += player->linearVelocity * 0.05f;
+ player->unk_B08 = player->linearVelocity;
+ player->unk_B0C += player->linearVelocity * 0.05f;
if (BINANG_SUB(this->actor.yawTowardsPlayer, player->currentYaw) > 0) {
player->currentYaw += 0x2000;
} else {
@@ -741,7 +741,8 @@ void EnRg_Init(Actor* thisx, PlayState* play) {
Effect_Add(play, &this->unk_340, EFFECT_TIRE_MARK, 0, 0, &D_80BF59F0);
- this->path = SubS_GetDayDependentPath(play, ENRG_GET_7F80(&this->actor), 255, &this->unk_33C);
+ this->path =
+ SubS_GetDayDependentPath(play, ENRG_GET_PATH_INDEX(&this->actor), ENRG_PATH_INDEX_NONE, &this->unk_33C);
if (this->path != NULL) {
this->unk_33C = 1;
}
@@ -804,7 +805,7 @@ void EnRg_Update(Actor* thisx, PlayState* play) {
void func_80BF547C(EnRg* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset,
this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
@@ -856,7 +857,7 @@ void EnRg_Draw(Actor* thisx, PlayState* play) {
if (!(this->unk_310 & 0x10)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BF59F8[this->unk_31E]));
diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.h b/src/overlays/actors/ovl_En_Rg/z_en_rg.h
index 4db0b58e0..14f8e3882 100644
--- a/src/overlays/actors/ovl_En_Rg/z_en_rg.h
+++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.h
@@ -7,7 +7,9 @@ struct EnRg;
typedef void (*EnRgActionFunc)(struct EnRg*, PlayState*);
-#define ENRG_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
+#define ENRG_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF)
+
+#define ENRG_PATH_INDEX_NONE 0xFF
typedef struct {
/* 0x00 */ u8 unk_00;
diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
index ae7da7d1b..6ea51586a 100644
--- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
+++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
@@ -35,7 +35,7 @@ void EnRiverSound_Init(Actor* thisx, PlayState* play) {
this->playSound = false;
pathIndex = RS_GET_PATH_INDEX(&this->actor);
this->actor.params = RS_GET_TYPE(&this->actor);
- if (pathIndex == 0xFF) {
+ if (pathIndex == RS_PATH_INDEX_NONE) {
Actor_Kill(&this->actor);
return;
}
diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h
index eff4fbb47..ceef56fbe 100644
--- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h
+++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h
@@ -8,6 +8,8 @@ struct EnRiverSound;
#define RS_GET_TYPE(thisx) ((thisx)->params & 0xFF);
#define RS_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF);
+#define RS_PATH_INDEX_NONE 0xFF
+
// Any param not as one of these values will result in UB
typedef enum {
/* 0x00 */ RS_RIVER_STREAM,
diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
index 85086d228..cb16e5f39 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -885,7 +885,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x0C, mtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.h b/src/overlays/actors/ovl_En_Rr/z_en_rr.h
index e996cfb12..6f4178dd9 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.h
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.h
@@ -7,12 +7,12 @@ struct EnRr;
typedef void (*EnRrActionFunc)(struct EnRr*, PlayState*);
-enum {
+typedef enum {
/* 0 */ ENRR_0,
/* 1 */ ENRR_1,
/* 2 */ ENRR_2,
- /* 3 */ ENRR_3,
-};
+ /* 3 */ ENRR_3
+} EnRrParam;
typedef struct {
/* 0x00 */ f32 unk_00;
diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c
index 4f6dd1dc1..0d9ada5e0 100644
--- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c
+++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c
@@ -86,9 +86,11 @@ void EnRsn_Draw(Actor* thisx, PlayState* play) {
EnRsn* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnRsn_OverrideLimbDraw, EnRsn_PostLimbDraw, &this->actor);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c
index 527d41b99..3a4d30516 100644
--- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c
+++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c
@@ -235,7 +235,7 @@ void EnRu_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->path = SubS_GetPathByIndex(play, RU_GET_PATH(thisx), 0x3F);
+ this->path = SubS_GetPathByIndex(play, RU_GET_PATH_INDEX(thisx), RU_PATH_INDEX_NONE);
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = EnRu_DoNothing;
this->actor.gravity = -4.0f;
@@ -320,7 +320,7 @@ void EnRu_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.h b/src/overlays/actors/ovl_En_Ru/z_en_ru.h
index 081f3bbd8..7aeaea044 100644
--- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h
+++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h
@@ -4,7 +4,9 @@
#include "global.h"
#include "objects/object_ru2/object_ru2.h"
-#define RU_GET_PATH(thisx) ((thisx->params & 0x7E00) >> 9)
+#define RU_GET_PATH_INDEX(thisx) ((thisx->params & 0x7E00) >> 9)
+
+#define RU_PATH_INDEX_NONE 0x3F
struct EnRu;
diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
index e270f1515..dfff2735c 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
@@ -11,11 +11,11 @@
#define THIS ((EnRuppecrow*)thisx)
-enum {
- ENRUPPECROW_EFFECT_NONE = 0,
- ENRUPPECROW_EFFECT_ICE = 10,
- ENRUPPECROW_EFFECT_LIGHT = 20,
-};
+typedef enum {
+ /* 0x00 */ ENRUPPECROW_EFFECT_NONE = 0,
+ /* 0x0A */ ENRUPPECROW_EFFECT_ICE = 10,
+ /* 0x14 */ ENRUPPECROW_EFFECT_LIGHT = 20
+} EnRuppecrowEffect;
void EnRuppecrow_Init(Actor* thisx, PlayState* play2);
void EnRuppecrow_Destroy(Actor* thisx, PlayState* play);
@@ -153,17 +153,15 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn
if (currentPoint == 0) {
diffX = points[1].x - points[0].x;
diffZ = points[1].z - points[0].z;
+ } else if (currentPoint == (pathCount - 1)) {
+ diffX = points[pathCount - 1].x - points[pathCount - 2].x;
+ diffZ = points[pathCount - 1].z - points[pathCount - 2].z;
} else {
- if (currentPoint == (pathCount - 1)) {
- diffX = points[pathCount - 1].x - points[pathCount - 2].x;
- diffZ = points[pathCount - 1].z - points[pathCount - 2].z;
- } else {
- diffX = points[currentPoint + 1].x - points[currentPoint - 1].x;
- diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
- }
+ diffX = points[currentPoint + 1].x - points[currentPoint - 1].x;
+ diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
}
- func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -188,17 +186,15 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32
if (currentPoint == 0) {
diffX = points[0].x - points[1].x;
diffZ = points[0].z - points[1].z;
+ } else if (currentPoint == (pathCount - 1)) {
+ diffX = points[pathCount - 2].x - points[pathCount - 1].x;
+ diffZ = points[pathCount - 2].z - points[pathCount - 1].z;
} else {
- if (currentPoint == (pathCount - 1)) {
- diffX = points[pathCount - 2].x - points[pathCount - 1].x;
- diffZ = points[pathCount - 2].z - points[pathCount - 1].z;
- } else {
- diffX = points[currentPoint - 1].x - points[currentPoint + 1].x;
- diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z;
- }
+ diffX = points[currentPoint - 1].x - points[currentPoint + 1].x;
+ diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z;
}
- func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -236,19 +232,23 @@ s32 EnRuppecrow_CanSpawnBlueRupees(PlayState* play) {
switch (player->transformation) {
case PLAYER_FORM_DEKU:
return false;
+
case PLAYER_FORM_GORON:
return true;
+
case PLAYER_FORM_ZORA:
return false;
+
case PLAYER_FORM_HUMAN:
if (player->stateFlags1 & PLAYER_STATE1_800000) {
return true;
} else {
return false;
}
- }
- return false;
+ default:
+ return false;
+ }
}
void EnRuppecrow_UpdateRupees(EnRuppecrow* this) {
@@ -257,7 +257,7 @@ void EnRuppecrow_UpdateRupees(EnRuppecrow* this) {
for (rupeeIndex = 0; rupeeIndex < ENRUPPECROW_RUPEE_COUNT; rupeeIndex++) {
rupee = this->rupees[rupeeIndex];
- if (rupee != NULL && rupee->unk152 == 0) {
+ if ((rupee != NULL) && (rupee->unk152 == 0)) {
Actor_Kill(&rupee->actor);
}
}
@@ -375,16 +375,19 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) {
return true;
}
break;
+
case PLAYER_FORM_GORON:
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) {
return true;
}
break;
+
case PLAYER_FORM_ZORA:
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE) {
return true;
}
break;
+
case PLAYER_FORM_HUMAN:
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) {
return true;
@@ -394,6 +397,9 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) {
return true;
}
break;
+
+ default:
+ break;
}
}
@@ -407,6 +413,7 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
case PLAYER_FORM_DEKU:
this->speedModifier = 7.0f;
break;
+
case PLAYER_FORM_GORON:
if (player->stateFlags3 & PLAYER_STATE3_1000) { // Goron Link is curled
this->speedModifier = 19.0f;
@@ -414,9 +421,11 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
this->speedModifier = 7.0f;
}
break;
+
case PLAYER_FORM_ZORA:
this->speedModifier = 7.0f;
break;
+
case PLAYER_FORM_HUMAN:
if (player->stateFlags1 & PLAYER_STATE1_800000) {
this->speedModifier = 16.0f;
@@ -424,6 +433,9 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
this->speedModifier = 7.0f;
}
break;
+
+ default:
+ break;
}
this->skelAnime.playSpeed = this->speedModifier / 6.0f;
@@ -640,7 +652,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->actor, 0.01f);
this->actor.flags |= ACTOR_FLAG_2000000;
- this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH_INDEX(&this->actor), ENRUPPECROW_PATH_INDEX_NONE);
if (this->path != NULL) {
this->actionFunc = EnRuppecrow_HandleSong;
} else {
@@ -668,7 +680,7 @@ void EnRuppecrow_Update(Actor* thisx, PlayState* play) {
void EnRuppecrow_Draw(Actor* thisx, PlayState* play) {
EnRuppecrow* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h
index 887cd8c6b..5d591258b 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h
@@ -4,7 +4,9 @@
#include "global.h"
#include "objects/object_crow/object_crow.h"
-#define ENRUPPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENRUPPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENRUPPECROW_PATH_INDEX_NONE 0x3F
#define ENRUPPECROW_RUPEE_COUNT 20
#define ENRUPPECROW_LIMB_POS_COUNT 4
diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c
index a223fe900..e980d1cb5 100644
--- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c
+++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c
@@ -247,8 +247,8 @@ void func_80BFBA1C(PlayState* play, EnRz* this, s16 animIndex) {
}
s32 EnRz_SetupPath(EnRz* this, PlayState* play) {
- if (EN_RZ_GET_PATH(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[EN_RZ_GET_PATH(&this->actor)];
+ if (EN_RZ_GET_PATH_INDEX(&this->actor) != EN_RZ_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[EN_RZ_GET_PATH_INDEX(&this->actor)];
if (this->path != NULL) {
Path* path = this->path;
Vec3s* points = (Vec3s*)Lib_SegmentedToVirtual(path->points);
@@ -347,9 +347,9 @@ EnRz* EnRz_FindSister(EnRz* this, PlayState* play) {
void func_80BFBDFC(PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) {
- func_80151BB4(play, 0x27);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP);
}
- func_80151BB4(play, 0xC);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS);
}
void EnRz_Destroy(Actor* thisx, PlayState* play) {
@@ -686,7 +686,7 @@ void EnRz_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(&object_rz_Matanimheader_00D768), 0);
diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.h b/src/overlays/actors/ovl_En_Rz/z_en_rz.h
index c6d8fe3c8..a29f6d5c2 100644
--- a/src/overlays/actors/ovl_En_Rz/z_en_rz.h
+++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.h
@@ -6,7 +6,9 @@
#define EN_RZ_GET_SISTER(thisx) ((thisx)->params & 0x8000)
#define EN_RZ_GET_TYPE(thisx) ((thisx)->params & 0xF)
-#define EN_RZ_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
+#define EN_RZ_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9)
+
+#define EN_RZ_PATH_INDEX_NONE 0x3F
typedef enum {
/* 0 */ EN_RZ_JUDO, // in red
diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c
index 14904e5b7..cd3e1f65f 100644
--- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c
+++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c
@@ -171,12 +171,12 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronStandingHandTappingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gGoronSleepyAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
@@ -235,7 +235,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) {
case EN_S_GORO_TYPE_SHRINE_WINTER_A:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) {
switch (this->textId) {
@@ -302,7 +302,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_B:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) {
switch (this->textId) {
@@ -367,7 +367,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_C:
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
if (player->transformation == PLAYER_FORM_GORON) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) {
switch (this->textId) {
@@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1);
}
}
- } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SUPPRESS_SNORE;
}
@@ -842,7 +842,7 @@ s32 EnSGoro_CheckGKBehavior(EnSGoro* this, PlayState* play) {
return false;
}
if ((!(this->actionFlags & EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED)) &&
- ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
+ ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP;
@@ -1026,7 +1026,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) {
this->actionFlags = 0;
if (EN_S_GORO_OFTYPE_WSHRINE) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN;
this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A;
@@ -1350,7 +1350,7 @@ s32 EnSGoro_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 ste
Matrix_MultVec3f(&zeroVec, &newPos);
Matrix_Get(&curState);
- Matrix_MtxFToYXZRot(&curState, &newRot, MTXMODE_NEW);
+ Matrix_MtxFToYXZRot(&curState, &newRot, false);
*pos = newPos;
@@ -1435,9 +1435,10 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x8, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
gDPPipeSync(POLY_OPA_DISP++);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
@@ -1449,7 +1450,8 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) {
void EnSGoro_DrawRolledUp(EnSGoro* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset,
this->actor.world.pos.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c
index b34ee8c64..38d82ed9a 100644
--- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c
+++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c
@@ -337,7 +337,7 @@ void EnSb_UpdateDamage(EnSb* this, PlayState* play) {
}
if (hitPlayer) {
this->unk_252 = 0;
- if ((this->actor.draw != NULL) && (this->isDrawn == false)) {
+ if ((this->actor.draw != NULL) && !this->isDrawn) {
this->isDrawn = true;
}
this->isDead = true;
@@ -417,9 +417,9 @@ void EnSb_Draw(Actor* thisx, PlayState* play) {
fireDecr = this->fireCount - 1;
if (!(fireDecr & 1)) {
offset = &sFlamePosOffsets[fireDecr & 3];
- flamePos.x = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.x + offset->x);
- flamePos.y = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.y + offset->y);
- flamePos.z = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.z + offset->z);
+ flamePos.x = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.x + offset->x);
+ flamePos.y = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.y + offset->y);
+ flamePos.z = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.z + offset->z);
EffectSsEnFire_SpawnVec3f(play, &this->actor, &flamePos, 100, 0, 0, -1);
}
}
diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c
index be449e0a3..5a3dc440a 100644
--- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c
+++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c
@@ -21,7 +21,7 @@ void func_80BD6B18(EnScRuppe* this, PlayState* play);
typedef struct {
/* 0x0 */ TexturePtr tex;
/* 0x4 */ s16 amount;
-} RuppeInfo;
+} RuppeInfo; // size = 0x8
ActorInit En_Sc_Ruppe_InitVars = {
ACTOR_EN_SC_RUPPE,
@@ -181,7 +181,7 @@ void EnScRuppe_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeInfo[this->ruppeIndex].tex));
diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h
index 8ef0f4c56..afc955985 100644
--- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h
+++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h
@@ -23,7 +23,7 @@ typedef enum {
/* 2 */ RUPEE_RED,
/* 3 */ RUPEE_ORANGE,
/* 4 */ RUPEE_PURPLE,
- /* 5 */ RUPEE_UNUSED,
+ /* 5 */ RUPEE_UNUSED
} RupeeType;
#endif // Z_EN_SC_RUPPE_H
diff --git a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c
index d2a9d525e..4ef4fdd46 100644
--- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c
+++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c
@@ -90,7 +90,7 @@ void EnScopecoin_Draw(Actor* thisx, PlayState* play) {
EnScopecoin* this = THIS;
GraphicsContext* gfxCtx = play->state.gfxCtx;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
func_800B8050(&this->actor, play, 0);
OPEN_DISPS(gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c
index 321c790d1..448683376 100644
--- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c
+++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c
@@ -192,7 +192,7 @@ s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) {
phi_fa1 = points[index + 1].z - points[index - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x);
if (((this->actor.world.pos.x * sp3C.z) + (sp3C.y * this->actor.world.pos.z) + sp3C.x) > 0.0f) {
ret = true;
@@ -276,7 +276,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) {
}
if (func_80BCD09C(this->unk_260)) {
- this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE);
this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor);
if (this->path != NULL) {
@@ -316,7 +316,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) {
this->collider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
Actor_SetScale(&this->actor, 0.03f);
- this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE);
this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor);
if (this->path != NULL) {
@@ -354,7 +354,7 @@ void EnScopecrow_Update(Actor* thisx, PlayState* play) {
void EnScopecrow_Draw(Actor* thisx, PlayState* play) {
EnScopecrow* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h
index 30f002fb5..523d28804 100644
--- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h
+++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h
@@ -10,7 +10,9 @@ typedef void (*EnScopecrowActionFunc)(struct EnScopecrow*, PlayState*);
#define ENSCOPECROW_GET_1F(thisx) ((thisx)->params & 0x1F)
#define ENSCOPECROW_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5)
-#define ENSCOPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENSCOPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENSCOPECROW_PATH_INDEX_NONE 0x3F
typedef struct EnScopecrow {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
index 07e2646a0..cf634321e 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
@@ -654,7 +654,7 @@ s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) {
phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
sp50 = true;
@@ -708,7 +708,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) {
Actor_Kill(&this->actor);
} else if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
- this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F);
+ this->path =
+ SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE);
this->actor.draw = NULL;
this->actionFunc = func_80BCAFA8;
this->actor.gravity = 0.0f;
@@ -717,7 +718,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
}
} else if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_1) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) {
- this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F);
+ this->path =
+ SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE);
if (this->path == NULL) {
Actor_Kill(&this->actor);
} else {
@@ -823,7 +825,7 @@ void EnScopenuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx)
void EnScopenuts_Draw(Actor* thisx, PlayState* play) {
EnScopenuts* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnScopenuts_OverrideLimbDraw, EnScopenuts_PostLimbDraw,
EnScopenuts_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
index ef2ea74d8..3f1b8b84e 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
@@ -8,7 +8,9 @@ struct EnScopenuts;
typedef void (*EnScopenutsActionFunc)(struct EnScopenuts*, PlayState*);
#define ENSCOPENUTS_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5)
-#define ENSCOPENUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENSCOPENUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENSCOPENUTS_PATH_INDEX_NONE 0x3F
#define ENSCOPENUTS_3E0_0 0
#define ENSCOPENUTS_3E0_1 1
diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c
index 8835d92da..909510329 100644
--- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c
+++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c
@@ -228,7 +228,8 @@ void func_8094702C(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl
if (BREG(57) != 0) {
for (shadowTextureTemp = shadowTexture, i = 0; i < 0x1000; i++, shadowTextureTemp++) {
- if ((i >= 0 && i < 0x40) || (i >= 0xFC0 && i < 0x1000) || ((i & 0x3F) == 0) || ((i & 0x3F) == 0x3F)) {
+ if (((i >= 0) && (i < 0x40)) || ((i >= 0xFC0) && (i < 0x1000)) || ((i & 0x3F) == 0) ||
+ ((i & 0x3F) == 0x3F)) {
*shadowTextureTemp = 255;
} else {
*shadowTextureTemp = 0;
@@ -323,7 +324,7 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 0, 0, 0, (BREG(52) + 50));
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0);
@@ -352,6 +353,4 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) {
}
CLOSE_DISPS(gfxCtx);
-
- if (1) {}
}
diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
index 538f7d304..1e1f19d70 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
@@ -177,12 +177,12 @@ void EnSekihi_Draw(Actor* thisx, PlayState* play) {
if (this->xluDList != NULL) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, this->xluDList);
}
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->opaDList);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
index 871bb85a8..73edc4267 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
@@ -916,7 +916,7 @@ s32 func_80ADCE4C(EnSellnuts* this, Path* path, s32 arg2) {
pointY = points[var + 1].z - points[var - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(pointX, pointY)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
}
@@ -958,7 +958,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f);
- this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_PATH_INDEX(&this->actor), ENSELLNUTS_PATH_INDEX_NONE);
this->csId = this->actor.csId;
Actor_SetScale(&this->actor, 0.01f);
this->actor.colChkInfo.cylRadius = 0;
@@ -1138,7 +1138,7 @@ void EnSellnuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx)
void EnSellnuts_Draw(Actor* thisx, PlayState* play) {
EnSellnuts* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnSellnuts_OverrideLimbDraw, EnSellnuts_PostLimbDraw,
EnSellnuts_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
index 3acf7a3e0..d56c04f9e 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
@@ -8,7 +8,9 @@ struct EnSellnuts;
typedef void (*EnSellnutsActionFunc)(struct EnSellnuts*, PlayState*);
#define ENSELLNUTS_GET_1(thisx) ((thisx)->params & 1)
-#define ENSELLNUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENSELLNUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENSELLNUTS_PATH_INDEX_NONE 0x3F
typedef struct EnSellnuts {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c
index bdd5b787f..643509515 100644
--- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c
+++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c
@@ -436,7 +436,7 @@ void EnShn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
void EnShn_Draw(Actor* thisx, PlayState* play) {
EnShn* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, EnShn_OverrideLimbDraw, EnShn_PostLimbDraw,
EnShn_TransformLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
index 735111a2b..a8167009c 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -165,10 +165,10 @@ void func_809947B0(PlayState* play, EnSkb* this, Vec3f* inPos) {
s32 pad;
pos.y = this->actor.floorHeight;
- pos.x = (sin_rad(sp40) * 15.0f) + inPos->x;
- pos.z = (cos_rad(sp40) * 15.0f) + inPos->z;
- accel.x = randPlusMinusPoint5Scaled(1.0f);
- accel.z = randPlusMinusPoint5Scaled(1.0f);
+ pos.x = (Math_SinF(sp40) * 15.0f) + inPos->x;
+ pos.z = (Math_CosF(sp40) * 15.0f) + inPos->z;
+ accel.x = Rand_CenteredFloat(1.0f);
+ accel.z = Rand_CenteredFloat(1.0f);
velocity.y += (Rand_ZeroOne() - 0.5f) * 4.0f;
EffectSsHahen_Spawn(play, &pos, &velocity, &accel, 0, ((Rand_ZeroOne() * 5.0f) + 12.0f) * 0.8f,
HAHEN_OBJECT_DEFAULT, 10, NULL);
@@ -579,7 +579,7 @@ void func_80995A8C(EnSkb* this, PlayState* play) {
}
if ((this->unk_3D8 != 0) && ((play->gameplayFrames % 16) == 0)) {
- this->unk_3DA = randPlusMinusPoint5Scaled(50000.0f);
+ this->unk_3DA = Rand_CenteredFloat(50000.0f);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer + this->unk_3DA, 1, 0x2EE, 0);
@@ -742,11 +742,11 @@ void func_809961E4(EnSkb* this, PlayState* play) {
}
void func_80996284(EnSkb* this, PlayState* play) {
- if (this->unk_3D8 & 0x80) {
- if (1) {}
- Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10);
- func_80996474(this);
+ if (!(this->unk_3D8 & 0x80)) {
+ return;
}
+ Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10);
+ func_80996474(this);
}
void func_809962D4(EnSkb* this) {
@@ -982,22 +982,22 @@ void func_8099672C(EnSkb* this, PlayState* play) {
}
void func_80996AD0(EnSkb* this, PlayState* play) {
- if (1) {}
+ if ((this->actionFunc == func_80996284) || (this->unk_3E2 == 1)) {
+ return;
+ }
- if ((this->actionFunc != func_80996284) && (this->unk_3E2 != 1)) {
- if (this->unk_3E4 != 0) {
- CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
- }
+ if (this->unk_3E4 != 0) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ }
- if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) &&
- (this->unk_3DE != 6) && (this->unk_3DE != 7) &&
- ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) {
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- }
+ if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) &&
+ (this->unk_3DE != 6) && (this->unk_3DE != 7) &&
+ ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
- if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) {
- CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- }
+ if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) {
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
}
@@ -1131,7 +1131,7 @@ void EnSkb_Draw(Actor* thisx, PlayState* play) {
EnSkb* this = THIS;
this->limbCount = 0;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSkb_OverrideLimbDraw,
EnSkb_PostLimbDraw, &this->actor);
if (this->drawDmgEffTimer > 0) {
diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.h b/src/overlays/actors/ovl_En_Skb/z_en_skb.h
index 1fbf441ea..1970ebf8c 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.h
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.h
@@ -10,8 +10,8 @@ typedef void (*EnSkbActionFunc)(struct EnSkb*, PlayState*);
#define ENSKB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
typedef enum {
- /* 0 */ ENSKB_PARAMS_0,
-} EnSkbParams;
+ /* 0 */ ENSKB_PARAM_0
+} EnSkbParam;
typedef struct EnSkb {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c
index 3aab4b3ce..6675f6b45 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c
@@ -28,7 +28,7 @@ typedef enum EnSlimeDamageEffect {
/* 0x4 */ EN_SLIME_DMGEFF_LIGHT,
/* 0x5 */ EN_SLIME_DMGEFF_ELECTRIC,
/* 0xE */ EN_SLIME_DMGEFF_HOOKSHOT = 0xE,
- /* 0xF */ EN_SLIME_DMGEFF_BLUNT,
+ /* 0xF */ EN_SLIME_DMGEFF_BLUNT
} EnSlimeDamageEffect;
void EnSlime_Init(Actor* thisx, PlayState* play);
@@ -328,15 +328,15 @@ void EnSlime_Idle(EnSlime* this, PlayState* play) {
timerFactor = sqrtf(this->timer) * 0.2f;
EnSlime_Blink(this);
- scale = ((sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f;
+ scale = ((Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f;
this->actor.scale.x = scale;
this->actor.scale.z = scale;
if (this->timer < 24) {
- this->actor.scale.y = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f;
+ this->actor.scale.y = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f;
}
- this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor;
- this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor;
+ this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor;
+ this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor;
// If player is not wearing the stone mask, is within 280 units of the chuchu,
// and the chuchu is facing the player, initialize chase/attack cycle.
@@ -361,7 +361,7 @@ void EnSlime_SetupMoveInDirection(EnSlime* this) {
if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) {
this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
} else if (Rand_ZeroOne() < 0.7f) {
- this->idleRotY = (s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.shape.rot.y;
+ this->idleRotY = (s32)Rand_CenteredFloat(0x4000) + this->actor.shape.rot.y;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnSlime_MoveInDirection;
@@ -390,7 +390,7 @@ void EnSlime_MoveInDirection(EnSlime* this, PlayState* play) {
}
// Update actor scale, xz speed, and rotation to provide amorphous effect
- sinFactor = fabsf(sin_rad(this->timer * (M_PI / 24)));
+ sinFactor = fabsf(Math_SinF(this->timer * (M_PI / 24)));
Math_StepToF(&this->actor.scale.z, ((0.15f * sinFactor) + 1.0f) * 0.01f, 0.0002f);
Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * sinFactor)) * 0.01f, 0.0002f);
Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * sinFactor)) * 0.01f, 0.0002f);
@@ -443,7 +443,7 @@ void EnSlime_MoveToHome(EnSlime* this, PlayState* play) {
this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
- timerFactor = fabsf(sin_rad(this->timer * (M_PI / 24)));
+ timerFactor = fabsf(Math_SinF(this->timer * (M_PI / 24)));
Math_StepToF(&this->actor.scale.z, ((0.15f * timerFactor) + 1.0f) * 0.01f, 0.0002f);
Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * timerFactor)) * 0.01f, 0.0002f);
Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * timerFactor)) * 0.01f, 0.0002f);
@@ -567,14 +567,14 @@ void EnSlime_Land(EnSlime* this, PlayState* play) {
this->timer--;
scaleY = ((this->timer / 5) + 1) * 1.6f;
rotXZ = sqrtf(this->timer) * 0.2f;
- scaleXZ = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f;
+ scaleXZ = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f;
this->actor.scale.x = scaleXZ;
this->actor.scale.z = scaleXZ;
if (this->timer < 15) {
- this->actor.scale.y = (1.0f - (sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f;
+ this->actor.scale.y = (1.0f - (Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f;
}
- this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * rotXZ;
- this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * rotXZ;
+ this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * rotXZ;
+ this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * rotXZ;
if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) {
EnSlime_SetupMoveToHome(this);
@@ -623,16 +623,16 @@ void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play) {
Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
timerFactor = sqrtf(this->timer);
if (this->timer < 30) {
- scale = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f;
+ scale = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f;
this->actor.scale.x = scale;
this->actor.scale.z = scale;
}
if (this->timer == 15) {
this->collider.base.acFlags |= AC_ON;
}
- this->actor.scale.y = ((sin_rad((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f;
- this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor;
- this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor;
+ this->actor.scale.y = ((Math_SinF((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f;
+ this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor;
+ this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor;
if (this->timer == 0) {
if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) {
@@ -680,9 +680,9 @@ void EnSlime_SetupDamaged(EnSlime* this, PlayState* play, s32 arg2) {
EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 550);
for (i = 0; i < 10; i++) {
- effectPos.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x + ySin;
- effectPos.y = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.y + 40.0f;
- effectPos.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z + yCos;
+ effectPos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x + ySin;
+ effectPos.y = Rand_CenteredFloat(10.0f) + this->actor.world.pos.y + 40.0f;
+ effectPos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z + yCos;
effectVelocity.x = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_SinS(this->actor.world.rot.y);
effectVelocity.z = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_CosS(this->actor.world.rot.y);
@@ -1120,7 +1120,9 @@ void EnSlime_Update(Actor* thisx, PlayState* play) {
if (this->collider.base.ocFlags1 & OC1_ON) {
Actor_MoveWithGravity(thisx);
- Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
Collider_UpdateCylinder(thisx, &this->collider);
@@ -1168,8 +1170,8 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
if (this->iceBlockTimer != ICE_BLOCK_UNUSED) {
gSPSegment(POLY_XLU_DISP++, 10, D_801AEFA0);
@@ -1184,9 +1186,9 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) {
}
if (this->actionFunc == EnSlime_Damaged) {
- wobbleScale.x = 1.0f - (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f);
- wobbleScale.y = (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f;
- wobbleScale.z = 1.0f - (cos_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f);
+ wobbleScale.x = 1.0f - (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f);
+ wobbleScale.y = (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f;
+ wobbleScale.z = 1.0f - (Math_CosF((f32)this->timer * (M_PI / 2.0f)) * 0.3f);
Matrix_RotateXFApply(this->wobbleRot.x);
Matrix_RotateZF(this->wobbleRot.z, MTXMODE_APPLY);
@@ -1229,7 +1231,7 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) {
if ((this->actor.params != EN_SLIME_TYPE_BLUE) && (this->actor.scale.x > 0.0f)) {
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (2000.0f * this->actor.scale.y),
this->actor.world.pos.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.h b/src/overlays/actors/ovl_En_Slime/z_en_slime.h
index 0a40a117e..130c442de 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h
@@ -42,7 +42,7 @@ typedef enum EnSlimeType {
/* 0 */ EN_SLIME_TYPE_BLUE,
/* 1 */ EN_SLIME_TYPE_GREEN,
/* 2 */ EN_SLIME_TYPE_YELLOW,
- /* 3 */ EN_SLIME_TYPE_RED,
+ /* 3 */ EN_SLIME_TYPE_RED
} EnSlimeType;
#endif // Z_EN_SLIME_H
diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c
index baf3ccdfa..e22a5a73b 100644
--- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c
+++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c
@@ -58,7 +58,7 @@ typedef enum {
// Indicates that either this Eeno is shrinking having been absorbed by another Eeno, or that
// this Eeno is a fully-combined large Eeno and is done trying to combine with other split
// Eenos. In both cases, this Eeno cannot be absorbed by any other Eeno.
- /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE,
+ /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE
} EnSnowmanCombineState;
ActorInit En_Snowman_InitVars = {
@@ -119,7 +119,7 @@ typedef enum {
/* 0x2 */ EN_SNOWMAN_DMGEFF_MELT,
/* 0x4 */ EN_SNOWMAN_DMGEFF_LIGHT_ORB = 0x4,
/* 0x5 */ EN_SNOWMAN_DMGEFF_ELECTRIC_STUN,
- /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF, // Damages small Eenos, pulls the player towards large Eenos
+ /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF // Damages small Eenos, pulls the player towards large Eenos
} EnTalkGibudDamageEffect;
static DamageTable sDamageTable = {
@@ -475,18 +475,18 @@ void EnSnowman_ReadySnowball(EnSnowman* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000);
if ((EN_SNOWMAN_GET_TYPE(&this->actor) != EN_SNOWMAN_TYPE_LARGE) && this->isHoldingSnowball &&
((play->gameplayFrames % 2) != 0)) {
- pos.x = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.x;
- pos.y = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.y;
- pos.z = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.z;
+ pos.x = Rand_CenteredFloat(10.0f) + this->snowballPos.x;
+ pos.y = Rand_CenteredFloat(10.0f) + this->snowballPos.y;
+ pos.z = Rand_CenteredFloat(10.0f) + this->snowballPos.z;
func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 500, 30);
} else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
if ((this->skelAnime.curFrame > 3.0f) && (this->skelAnime.curFrame < 14.0f) &&
((play->gameplayFrames % 2) != 0)) {
- pos.x = (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) +
- randPlusMinusPoint5Scaled(40.0f);
- pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(20.0f);
- pos.z = (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) +
- randPlusMinusPoint5Scaled(40.0f);
+ pos.x =
+ (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f);
+ pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f);
+ pos.z =
+ (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f);
func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 1000, 150);
}
}
@@ -619,8 +619,8 @@ void EnSnowman_Melt(EnSnowman* this, PlayState* play) {
this->work.timer--;
if ((this->work.timer >= 38) && (!(this->work.timer & 1))) {
smokeVelocity.y = (this->work.timer - 38) * (1.0f / 12.0f);
- smokeVelocity.x = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y;
- smokeVelocity.z = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y;
+ smokeVelocity.x = Rand_CenteredFloat(1.5f) * smokeVelocity.y;
+ smokeVelocity.z = Rand_CenteredFloat(1.5f) * smokeVelocity.y;
smokeVelocity.y += 0.8f;
smokePos.x = ((smokeVelocity.x >= 0.0f ? 1.0f : -1.0f) * Rand_ZeroFloat(20.0f) * this->eenoScale) +
this->actor.world.pos.x;
@@ -1182,7 +1182,7 @@ void EnSnowman_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
void EnSnowman_Draw(Actor* thisx, PlayState* play) {
EnSnowman* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
EnSnowman_PostLimbDraw, &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos),
@@ -1192,7 +1192,7 @@ void EnSnowman_Draw(Actor* thisx, PlayState* play) {
void EnSnowman_DrawSnowPile(Actor* thisx, PlayState* play) {
EnSnowman* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->snowPileSkelAnime.skeleton, this->snowPileSkelAnime.jointTable,
this->snowPileSkelAnime.dListCount, NULL, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h
index da0c0a30a..55285fec8 100644
--- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h
+++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h
@@ -12,7 +12,7 @@ typedef enum {
/* 1 */ EN_SNOWMAN_TYPE_LARGE,
/* 2 */ EN_SNOWMAN_TYPE_SPLIT,
/* 3 */ EN_SNOWMAN_TYPE_SMALL_SNOWBALL,
- /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL,
+ /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL
} EnSnowmanType;
struct EnSnowman;
diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
index 48a1cfea0..5823e728f 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
@@ -5,6 +5,7 @@
*/
#include "z_en_snowwd.h"
+#include "objects/object_snowwd/object_snowwd.h"
#define FLAGS 0x00000000
@@ -17,7 +18,6 @@ void EnSnowwd_Draw(Actor* thisx, PlayState* play);
void func_80AF76F0(EnSnowwd* this, PlayState* play);
-#if 0
ActorInit En_Snowwd_InitVars = {
ACTOR_EN_SNOWWD,
ACTORCAT_PROP,
@@ -30,25 +30,107 @@ ActorInit En_Snowwd_InitVars = {
(ActorFunc)EnSnowwd_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80AF7A90 = {
- { COLTYPE_TREE, AT_NONE, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK5, { 0x00000000, 0x00, 0x00 }, { 0x0100020A, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_TREE,
+ AT_NONE,
+ AC_ON | AC_HARD | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK5,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x0100020A, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 18, 60, 0, { 0, 0, 0 } },
};
-#endif
+Vec3f D_80AF7ABC = { 0.0f, 0.0f, 0.0f };
-extern ColliderCylinderInit D_80AF7A90;
+Vec3f D_80AF7AC8 = { 0.0f, -4.0f, 0.0f };
-extern UNK_TYPE D_06001AA0;
+Color_RGBA8 D_80AF7AD4 = { 255, 255, 255, 255 };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Init.s")
+Color_RGBA8 D_80AF7AD8 = { 200, 200, 220, 0 };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Destroy.s")
+void EnSnowwd_Init(Actor* thisx, PlayState* play) {
+ EnSnowwd* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/func_80AF76F0.s")
+ this->actor.home.rot.z = 0;
+ this->actor.home.rot.y = 0;
+ this->unk190 = 0;
+ this->actor.uncullZoneForward = 4000.0f;
+ this->actor.uncullZoneScale = 2000.0f;
+ this->actor.uncullZoneDownward = 2400.0f;
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ Actor_SetScale(&this->actor, 1.0f);
+ this->actionFunc = func_80AF76F0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Update.s")
+void EnSnowwd_Destroy(Actor* thisx, PlayState* play) {
+ EnSnowwd* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Draw.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
+
+void func_80AF76F0(EnSnowwd* this, PlayState* play) {
+ s32 pad;
+ Actor* thisx = &this->actor;
+ f32 sp54;
+ Vec3f sp48;
+
+ if (this->collider.base.acFlags & AC_HIT) {
+ this->collider.base.acFlags &= ~AC_HIT;
+ Actor_PlaySfx(thisx, NA_SE_IT_REFLECTION_WOOD);
+ }
+ if (thisx->home.rot.y != 0) {
+ this->unk190 = 0x15;
+ thisx->home.rot.y = 0;
+ if (thisx->home.rot.z == 0) {
+ if (SNOWWD_GET_PARAM_F80(&this->actor) < 0x10) {
+ sp48 = thisx->world.pos;
+ sp48.y += 200.0f;
+ Item_DropCollectibleRandom(play, NULL, &sp48, SNOWWD_GET_PARAM_F80(&this->actor) * 0x10);
+ }
+ thisx->home.rot.z = 1;
+ }
+ }
+ if (thisx->xzDistToPlayer < 600.0f) {
+ Collider_UpdateCylinder(thisx, &this->collider);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+ if (this->unk190 > 0) {
+ this->unk190--;
+ sp54 = Math_SinS((s16)((this->unk190 ^ 0xFFFF) * 0x3332)) * 250.0f;
+ thisx->shape.rot.x = (s16)(Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54);
+ thisx->shape.rot.z = (s16)(Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54);
+ sp48 = thisx->world.pos;
+ sp48.x += Rand_CenteredFloat(80.0f);
+ sp48.y += 100.0f + Rand_ZeroFloat(30.0f);
+ sp48.z += Rand_CenteredFloat(80.0f);
+ func_800B0EB0(play, &sp48, &D_80AF7AC8, &D_80AF7ABC, &D_80AF7AD4, &D_80AF7AD8, 200, 10, 20);
+ }
+}
+
+void EnSnowwd_Update(Actor* thisx, PlayState* play) {
+ EnSnowwd* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+void EnSnowwd_Draw(Actor* thisx, PlayState* play) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gSnowTreeSnowLeavesTex));
+ gSPDisplayList(POLY_OPA_DISP++, gSnowTreeDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
index a83e5d05a..d336cb252 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
@@ -3,13 +3,16 @@
#include "global.h"
+#define SNOWWD_GET_PARAM_F80(thisx) (((thisx)->params & 0xF80) >> 7)
+
struct EnSnowwd;
typedef void (*EnSnowwdActionFunc)(struct EnSnowwd*, PlayState*);
typedef struct EnSnowwd {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x50];
+ /* 0x144 */ ColliderCylinder collider;
+ /* 0x190 */ s16 unk190;
/* 0x194 */ EnSnowwdActionFunc actionFunc;
} EnSnowwd; // size = 0x198
diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
index a23600fb9..3cd33653b 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
@@ -176,7 +176,7 @@ void EnSob1_SetupAction(EnSob1* this, EnSob1ActionFunc action) {
s32 EnSob1_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) {
+ if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -188,7 +188,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->shopType == BOMB_SHOP) {
- if (gSaveContext.save.day == 1 && gSaveContext.save.time >= CLOCK_TIME(6, 00)) {
+ if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 00))) {
return 0x648;
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
return 0x649;
@@ -199,10 +199,13 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) {
switch (player->transformation) {
case PLAYER_FORM_DEKU:
return 0x12D8;
+
case PLAYER_FORM_GORON:
return 0x12D9;
+
case PLAYER_FORM_ZORA:
return 0x12DA;
+
default:
return 0x12D7;
}
@@ -405,6 +408,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) {
case ZORA_SHOP:
this->shopType = ZORA_SHOP;
break;
+
case GORON_SHOP:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
this->shopType = GORON_SHOP_SPRING;
@@ -412,9 +416,11 @@ void EnSob1_Init(Actor* thisx, PlayState* play) {
this->shopType = GORON_SHOP;
}
break;
+
case BOMB_SHOP:
this->shopType = BOMB_SHOP;
break;
+
default:
Actor_Kill(&this->actor);
return;
@@ -579,10 +585,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) {
s8 stickY = CONTROLLER1(&play->state)->rel.stick_y;
if (this->stickAccumX == 0) {
- if (stickX > 30 || stickX < -30) {
+ if ((stickX > 30) || (stickX < -30)) {
this->stickAccumX = stickX;
}
- } else if (stickX <= 30 && stickX >= -30) {
+ } else if ((stickX <= 30) && (stickX >= -30)) {
this->stickAccumX = 0;
} else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions
this->stickAccumX = stickX;
@@ -595,10 +601,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) {
}
}
if (this->stickAccumY == 0) {
- if (stickY > 30 || stickY < -30) {
+ if ((stickY > 30) || (stickY < -30)) {
this->stickAccumY = stickY;
}
- } else if (stickY <= 30 && stickY >= -30) {
+ } else if ((stickY <= 30) && (stickY >= -30)) {
this->stickAccumY = 0;
} else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions
this->stickAccumY = stickY;
@@ -646,6 +652,7 @@ s32 EnSob1_FacingShopkeeperDialogResult(EnSob1* this, PlayState* play) {
func_8019F208();
EnSob1_TalkToShopkeeper(play, this);
return true;
+
case 1:
func_8019F230();
if (this->shopType == BOMB_SHOP) {
@@ -986,6 +993,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) {
this->shopItemSelectedTween = 0.0f;
item->boughtFunc(play, item);
break;
+
case CANBUY_RESULT_SUCCESS_2:
func_8019F208();
item->buyFunc(play, item);
@@ -1002,38 +1010,49 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) {
this->shopItemSelectedTween = 0.0f;
item->boughtFunc(play, item);
break;
+
case CANBUY_RESULT_NO_ROOM:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sNoRoomTextIds[this->shopType]);
break;
+
case CANBUY_RESULT_NEED_EMPTY_BOTTLE:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->shopType]);
break;
+
case CANBUY_RESULT_NEED_RUPEES:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->shopType]);
break;
+
case CANBUY_RESULT_CANNOT_GET_NOW:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->shopType]);
break;
+
case CANBUY_RESULT_CANNOT_GET_NOW_2:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sCannotGetNow2TextIds[this->shopType]);
break;
+
case CANBUY_RESULT_NO_ROOM_2:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, sNoRoom2TextIds[this->shopType]);
break;
+
case CANBUY_RESULT_ALREADY_HAVE:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, 0x658);
break;
+
case CANBUY_RESULT_HAVE_BETTER:
play_sound(NA_SE_SY_ERROR);
EnSob1_SetupCannotBuy(play, this, 0x659);
break;
+
+ default:
+ break;
}
}
@@ -1047,6 +1066,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) {
case 0:
EnSob1_HandleCanBuyItem(play, this);
break;
+
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
@@ -1179,11 +1199,11 @@ void EnSob1_UpdateItemSelectedProperty(EnSob1* this) {
for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) {
item = *items;
if (item != NULL) {
- if (this->actionFunc != EnSob1_SelectItem && this->actionFunc != EnSob1_CannotBuy &&
- this->drawCursor == 0) {
+ if ((this->actionFunc != EnSob1_SelectItem) && (this->actionFunc != EnSob1_CannotBuy) &&
+ (this->drawCursor == 0)) {
item->isSelected = false;
} else {
- item->isSelected = this->cursorIndex == i ? true : false;
+ item->isSelected = (this->cursorIndex == i) ? true : false;
}
}
}
@@ -1330,10 +1350,10 @@ void EnSob1_ChangeObject(EnSob1* this, PlayState* play) {
s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->mainObjIndex)) {
- if (this->unusedObjIndex >= 0 && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) {
+ if ((this->unusedObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) {
return false;
}
- if (this->shopkeeperAnimObjIndex >= 0 && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) {
+ if ((this->shopkeeperAnimObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) {
return false;
}
return true;
@@ -1396,7 +1416,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) {
this->waypoint = 0;
if (this->shopType == BOMB_SHOP) {
- this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH(&this->actor), 0x1F);
+ this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH_INDEX(&this->actor), ENSOB1_PATH_INDEX_NONE);
}
if (this->shopType == BOMB_SHOP) {
EnSob1_SetupAction(this, EnSob1_SetupWalk);
@@ -1501,7 +1521,7 @@ void EnSob1_DrawCursor(PlayState* play, EnSob1* this, f32 x, f32 y, f32 z, u8 dr
OPEN_DISPS(play->state.gfxCtx);
if (drawCursor != 0) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b,
this->cursorColor.a);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP,
@@ -1563,7 +1583,7 @@ void EnSob1_DrawStickDirectionPrompt(PlayState* play, EnSob1* this) {
OPEN_DISPS(play->state.gfxCtx);
if (drawStickRightPrompt || drawStickLeftPrompt) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD,
@@ -1647,7 +1667,7 @@ void EnSob1_ZoraShopkeeper_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x0C, EnSob1_EndDList(play->state.gfxCtx));
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sZoraShopkeeperEyeTextures[this->eyeTexIndex]));
@@ -1672,7 +1692,7 @@ void EnSob1_GoronShopkeeper_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sGoronShopkeeperEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
@@ -1695,7 +1715,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnSob1_BombShopkeeper_OverrideLimbDraw, EnSob1_BombShopkeeper_PostLimbDraw, &this->actor);
@@ -1707,7 +1727,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) {
EnSob1_DrawCursor(play, this, this->cursorPos.x, this->cursorPos.y, this->cursorPos.z, this->drawCursor);
EnSob1_DrawStickDirectionPrompt(play, this);
frames = play->gameplayFrames;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
index 1509868ee..12c14301b 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
@@ -15,7 +15,9 @@ typedef void (*EnSob1ActionFunc)(struct EnSob1*, PlayState*);
typedef void (*EnSob1BlinkFunc)(struct EnSob1*);
#define ENSOB1_GET_SHOPTYPE(thisx) ((thisx)->params & 0x1F)
-#define ENSOB1_GET_PATH(thisx) (((thisx)->params & 0x3E0) >> 5)
+#define ENSOB1_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5)
+
+#define ENSOB1_PATH_INDEX_NONE 0x1F
typedef struct EnSob1XZRange {
/* 0x0 */ f32 xMin;
diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
index 60846fda8..358a8eeec 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
@@ -926,7 +926,7 @@ void EnSsh_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80976178[this->blinkState]));
diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c
index 994a455a6..f4cc458cb 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.c
+++ b/src/overlays/actors/ovl_En_St/z_en_st.c
@@ -246,7 +246,7 @@ void func_808A54B0(EnSt* this, PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
Matrix_Scale(0.06f, 0.12f, 0.06f, MTXMODE_APPLY);
@@ -546,7 +546,7 @@ void func_808A650C(EnSt* this) {
}
s32 func_808A6580(EnSt* this, PlayState* play) {
- Player* sp3C = GET_PLAYER(play);
+ Player* player = GET_PLAYER(play);
s32 ret = false;
s32 i;
@@ -666,7 +666,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) {
if ((this->unk_316 == 0) && (this->unk_314 == 0) && (this->unk_312 == 0) &&
!(this->collider1.base.atFlags & AT_BOUNCED) && (this->actor.colChkInfo.health != 0)) {
play->damagePlayer(play, -8);
- Actor_PlaySfx(&sp3C->actor, NA_SE_PL_BODY_HIT);
+ Actor_PlaySfx(&player->actor, NA_SE_PL_BODY_HIT);
func_800B8D98(play, &this->actor, 4.0f, this->actor.yawTowardsPlayer, 6.0f);
this->unk_316 = 10;
this->unk_18C |= 1;
@@ -924,11 +924,11 @@ void func_808A7478(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (func_808A6A3C(this)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP);
}
diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
index 215845341..7e3b9ead6 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -70,7 +70,7 @@ typedef enum {
/* 5 */ STH_ANIM_LOOK_AROUND, // checking out Oceanside Spider House
/* 6 */ STH_ANIM_PLEAD, // wants to buy Oceanside Spider House
/* 7 */ STH_ANIM_PANIC, // after buying Oceanside Spider House, can be found at bottom of slide,
- /* 8 */ STH_ANIM_START, // set in init, not an actual index to the array
+ /* 8 */ STH_ANIM_START // set in init, not an actual index to the array
} EnSthAnimation;
static AnimationHeader* sAnimationInfo[] = {
@@ -758,7 +758,7 @@ void EnSth_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_EnvColor(play->state.gfxCtx, sShirtColors[1].r, sShirtColors[1].g, sShirtColors[1].b, 255));
diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.h b/src/overlays/actors/ovl_En_Sth/z_en_sth.h
index 1c8c92852..dbc459ce1 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h
@@ -16,9 +16,9 @@ typedef enum {
/* 2 */ STH_TYPE_SWAMP_SPIDER_HOUSE_CURED, // cursed is EnSsh
/* 3 */ STH_TYPE_MOON_LOOKING, // South Clock Town, looking up at the moon
/* 4 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET, // looking for shelter
- /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC, // shelter was not enough
+ /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC // shelter was not enough
// Other values: Actor will spawn and animate with arm waving, no further interaction.
-} EnSthTypes;
+} EnSthType;
// Note: Vanilla types usually have 0xFEXX typing, but this upper section is unused by the code, reason unknown
#define STH_GET_TYPE(thisx) ((thisx)->params & 0xF)
diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
index ba6d72cb6..723f7634f 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
@@ -114,7 +114,7 @@ void EnSth2_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_EnvColor(play->state.gfxCtx, sEnvColors[1].r, sEnvColors[1].g, sEnvColors[1].b, 255));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 90, 110, 130, 255));
diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c
index 1692e1461..3a32031d3 100644
--- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c
+++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c
@@ -90,7 +90,7 @@ typedef enum {
/* 0 */ EN_STONE_BOTTLE_NONE,
/* 1 */ EN_STONE_BOTTLE_RED_POTION,
/* 2 */ EN_STONE_BOTTLE_EMPTY,
- /* 3 */ EN_STONE_BOTTLE_BLUE_POTION,
+ /* 3 */ EN_STONE_BOTTLE_BLUE_POTION
} EnStoneHeishiBottle;
typedef enum {
@@ -100,8 +100,8 @@ typedef enum {
/* 3 */ EN_STONE_HEISHI_ANIM_WAVE,
/* 4 */ EN_STONE_HEISHI_ANIM_SIT_AND_REACH,
/* 5 */ EN_STONE_HEISHI_ANIM_DRINK_2,
- /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP,
-} EnStoneHeishiAnimations;
+ /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP
+} EnStoneHeishiAnimation;
void EnStoneheishi_Init(Actor* thisx, PlayState* play) {
EnStoneheishi* this = THIS;
@@ -230,7 +230,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) {
player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]);
- func_80151BB4(play, 0x12);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO);
}
}
@@ -250,7 +250,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) {
if (this->textIdIndex < 7) {
this->textIdIndex++;
} else {
- func_80151BB4(play, 0x12);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO);
func_80BC94B0(this);
return;
}
@@ -293,7 +293,7 @@ void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) {
}
} else if (itemAction <= PLAYER_IA_MINUS1) {
Message_CloseTextbox(play);
- func_80151BB4(play, 0x12);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO);
func_80BC94B0(this);
}
}
@@ -411,8 +411,8 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80151BB4(play, 0x35);
- func_80151BB4(play, 0x12);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO);
this->action = EN_STONE_ACTION_1;
this->actionFunc = func_80BC9680;
} else {
@@ -483,7 +483,7 @@ void EnStoneheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
Gfx* gfx;
if ((limbIndex == SOLDIER_LIMB_LEFT_HAND) && (this->bottleDisplay != EN_STONE_BOTTLE_NONE)) {
- gfx = func_8012C2B4(*gfxp);
+ gfx = Gfx_SetupDL71(*gfxp);
sLeftHandPos.x = 320.0f;
sLeftHandPos.y = 210.0f;
@@ -520,13 +520,13 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnStoneheishi_OverrideLimbDraw, EnStoneheishi_PostLimbDraw, &this->actor, POLY_XLU_DISP);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
POLY_OPA_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c
index dd82ef682..43ddae02a 100644
--- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c
+++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c
@@ -31,7 +31,7 @@ typedef enum {
/* 5 */ SOLDIER_ANIM_5,
/* 6 */ SOLDIER_ANIM_6,
/* 7 */ SOLDIER_ANIM_STAND_HAND_ON_CHEST,
- /* 8 */ SOLDIER_ANIM_MAX,
+ /* 8 */ SOLDIER_ANIM_MAX
} SoldierAnimation;
ActorInit En_Stop_heishi_InitVars = {
@@ -579,7 +579,7 @@ void EnStopheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
void EnStopheishi_Draw(Actor* thisx, PlayState* play) {
EnStopheishi* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnStopheishi_OverrideLimbDraw, EnStopheishi_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c
index 11e5ce7d6..3bc1f55fd 100644
--- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c
+++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c
@@ -93,11 +93,11 @@ void EnStream_SuckPlayer(EnStream* this, PlayState* play) {
this->actor.scale.y) != EN_STREAM_PLAYER_OUTSIDE_RANGE) {
xzDist = sqrtf(SQ(posDifference.x) + SQ(posDifference.z));
yDistWithOffset = player->actor.world.pos.y - (this->actor.world.pos.y - 90.0f);
- player->unk_B84 = Math_Atan2S(-posDifference.x, -posDifference.z);
+ player->pushedYaw = Math_Atan2S(-posDifference.x, -posDifference.z);
if (xzDist > 3.0f) {
- Math_SmoothStepToF(&player->unk_B80, 3.0f, 0.5f, xzDist, 0.0f);
+ Math_SmoothStepToF(&player->pushedSpeed, 3.0f, 0.5f, xzDist, 0.0f);
} else {
- player->unk_B80 = 0.0f;
+ player->pushedSpeed = 0.0f;
Math_SmoothStepToF(&player->actor.world.pos.x, this->actor.world.pos.x, 0.5f, 3.0f, 0.0f);
Math_SmoothStepToF(&player->actor.world.pos.z, this->actor.world.pos.z, 0.5f, 3.0f, 0.0f);
}
@@ -136,7 +136,8 @@ void EnStream_Draw(Actor* thisx, PlayState* play) {
Gfx* gfx;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gfx = POLY_XLU_DISP;
gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
multipliedFrames = frames * 20;
@@ -145,5 +146,6 @@ void EnStream_Draw(Actor* thisx, PlayState* play) {
-multipliedFrames, 64, 64));
gSPDisplayList(&gfx[2], gWaterVortexDL);
POLY_XLU_DISP = &gfx[3];
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.h b/src/overlays/actors/ovl_En_Stream/z_en_stream.h
index 88856c3dd..c5aa3c9e2 100644
--- a/src/overlays/actors/ovl_En_Stream/z_en_stream.h
+++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.h
@@ -12,13 +12,13 @@
typedef enum {
/* 0 */ EN_STREAM_SIZE_NORMAL,
- /* 1 */ EN_STREAM_SIZE_SMALL,
+ /* 1 */ EN_STREAM_SIZE_SMALL
} EnStreamSize;
typedef enum {
/* 0 */ EN_STREAM_PLAYER_OUTSIDE_RANGE,
/* 1 */ EN_STREAM_PLAYER_WITHIN_RANGE_INSIDE_VORTEX,
- /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX,
+ /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX
} EnStreamPlayerLocation;
struct EnStream;
diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
index 196b29263..12d8d22a8 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
@@ -267,6 +267,7 @@ void func_80BAA9B4(EnSuttari* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
break;
+
default:
if ((this->animIndex != 1) && (curFrame == frameCount)) {
this->animIndex = 1;
@@ -281,23 +282,31 @@ void func_80BAAA94(EnSuttari* this) {
this->animIndex = 1;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
break;
+
case 0x29E9:
this->enFsn->flags |= ENFSN_ANGRY;
break;
+
case 0x29EA:
this->enFsn->flags |= ENFSN_CALM_DOWN;
break;
+
case 0x29EB:
this->enFsn->flags |= ENFSN_OFFER_FINAL_PRICE;
break;
+
case 0x29EC:
this->animIndex = 7;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
break;
+
case 0x29ED:
this->animIndex = 1;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
break;
+
+ default:
+ break;
}
}
@@ -309,52 +318,64 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
this->csIdIndex = 0;
this->textId = 0x29E5;
break;
+
case 0x29E5:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 1;
this->textId = 0x29E6;
break;
+
case 0x29E6:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 0;
this->textId = 0x29E7;
break;
+
case 0x29E7:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 1;
this->textId = 0x29E8;
break;
+
case 0x29E8:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 0;
this->textId = 0x29E9;
break;
+
case 0x29E9:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 1;
this->textId = 0x29EA;
break;
+
case 0x29EA:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 0;
this->textId = 0x29EB;
break;
+
case 0x29EB:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 1;
this->textId = 0x29EC;
break;
+
case 0x29EC:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->csIdIndex = 0;
this->textId = 0x29ED;
break;
+
case 0x29ED:
CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->flags1 |= 0x400;
this->csIdIndex = 1;
this->textId = 0x29EE;
break;
+
+ default:
+ break;
}
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
@@ -372,9 +393,11 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
this->textId = 0x1450;
}
break;
+
case 0x1450:
this->textId = 0x1451;
break;
+
case 0x1451:
if (this->flags1 & 0x800) {
this->flags1 &= ~0x800;
@@ -385,6 +408,7 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_81_01);
}
break;
+
case 0x1453:
this->flags1 |= 0x400;
SET_WEEKEVENTREG(WEEKEVENTREG_81_01);
@@ -392,25 +416,34 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
this->flags2 |= 1;
this->textId = 0x1454;
break;
+
case 0x1455:
this->textId = 0x1456;
break;
+
case 0x1456:
this->textId = 0x1457;
break;
+
case 0x1457:
this->textId = 0x1458;
break;
+
case 0x1458:
this->textId = 0x1459;
break;
+
case 0x1459:
this->textId = 0x145A;
break;
+
case 0x145A:
this->flags1 |= 0x400;
this->textId = 0x145B;
break;
+
+ default:
+ break;
}
}
Message_StartTextbox(play, this->textId, &this->actor);
@@ -503,9 +536,9 @@ void func_80BAB374(EnSuttari* this, PlayState* play) {
Vec3f sp38;
if ((curFrame % 3) == 0) {
- sp38.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x;
+ sp38.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x;
sp38.y = this->actor.world.pos.y;
- sp38.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z;
+ sp38.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z;
Actor_SpawnFloorDustRing(play, &this->actor, &sp38, 10.0f, 0, 2.0f, 0, 0, 0);
}
}
@@ -516,8 +549,9 @@ void func_80BAB434(EnSuttari* this) {
}
void EnSuttari_GetPaths(EnSuttari* this, PlayState* play) {
- this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH(&this->actor), 0x3F);
- this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->unk1, 0x3F);
+ this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH_INDEX(&this->actor), ENSUTTARI_PATH_INDEX_NONE);
+ //! @bug: the additional path shouldn't use `ENSUTTARI_PATH_INDEX_NONE`, but `ADDITIONAL_PATH_INDEX_NONE`
+ this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->additionalPathIndex, ENSUTTARI_PATH_INDEX_NONE);
}
void func_80BAB4F0(EnSuttari* this, PlayState* play) {
@@ -589,7 +623,7 @@ s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) {
sp54 = sp5C[index + 1].x - sp5C[index - 1].x;
sp48 = sp5C[index + 1].z - sp5C[index - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C);
if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
}
@@ -619,7 +653,7 @@ s32 func_80BAB8F4(EnSuttari* this, Path* path, s32 arg2) {
sp54 = sp5C[index - 1].x - sp5C[index + 1].x;
sp48 = sp5C[index - 1].z - sp5C[index + 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C);
if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
}
@@ -679,16 +713,16 @@ void func_80BABB90(EnSuttari* this, s32 arg1) {
s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp26 = SCHEDULE_TIME_NOW;
u16 phi_a0;
- u8 sp23 = ENSUTTARI_GET_PATH(&this->actor);
+ u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor);
u16 tmp;
if (D_80BAE8F8[scheduleOutput->result] >= 0) {
- this->timePath = SubS_GetAdditionalPath(play, sp23, D_80BAE8F8[scheduleOutput->result]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BAE8F8[scheduleOutput->result]);
}
if (this->timePath == NULL) {
return 0;
}
- if ((this->unk428 != 0 && this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) {
+ if ((this->unk428 != 0) && (this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) {
phi_a0 = sp26;
} else {
phi_a0 = scheduleOutput->time0;
@@ -710,37 +744,37 @@ s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp
s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 pad;
EnDoor* sp48;
- u8 sp47 = ENSUTTARI_GET_PATH(&this->actor);
+ u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor);
u16 sp44 = SCHEDULE_TIME_NOW;
Vec3f sp38;
Vec3f sp2C;
Vec3s* sp28;
s32 sp24;
- if (this->unk428 == 10 || this->unk428 == 11 || this->unk428 == 2) {
- return 0;
+ if ((this->unk428 == 10) || (this->unk428 == 11) || (this->unk428 == 2)) {
+ return false;
}
sp48 = (EnDoor*)SubS_FindNearestActor(&this->actor, play, ACTORCAT_DOOR, ACTOR_EN_DOOR);
sp24 = D_80BAE8F8[scheduleOutput->result];
if ((sp48 != NULL) && (sp24 >= 0)) {
- this->timePath = SubS_GetAdditionalPath(play, sp47, sp24);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, sp24);
}
if ((sp48 == NULL) || (this->timePath == NULL)) {
- return 0;
+ return false;
}
sp28 = Lib_SegmentedToVirtual(this->timePath->points);
Math_Vec3s_ToVec3f(&sp38, &sp28[0]);
Math_Vec3s_ToVec3f(&sp2C, &sp28[1]);
this->unk434 = sp44 - scheduleOutput->time0;
this->unk436 = scheduleOutput->time1 - scheduleOutput->time0;
- if (scheduleOutput->result != 10 && scheduleOutput->result != 11) {
+ if ((scheduleOutput->result != 10) && (scheduleOutput->result != 11)) {
sp48->unk_1A7 = 0x4B;
}
Math_Vec3f_Copy(&this->unk438, &sp38);
Math_Vec3f_Copy(&this->unk444, &sp2C);
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp38, &sp2C);
this->actor.world.pos = sp38;
- return 1;
+ return true;
}
s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) {
@@ -753,6 +787,7 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp
case 12:
ret = func_80BABC48(this, play, scheduleOutput);
break;
+
case 11:
case 10:
case 9:
@@ -761,15 +796,17 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp
case 6:
ret = func_80BABDD8(this, play, scheduleOutput);
break;
+
case 5:
case 4:
case 3:
case 2:
case 1:
- ret = 1;
+ ret = true;
break;
+
default:
- ret = 0;
+ ret = false;
break;
}
return ret;
@@ -853,6 +890,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
this->flags1 |= 0x80;
func_80BABFD4(this, play);
break;
+
case 15:
if ((this->animIndex == 1) && (curFrame == frameCount)) {
this->animIndex = 2;
@@ -873,15 +911,18 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
}
func_80BABFD4(this, play);
break;
+
case 6:
case 8:
this->flags1 |= 0x80;
func_80BAC220(this, play);
break;
+
case 10:
this->flags1 |= 0x80;
func_80BAC220(this, play);
break;
+
case 9:
case 11:
this->flags1 |= 0x80;
@@ -893,19 +934,23 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
}
func_80BAC220(this, play);
break;
+
case 7:
this->flags1 |= 0x20;
this->flags1 |= 0x80;
func_80BAC220(this, play);
break;
+
case 14:
this->flags1 |= 0x20;
this->flags1 |= 0x80;
func_80BABFD4(this, play);
break;
+
case 1:
Actor_Kill(&this->actor);
break;
+
case 2:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_81_04)) {
this->flags1 |= 0x80;
@@ -916,9 +961,10 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BADA08;
}
break;
+
case 4:
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
- if (this->animIndex == 2 || this->animIndex == 1) {
+ if ((this->animIndex == 2) || (this->animIndex == 1)) {
this->animIndex = 5;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
@@ -935,6 +981,9 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BAD2B4;
}
break;
+
+ default:
+ break;
}
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 4, 0x1554);
}
@@ -947,7 +996,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_1;
if (play->sceneId == SCENE_IKANA) {
this->flags1 |= 1;
- if (gSaveContext.save.day == 1 || gSaveContext.save.day == 2) {
+ if ((gSaveContext.save.day == 1) || (gSaveContext.save.day == 2)) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
this->flags1 |= 0x80;
@@ -962,7 +1011,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
return;
}
} else if (play->sceneId == SCENE_BACKTOWN) {
- if (gSaveContext.save.time >= CLOCK_TIME(0, 20) && gSaveContext.save.time < CLOCK_TIME(6, 00)) {
+ if ((gSaveContext.save.time >= CLOCK_TIME(0, 20)) && (gSaveContext.save.time < CLOCK_TIME(6, 00))) {
Actor_Kill(&this->actor);
}
@@ -1011,14 +1060,14 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
void func_80BACA14(EnSuttari* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->animIndex == 1 || this->animIndex == 8) {
+ if ((this->animIndex == 1) || (this->animIndex == 8)) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
func_80BABA90(this, 0, 0);
func_80BAB434(this);
- if (player->transformation == PLAYER_FORM_GORON || player->transformation == PLAYER_FORM_ZORA) {
- if (this->actor.playerHeightRel < 60.0f && this->actor.xzDistToPlayer < 500.0f) {
+ if ((player->transformation == PLAYER_FORM_GORON) || (player->transformation == PLAYER_FORM_ZORA)) {
+ if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) {
this->unk3F2 = this->headRot.y;
this->actionFunc = func_80BACBB0;
}
@@ -1041,7 +1090,7 @@ void func_80BACBB0(EnSuttari* this, PlayState* play) {
s16 target;
this->unk3F2 = this->headRot.y;
- if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) {
+ if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) {
this->actionFunc = func_80BACA14;
}
if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) {
@@ -1071,7 +1120,7 @@ void func_80BACD2C(EnSuttari* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->unk3F2 = this->headRot.y;
- if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) {
+ if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) {
this->actionFunc = func_80BACA14;
}
if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) {
@@ -1265,7 +1314,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) {
}
this->unk428 = scheduleOutput.result;
func_80BAC2FC(this, play);
- if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) {
+ if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) {
Actor_Kill(&this->actor);
return;
}
@@ -1303,7 +1352,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) {
}
this->unk428 = scheduleOutput.result;
func_80BAC2FC(this, play);
- if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) {
+ if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) {
Actor_Kill(&this->actor);
return;
}
@@ -1372,10 +1421,14 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) {
this->flags1 |= 0x800;
func_80BAAB78(this, play);
break;
+
case 1:
func_8019F230();
func_80BAAB78(this, play);
break;
+
+ default:
+ break;
}
}
if (!(this->flags1 & 4)) {
@@ -1486,11 +1539,11 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) {
EnSuttari_AdvanceTime();
}
if (this->unk428 != 0) {
- if (this->animIndex == 2 || this->animIndex == 6) {
+ if ((this->animIndex == 2) || (this->animIndex == 6)) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 16.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
- } else if (this->animIndex == 0 || this->animIndex == 5) {
+ } else if ((this->animIndex == 0) || (this->animIndex == 5)) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 17.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
@@ -1514,7 +1567,7 @@ s32 EnSuttari_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
Matrix_RotateXS(-this->torsoRot.y, MTXMODE_APPLY);
Matrix_RotateZS(-this->torsoRot.x, MTXMODE_APPLY);
}
- if (limbIndex == 8 || limbIndex == 9 || limbIndex == 0xC) {
+ if ((limbIndex == 8) || (limbIndex == 9) || (limbIndex == 0xC)) {
rot->y += (s16)(Math_SinS(this->unk2FA[limbIndex]) * 200.0f);
rot->z += (s16)(Math_CosS(this->unk31A[limbIndex]) * 200.0f);
}
@@ -1543,9 +1596,12 @@ void EnSuttari_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MtxFToYXZRot(curState, &bombBag->shape.rot, false);
}
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, gBombShopBagDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -1568,7 +1624,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) {
if (this->flags1 & 0x80) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0));
gDPPipeSync(POLY_OPA_DISP++);
@@ -1576,7 +1632,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) {
this->skelAnime.dListCount, EnSuttari_OverrideLimbDraw, EnSuttari_PostLimbDraw,
EnSuttari_TransformLimbDraw, &this->actor);
if (this->flags1 & 0x80) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
pos = this->actor.world.pos;
scale.x = 0.2f;
scale.y = 0.2f;
diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
index 071000763..8da01b67e 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
@@ -8,7 +8,9 @@ struct EnSuttari;
typedef void (*EnSuttariActionFunc)(struct EnSuttari*, PlayState*);
-#define ENSUTTARI_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
+#define ENSUTTARI_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9)
+
+#define ENSUTTARI_PATH_INDEX_NONE 0x3F
typedef struct EnSuttari {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c
index 11e84301b..2f32734a4 100644
--- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c
+++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c
@@ -304,7 +304,7 @@ s32 func_808D91C4(EnSw* this, CollisionPoly* arg1) {
return false;
}
- sp4C = func_80086C48(temp_f12);
+ sp4C = Math_FAcosF(temp_f12);
if (sp4C < 0.001f) {
return false;
}
@@ -358,7 +358,6 @@ s32 func_808D9440(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, C
return ret;
}
-#ifdef NON_MATCHING
void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
CollisionPoly* spA4;
CollisionPoly* spA0;
@@ -412,7 +411,6 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
for (i = 0; i < 3; i++) {
if (i == 0) {
- if (this && this && this) {}
sp84.x = sp90.x - (this->unk_350.x * temp_f20);
sp84.y = sp90.y - (this->unk_350.y * temp_f20);
sp84.z = sp90.z - (this->unk_350.z * temp_f20);
@@ -433,6 +431,9 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
break;
}
}
+
+ //! FAKE
+ if (i == 3) {}
}
func_808D93BC(this);
@@ -448,10 +449,6 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
Actor_MoveWithoutGravity(&this->actor);
}
}
-#else
-void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Sw/func_808D94D0.s")
-#endif
void func_808D9894(EnSw* this, Vec3f* vec) {
Vec3f sp5C;
@@ -901,13 +898,13 @@ void func_808DA89C(EnSw* this, PlayState* play) {
}
void func_808DAA60(EnSw* this, PlayState* play) {
- Vec3s* sp44;
+ Vec3s* points;
s16 temp_v0;
s16 sp40;
Vec3f sp34;
f32 temp_f16;
- sp44 = Lib_SegmentedToVirtual(this->unk_1E4->points);
+ points = Lib_SegmentedToVirtual(this->path->points);
sp40 = 0;
if (DECR(this->unk_454) == 0) {
@@ -915,13 +912,13 @@ void func_808DAA60(EnSw* this, PlayState* play) {
temp_f16 = this->skelAnime.endFrame - this->skelAnime.curFrame;
sp40 = 80.0f * temp_f16;
if (this->unk_45E == 0) {
- Math_Vec3s_ToVec3f(&sp34, &sp44[this->unk_4A0]);
+ Math_Vec3s_ToVec3f(&sp34, &points[this->unk_4A0]);
func_808D9894(this, &sp34);
temp_v0 = Math_Atan2S_XY(sp34.z, sp34.x);
if (ABS_ALT(temp_v0) < sp40) {
this->skelAnime.curFrame = 0.0f;
Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
- Math_Vec3s_ToVec3f(&this->unk_374, &sp44[this->unk_4A0]);
+ Math_Vec3s_ToVec3f(&this->unk_374, &points[this->unk_4A0]);
this->actionFunc = func_808DACF4;
this->unk_414 = 0.0f;
sp40 = ABS_ALT(temp_v0);
@@ -981,7 +978,7 @@ void func_808DACF4(EnSw* this, PlayState* play) {
if (((s32)this->unk_414 != 0) && ((s32)this->unk_414 < (s32)sp4C)) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_374);
this->unk_4A0 += this->unk_49C;
- if ((this->unk_4A0 >= this->unk_1E4->count) || (this->unk_4A0 < 0)) {
+ if ((this->unk_4A0 >= this->path->count) || (this->unk_4A0 < 0)) {
this->unk_49C = -this->unk_49C;
this->unk_4A0 += this->unk_49C * 2;
}
@@ -1154,8 +1151,9 @@ void EnSw_Init(Actor* thisx, PlayState* play) {
this->collider.info.toucher.damage = 16;
}
- this->unk_1E4 = SubS_GetDayDependentPath(play, ENSW_GET_FF00(&this->actor), 255, &this->unk_4A0);
- if (this->unk_1E4 != NULL) {
+ this->path =
+ SubS_GetDayDependentPath(play, ENSW_GET_PATH_INDEX(&this->actor), ENSW_PATH_INDEX_NONE, &this->unk_4A0);
+ if (this->path != NULL) {
this->unk_4A0 = 1;
}
@@ -1201,7 +1199,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) {
}
func_808D9F78(this, play, 1);
- if (this->unk_1E4 != NULL) {
+ if (this->path != NULL) {
this->unk_49C = 1;
func_808D9F08(this);
this->actionFunc = func_808DAA60;
@@ -1294,9 +1292,9 @@ void EnSw_Draw(Actor* thisx, PlayState* play) {
if (this->unk_410 & 4) {
if (ENSW_GET_3(&this->actor)) {
- func_800B8050(&this->actor, play, MTXMODE_NEW);
+ func_800B8050(&this->actor, play, 0);
}
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_RotateXS(-0x3C72, MTXMODE_APPLY);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSw_OverrideLimbDraw, NULL,
&this->actor);
diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.h b/src/overlays/actors/ovl_En_Sw/z_en_sw.h
index 4544346a0..f77d12267 100644
--- a/src/overlays/actors/ovl_En_Sw/z_en_sw.h
+++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.h
@@ -11,14 +11,16 @@ typedef void (*EnSwActionFunc)(struct EnSw*, PlayState*);
#define ENSW_GET_3(thisx) (ENSW_GETS_3((thisx)->params))
#define ENSW_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF)
#define ENSW_GET_3FC(thisx) (ENSW_GETS_3FC((thisx)->params))
-#define ENSW_GET_FF00(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF)
+#define ENSW_GET_PATH_INDEX(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF)
+
+#define ENSW_PATH_INDEX_NONE 0xFF
typedef struct EnSw {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnSwActionFunc actionFunc;
/* 0x18C */ ColliderSphere collider;
- /* 0x1E4 */ Path* unk_1E4;
+ /* 0x1E4 */ Path* path;
/* 0x1E8 */ Vec3s jointTable[30];
/* 0x29C */ Vec3s morphTable[30];
/* 0x350 */ Vec3f unk_350;
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
index abc773637..af419ba23 100644
--- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
+++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
@@ -79,12 +79,12 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
s32 i;
path = syatekiMan->path;
- while (path->unk2 != 0) {
- path = &play->setupPathList[path->unk1];
+ while (path->customValue != SG_PATH_TYPE_CROW) {
+ path = &play->setupPathList[path->additionalPathIndex];
}
for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -292,9 +292,9 @@ s32 EnSyatekiCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
EnSyatekiCrow* this = THIS;
if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) {
- rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4)));
+ rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4)));
} else if (limbIndex == OBJECT_CROW_LIMB_TAIL) {
- rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4)));
+ rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4)));
}
return false;
@@ -320,7 +320,7 @@ void EnSyatekiCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
void EnSyatekiCrow_Draw(Actor* thisx, PlayState* play) {
EnSyatekiCrow* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnSyatekiCrow_OverrideLimbDraw, EnSyatekiCrow_PostLimbDraw, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
index 20abd71e4..ee9c63536 100644
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
@@ -36,7 +36,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play);
typedef enum {
/* 0 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL,
- /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP,
+ /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP
} EnSyatekiDekunutsHeaddressType;
ActorInit En_Syateki_Dekunuts_InitVars = {
@@ -80,7 +80,7 @@ typedef enum {
/* 3 */ EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND,
/* 4 */ EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE,
/* 5 */ EN_SYATEKI_DEKUNUTS_ANIM_DIE,
- /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW, // unused
+ /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW // unused
} EnSyatekiDekunutsAnimation;
static AnimationInfo sAnimationInfo[] = {
@@ -103,7 +103,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
static s32 sDrawFlowers = true; // This makes it so only one EnSyatekiDekunuts draws all the flowers.
EnSyatekiDekunuts* this = THIS;
PlayState* play = play2;
- s32 unkPathComparison;
+ s32 pathType;
Path* path;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
s32 i;
@@ -115,18 +115,18 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
Actor_SetScale(&this->actor, 0.01f);
this->collider.dim = sBonusDekuScrubColliderDimensions[0];
- unkPathComparison = 3;
+ pathType = SG_PATH_TYPE_SCRUB_BONUS;
} else {
Actor_SetScale(&this->actor, 0.02f);
- unkPathComparison = 1;
+ pathType = SG_PATH_TYPE_SCRUB_NORMAL;
}
- while (path->unk2 != unkPathComparison) {
- path = &play->setupPathList[path->unk1];
+ while (path->customValue != pathType) {
+ path = &play->setupPathList[path->additionalPathIndex];
}
for (i = 0; i < EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(&this->actor); i++) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
if (sDrawFlowers == true) {
@@ -476,7 +476,7 @@ void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(flowerPos.x, flowerPos.y, flowerPos.z, MTXMODE_NEW);
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
index 2ceb0b32d..ce3e9ba90 100644
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
+++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
@@ -11,7 +11,7 @@
typedef enum {
/* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points
- /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS, // Worth 100 points
+ /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS // Worth 100 points
} EnSyatekiDekunutsType;
struct EnSyatekiDekunuts;
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
index 01c8e96a5..a5c4ad4e2 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
@@ -10,6 +10,7 @@
#include "z_en_syateki_man.h"
#include "overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h"
#include "overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h"
+#include "overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h"
#include "overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON)
@@ -49,15 +50,10 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play);
#define TALK_FLAG_SWAMP_HAS_SPOKEN_WITH_HUMAN (1 << 0)
#define TALK_FLAG_SWAMP_HAS_EXPLAINED_THE_RULES (1 << 1)
-#define OCTOROK_FLAG(color, row, column) (1 << ((row * 6) + (column * 2) + color))
-#define COLOR_RED 0
-#define COLOR_BLUE 1
-#define ROW_BACK 0
-#define ROW_CENTER 1
-#define ROW_FRONT 2
-#define COLUMN_LEFT 0
-#define COLUMN_CENTER 1
-#define COLUMN_RIGHT 2
+#define OCTO_FLAGS(type0, type1, type2, type3, type4, type5, type6, type7, type8) \
+ (SG_OCTO_SET_FLAG(type0, 0) | SG_OCTO_SET_FLAG(type1, 1) | SG_OCTO_SET_FLAG(type2, 2) | \
+ SG_OCTO_SET_FLAG(type3, 3) | SG_OCTO_SET_FLAG(type4, 4) | SG_OCTO_SET_FLAG(type5, 5) | \
+ SG_OCTO_SET_FLAG(type6, 6) | SG_OCTO_SET_FLAG(type7, 7) | SG_OCTO_SET_FLAG(type8, 8))
ActorInit En_Syateki_Man_InitVars = {
ACTOR_EN_SYATEKI_MAN,
@@ -74,7 +70,7 @@ ActorInit En_Syateki_Man_InitVars = {
typedef enum {
/* 0 */ EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE,
/* 1 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_LOOP,
- /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END,
+ /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END
} EnSyatekiManAnimation;
static AnimationInfo sAnimationInfo[] = {
@@ -183,7 +179,7 @@ void EnSyatekiMan_Swamp_SpawnTargetActors(EnSyatekiMan* this, PlayState* play2,
void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
EnSyatekiMan* this = THIS;
s32 pad;
- Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH(&this->actor)];
+ Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH_INDEX(&this->actor)];
s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex];
this->actor.targetMode = 1;
@@ -201,7 +197,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
this->shootingGameState = SG_GAME_STATE_NONE;
this->talkWaitTimer = 15;
this->flagsIndex = 0;
- this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE;
+ this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
this->octorokFlags = 0;
this->dekuScrubFlags = 0;
this->guayFlags = 0;
@@ -1227,7 +1223,7 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) {
this->score = 0;
this->flagsIndex = 0;
this->perGameVar1.octorokState = SG_OCTO_STATE_INITIAL;
- this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE;
+ this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
sGameStartTimer = 30;
Interface_StartTimer(TIMER_ID_MINIGAME_1, 75);
this->actor.draw = NULL;
@@ -1240,62 +1236,67 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) {
* For each wave, these flags are used to control which Octoroks appear.
*/
static const s32 sOctorokFlagsPerWave[] = {
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ // clang-format off
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE),
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT),
+ OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED),
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER),
+ OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT),
+ OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED),
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE),
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER),
+ OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED),
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE),
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE),
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE),
- OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) |
- OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT),
+ OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE,
+ SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE),
+ // clang-format on
};
void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
@@ -1323,16 +1324,16 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING;
}
- if (this->perGameVar2.octorokHitType != SG_OCTO_HIT_TYPE_NONE) {
- if (this->perGameVar2.octorokHitType == SG_OCTO_HIT_TYPE_BLUE) {
+ if (this->perGameVar2.lastHitOctorokType != SG_OCTO_TYPE_NONE) {
+ if (this->perGameVar2.lastHitOctorokType == SG_OCTO_TYPE_BLUE) {
gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] -= SECONDS_TO_TIMER_PRECISE(2, 50);
sModFromLosingTime = (sModFromLosingTime + 25) % 50;
}
- this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE;
+ this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
}
- if (this->perGameVar1.octorokState == SG_OCTO_STATE_SPAWNING) {
+ if (this->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING) {
this->perGameVar1.octorokState++;
}
@@ -1340,10 +1341,10 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
// that the player might have lost time from hitting Blue Octoroks, so we do something similar to
// what was done with waveTimer above.
if ((sModFromLosingTime == (timer % 50)) && (this->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL)) {
- if (this->flagsIndex < 15) {
+ if (this->flagsIndex < ARRAY_COUNT(sOctorokFlagsPerWave)) {
this->octorokFlags = sOctorokFlagsPerWave[this->flagsIndex++];
Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
- this->perGameVar1.octorokState = SG_OCTO_STATE_SPAWNING;
+ this->perGameVar1.octorokState = SG_OCTO_STATE_APPEARING;
}
}
@@ -1502,7 +1503,7 @@ void EnSyatekiMan_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
index 0b637fecf..28d19871b 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
@@ -8,7 +8,7 @@ struct EnSyatekiMan;
typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*);
-#define EN_SYATEKI_MAN_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define EN_SYATEKI_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
typedef enum {
/* 0 */ SG_GAME_STATE_NONE, // None of the states below apply.
@@ -18,21 +18,22 @@ typedef enum {
/* 4 */ SG_GAME_STATE_ONE_MORE_GAME, // The player failed to get a new high score (Town) and/or perfect score (Swamp and Town).
/* 5 */ SG_GAME_STATE_GIVING_BONUS, // The player gets bonus points at the end of the Swamp game if they get a perfect score.
/* 6 */ SG_GAME_STATE_ENDED, // The player got a new high score and/or perfect score (Town), or the game is over (Swamp).
- /* 7 */ SG_GAME_STATE_MOVING_PLAYER, // The player is automatically moving towards the spot to play the game.
+ /* 7 */ SG_GAME_STATE_MOVING_PLAYER // The player is automatically moving towards the spot to play the game.
} ShootingGalleryGameState;
typedef enum {
- /* 0 */ SG_OCTO_STATE_SPAWNING,
- /* 1 */ SG_OCTO_STATE_SPAWNED,
+ /* 0 */ SG_OCTO_STATE_APPEARING,
+ /* 1 */ SG_OCTO_STATE_APPEARED,
/* 70 */ SG_OCTO_STATE_INITIAL = 70,
- /* 80 */ SG_OCTO_STATE_HIDING = 80,
+ /* 80 */ SG_OCTO_STATE_HIDING = 80
} ShootingGalleryOctorokState;
typedef enum {
- /* 0 */ SG_OCTO_HIT_TYPE_NONE,
- /* 1 */ SG_OCTO_HIT_TYPE_RED,
- /* 2 */ SG_OCTO_HIT_TYPE_BLUE,
-} ShootingGalleryoctorokHitType;
+ /* 0 */ SG_PATH_TYPE_CROW,
+ /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL,
+ /* 2 */ SG_PATH_TYPE_WOLFOS,
+ /* 3 */ SG_PATH_TYPE_SCRUB_BONUS
+} ShootingGalleryPathType;
typedef struct EnSyatekiMan {
/* 0x000 */ Actor actor;
@@ -55,7 +56,7 @@ typedef struct EnSyatekiMan {
} perGameVar1;
/* 0x26E */ union {
s16 bonusDekuScrubHitCounter;
- s16 octorokHitType;
+ s16 lastHitOctorokType;
} perGameVar2;
/* 0x270 */ s16 talkWaitTimer;
/* 0x272 */ s16 dekuScrubFlags;
diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
index 401bc34ff..5673439cf 100644
--- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
+++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
@@ -16,17 +16,17 @@ void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play);
void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play);
-void func_80A36260(EnSyatekiOkuta* this);
-void func_80A362A8(EnSyatekiOkuta* this, PlayState* play);
-void func_80A362F8(EnSyatekiOkuta* this);
-void func_80A36350(EnSyatekiOkuta* this, PlayState* play);
-void func_80A363B4(EnSyatekiOkuta* this, PlayState* play);
-void func_80A36444(EnSyatekiOkuta* this);
-void func_80A36488(EnSyatekiOkuta* this, PlayState* play);
-void func_80A364C0(EnSyatekiOkuta* this);
-void func_80A36504(EnSyatekiOkuta* this, PlayState* play);
-void func_80A365EC(EnSyatekiOkuta* this, PlayState* play);
-void func_80A36CB0(EnSyatekiOkuta* this);
+void EnSyatekiOkuta_SetupAttachToShootingGalleryMan(EnSyatekiOkuta* this);
+void EnSyatekiOkuta_AttachToShootingGalleryMan(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_SetupDoNothing(EnSyatekiOkuta* this);
+void EnSyatekiOkuta_DoNothing(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_Appear(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_SetupFloat(EnSyatekiOkuta* this);
+void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_SetupHide(EnSyatekiOkuta* this);
+void EnSyatekiOkuta_Hide(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_Die(EnSyatekiOkuta* this, PlayState* play);
+void EnSyatekiOkuta_UpdateHeadScale(EnSyatekiOkuta* this);
ActorInit En_Syateki_Okuta_InitVars = {
ACTOR_EN_SYATEKI_OKUTA,
@@ -60,13 +60,23 @@ static ColliderCylinderInit sCylinderInit = {
{ 20, 40, -30, { 0, 0, 0 } },
};
+typedef enum {
+ /* 0 */ SG_OCTO_ANIM_SHOOT, // unused
+ /* 1 */ SG_OCTO_ANIM_DIE,
+ /* 2 */ SG_OCTO_ANIM_HIDE,
+ /* 3 */ SG_OCTO_ANIM_FLOAT,
+ /* 4 */ SG_OCTO_ANIM_APPEAR,
+ /* 5 */ SG_OCTO_ANIM_HIT, // unused
+ /* 6 */ SG_OCTO_ANIM_MAX
+} ShootingGalleryOctorokAnimation;
+
static AnimationInfo sAnimationInfo[] = {
- { &gOctorokShootAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gOctorokDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gOctorokHideAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gOctorokFloatAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gOctorokAppearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gOctorokHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gOctorokShootAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_SHOOT
+ { &gOctorokDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_DIE
+ { &gOctorokHideAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_HIDE
+ { &gOctorokFloatAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_OCTO_ANIM_FLOAT
+ { &gOctorokAppearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_APPEAR
+ { &gOctorokHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_HIT
};
#include "assets/overlays/ovl_En_Syateki_Okuta/ovl_En_Syateki_Okuta.c"
@@ -76,16 +86,6 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 6500, ICHAIN_STOP),
};
-Color_RGBA8 D_80A37B90 = { 255, 255, 255, 255 };
-
-Color_RGBA8 D_80A37B94 = { 150, 150, 150, 255 };
-
-Vec3f D_80A37B98 = { 0.0f, -0.5, 0.0f };
-
-Color_RGBA8 D_80A37BA4 = { 255, 255, 255, 255 };
-
-Color_RGBA8 D_80A37BA8 = { 150, 150, 150, 0 };
-
void EnSyatekiOkuta_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnSyatekiOkuta* this = THIS;
@@ -110,9 +110,9 @@ void EnSyatekiOkuta_Init(Actor* thisx, PlayState* play) {
this->actor.world.pos.y = this->actor.home.pos.y = ySurface;
}
- this->unk_2A4 = 0;
- this->unk_2AA = 0;
- func_80A36260(this);
+ this->deathTimer = 0;
+ this->hitResultAlpha = 0;
+ EnSyatekiOkuta_SetupAttachToShootingGalleryMan(this);
}
void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play) {
@@ -121,30 +121,45 @@ void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80A36148(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) {
- func_800B0DE0(play, pos, velocity, &gZeroVec3f, &D_80A37B90, &D_80A37B94, 400, scaleStep);
+/**
+ * Spawns the puff of smoke that appears when the Octorok disappears when it dies.
+ */
+void EnSyatekiOkuta_SpawnDust(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) {
+ static Color_RGBA8 sDustPrimColor = { 255, 255, 255, 255 };
+ static Color_RGBA8 sDustEnvColor = { 150, 150, 150, 255 };
+
+ func_800B0DE0(play, pos, velocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 400, scaleStep);
}
-void func_80A361B0(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Spawns the splash that appears when the Octorok appears from underwater, hides underwater, or dies.
+ */
+void EnSyatekiOkuta_SpawnSplash(EnSyatekiOkuta* this, PlayState* play) {
EffectSsGSplash_Spawn(play, &this->actor.home.pos, NULL, NULL, 0, 800);
}
-s32 func_80A361F4(EnSyatekiOkuta* this) {
- s32 temp_a0;
- s32 temp_a1;
- s32 temp_v1;
+/*
+ * Returns true if this Octorok is hidden (in other words, if it's in the center
+ * column and has another Octorok in front of it), false otherwise.
+ */
+s32 EnSyatekiOkuta_IsHiddenByAnotherOctorok(EnSyatekiOkuta* this) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
+ s32 index = SG_OCTO_GET_INDEX(&this->actor);
- temp_v1 = EN_SYATEKI_OKUTA_GET_F(&this->actor);
- if ((temp_v1 == 1) || (temp_v1 == 4)) {
- temp_a0 = syatekiMan->octorokFlags;
- temp_a1 = (temp_v1 * 2) + 6;
-
- if ((temp_a0 >> temp_a1) & 3) {
+ // Only the Octoroks in the center column can be obscured by another Octorok. The Octoroks in the
+ // left and right columns are always visible, since the player looks at them from an angle.
+ // Additionally, the Octorok in the front row is always visible, even if it's in the center column.
+ if ((index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_BACK, SG_OCTO_COL_CENTER)) ||
+ (index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_CENTER, SG_OCTO_COL_CENTER))) {
+ // Checks to see if this Octorok is hidden by an Octorok immediately in front of it.
+ if (SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_INDEX_DIRECTLY_IN_FRONT(index)) != SG_OCTO_TYPE_NONE) {
return true;
}
- if ((temp_a1 == 8) && ((temp_a0 >> 0xE) & 3)) {
+ // If this Octorok is in the back row, it can also be hidden by an Octorok in the front row.
+ if ((index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_BACK, SG_OCTO_COL_CENTER)) &&
+ (SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_FRONT, SG_OCTO_COL_CENTER)) !=
+ SG_OCTO_TYPE_NONE)) {
return true;
}
}
@@ -152,143 +167,177 @@ s32 func_80A361F4(EnSyatekiOkuta* this) {
return false;
}
-void func_80A36260(EnSyatekiOkuta* this) {
+void EnSyatekiOkuta_SetupAttachToShootingGalleryMan(EnSyatekiOkuta* this) {
Animation_PlayOnceSetSpeed(&this->skelAnime, &gOctorokAppearAnim, 0.0f);
this->actor.draw = NULL;
- this->actionFunc = func_80A362A8;
+ this->actionFunc = EnSyatekiOkuta_AttachToShootingGalleryMan;
}
-void func_80A362A8(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Checks every NPC actor in the scene to find the Shooting Gallery Man. Once it finds him, this will
+ * make him the parent to the Octorok. This is required because the Octoroks are normally spawned as
+ * part of the Town Shooting Gallery scene, so they don't have anything that links them to the Shooting
+ * Gallery Man, and the Octoroks need a pointer to him in order to access his Octorok flags. If this
+ * actor is spawned in a scene *without* the Shooting Gallery Man, its action function will never change
+ * from this function, and the Octorok will effectively do nothing.
+ */
+void EnSyatekiOkuta_AttachToShootingGalleryMan(EnSyatekiOkuta* this, PlayState* play) {
Actor* actorIt = play->actorCtx.actorLists[ACTORCAT_NPC].first;
while (actorIt != NULL) {
if (actorIt->id == ACTOR_EN_SYATEKI_MAN) {
this->actor.parent = actorIt;
- func_80A362F8(this);
+ EnSyatekiOkuta_SetupDoNothing(this);
break;
- } else {
- actorIt = actorIt->next;
}
+
+ actorIt = actorIt->next;
}
}
-void func_80A362F8(EnSyatekiOkuta* this) {
+/**
+ * Stops the Octorok's animation, prevents it from drawing, and sets its action function to do nothing.
+ * The intention here is to stay in this action function doing nothing until the Shooting Gallery Man
+ * tells it to appear in EnSyatekiOkuta_CheckForSignal, at which point the action function will be changed.
+ */
+void EnSyatekiOkuta_SetupDoNothing(EnSyatekiOkuta* this) {
Animation_PlayOnceSetSpeed(&this->skelAnime, &gOctorokAppearAnim, 0.0f);
this->actor.draw = NULL;
Actor_SetScale(&this->actor, 0.01f);
- this->actionFunc = func_80A36350;
+ this->actionFunc = EnSyatekiOkuta_DoNothing;
}
-void func_80A36350(EnSyatekiOkuta* this, PlayState* play) {
+void EnSyatekiOkuta_DoNothing(EnSyatekiOkuta* this, PlayState* play) {
}
-void func_80A36360(EnSyatekiOkuta* this) {
+void EnSyatekiOkuta_SetupAppear(EnSyatekiOkuta* this) {
this->actor.draw = EnSyatekiOkuta_Draw;
- this->unk_2AA = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
- this->actionFunc = func_80A363B4;
+ this->hitResultAlpha = 0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_APPEAR);
+ this->actionFunc = EnSyatekiOkuta_Appear;
}
-void func_80A363B4(EnSyatekiOkuta* this, PlayState* play) {
- if ((Animation_OnFrame(&this->skelAnime, 2.0f)) || (Animation_OnFrame(&this->skelAnime, 15.0f))) {
- if (func_80A361F4(this)) {
+/**
+ * Jumps out of the water and starts floating.
+ */
+void EnSyatekiOkuta_Appear(EnSyatekiOkuta* this, PlayState* play) {
+ if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
+ if (EnSyatekiOkuta_IsHiddenByAnotherOctorok(this)) {
return;
- } else {
- func_80A361B0(this, play);
- Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP);
}
+
+ EnSyatekiOkuta_SpawnSplash(this, play);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A36444(this);
+ EnSyatekiOkuta_SetupFloat(this);
}
}
-void func_80A36444(EnSyatekiOkuta* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- this->actionFunc = func_80A36488;
+void EnSyatekiOkuta_SetupFloat(EnSyatekiOkuta* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_FLOAT);
+ this->actionFunc = EnSyatekiOkuta_Float;
}
-void func_80A36488(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Floats in place until the Shooting Gallery Man tells it to hide.
+ */
+void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
+ // In practice, if the Octorok is floating, then the octorokState is either SG_OCTO_STATE_APPEARED or
+ // SG_OCTO_STATE_HIDING. Only the latter state is greater than SG_OCTO_STATE_INITIAL, so that's what
+ // this check is looking for.
if (syatekiMan->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL) {
- func_80A364C0(this);
+ EnSyatekiOkuta_SetupHide(this);
}
}
-void func_80A364C0(EnSyatekiOkuta* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- this->actionFunc = func_80A36504;
+void EnSyatekiOkuta_SetupHide(EnSyatekiOkuta* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_HIDE);
+ this->actionFunc = EnSyatekiOkuta_Hide;
}
-void func_80A36504(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Retreats underwater, then makes the Octorok do nothing until the Shooting Gallery Man tells it to appear again.
+ */
+void EnSyatekiOkuta_Hide(EnSyatekiOkuta* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
- func_80A361B0(this, play);
+ EnSyatekiOkuta_SpawnSplash(this, play);
Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_LAND);
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A362F8(this);
+ EnSyatekiOkuta_SetupDoNothing(this);
}
}
-void func_80A3657C(EnSyatekiOkuta* this) {
- this->unk_2A4 = 0;
- this->unk_2AA = 300;
- if (this->unk_2A6 == 1) {
+void EnSyatekiOkuta_SetupDie(EnSyatekiOkuta* this) {
+ this->deathTimer = 0;
+ this->hitResultAlpha = 300;
+ if (this->type == SG_OCTO_TYPE_RED) {
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD1);
}
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
- this->actionFunc = func_80A365EC;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_DIE);
+ this->actionFunc = EnSyatekiOkuta_Die;
}
-void func_80A365EC(EnSyatekiOkuta* this, PlayState* play) {
- Vec3f sp84;
- Vec3f sp78;
+/**
+ * Plays the death animation and slowly shrinks the Octorok. Also spawns various bubble and dust
+ * effects as it dies. Once the Octorok is finished with its death animation, this function will
+ * make it do nothing until the Shooting Gallery Man tells it to appear again.
+ */
+void EnSyatekiOkuta_Die(EnSyatekiOkuta* this, PlayState* play) {
+ static Vec3f sBubbleAccel = { 0.0f, -0.5, 0.0f };
+ static Color_RGBA8 sBubblePrimColor = { 255, 255, 255, 255 };
+ static Color_RGBA8 sBubbleEnvColor = { 150, 150, 150, 0 };
+ Vec3f velocity;
+ Vec3f pos;
s32 pad;
s32 i;
- if (this->unk_2AA > 0) {
- this->unk_2AA -= 15;
+ if (this->hitResultAlpha > 0) {
+ this->hitResultAlpha -= 15;
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- if (this->unk_2A4 == 0) {
- sp78.x = this->actor.world.pos.x;
- sp78.y = this->actor.world.pos.y + 40.0f;
- sp78.z = this->actor.world.pos.z;
- sp84.x = 0.0f;
- sp84.y = -0.5f;
- sp84.z = 0.0f;
- func_80A36148(&sp78, &sp84, -20, play);
+ if (this->deathTimer == 0) {
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + 40.0f;
+ pos.z = this->actor.world.pos.z;
+ velocity.x = 0.0f;
+ velocity.y = -0.5f;
+ velocity.z = 0.0f;
+ EnSyatekiOkuta_SpawnDust(&pos, &velocity, -20, play);
Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
}
- this->unk_2A4++;
+ this->deathTimer++;
}
if (Animation_OnFrame(&this->skelAnime, 15.0f)) {
- func_80A361B0(this, play);
+ EnSyatekiOkuta_SpawnSplash(this, play);
}
- if (this->unk_2A4 < 3) {
- Actor_SetScale(&this->actor, ((this->unk_2A4 * 0.25f) + 1.0f) * 0.01f);
- } else if (this->unk_2A4 < 6) {
- Actor_SetScale(&this->actor, (1.5f - ((this->unk_2A4 - 2) * 0.2333f)) * 0.01f);
- } else if (this->unk_2A4 < 11) {
- Actor_SetScale(&this->actor, (((this->unk_2A4 - 5) * 0.04f) + 0.8f) * 0.01f);
+ if (this->deathTimer < 3) {
+ Actor_SetScale(&this->actor, ((this->deathTimer * 0.25f) + 1.0f) * 0.01f);
+ } else if (this->deathTimer < 6) {
+ Actor_SetScale(&this->actor, (1.5f - ((this->deathTimer - 2) * 0.2333f)) * 0.01f);
+ } else if (this->deathTimer < 11) {
+ Actor_SetScale(&this->actor, (((this->deathTimer - 5) * 0.04f) + 0.8f) * 0.01f);
} else {
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.002f)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_COMMON_WATER_MID);
for (i = 0; i < 10; i++) {
- sp84.x = (Rand_ZeroOne() - 0.5f) * 7.0f;
- sp84.y = Rand_ZeroOne() * 7.0f;
- sp84.z = (Rand_ZeroOne() - 0.5f) * 7.0f;
- EffectSsDtBubble_SpawnCustomColor(play, &this->actor.world.pos, &sp84, &D_80A37B98, &D_80A37BA4,
- &D_80A37BA8, Rand_S16Offset(100, 50), 25, false);
+ velocity.x = (Rand_ZeroOne() - 0.5f) * 7.0f;
+ velocity.y = Rand_ZeroOne() * 7.0f;
+ velocity.z = (Rand_ZeroOne() - 0.5f) * 7.0f;
+ EffectSsDtBubble_SpawnCustomColor(play, &this->actor.world.pos, &velocity, &sBubbleAccel,
+ &sBubblePrimColor, &sBubbleEnvColor, Rand_S16Offset(100, 50), 25,
+ false);
}
- func_80A362F8(this);
+ EnSyatekiOkuta_SetupDoNothing(this);
}
this->actor.scale.y = this->actor.scale.x;
@@ -296,13 +345,17 @@ void func_80A365EC(EnSyatekiOkuta* this, PlayState* play) {
}
}
-void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Adjusts the collider's dimensions and position based on a few different factors, like the Octorok's
+ * type, current scale and head scale, and current action.
+ */
+void EnSyatekiOkuta_UpdateCollision(EnSyatekiOkuta* this, PlayState* play) {
this->collider.dim.height =
- (sCylinderInit.dim.height - this->collider.dim.yShift) * this->unk_1D8.y * this->actor.scale.y * 100.0f;
+ (sCylinderInit.dim.height - this->collider.dim.yShift) * this->headScale.y * this->actor.scale.y * 100.0f;
this->collider.dim.radius = sCylinderInit.dim.radius * this->actor.scale.x * 100.0f;
- if (this->actionFunc == func_80A363B4) {
- if ((this->unk_2A6 == 2) && func_80A361F4(this)) {
+ if (this->actionFunc == EnSyatekiOkuta_Appear) {
+ if ((this->type == SG_OCTO_TYPE_BLUE) && EnSyatekiOkuta_IsHiddenByAnotherOctorok(this)) {
return;
}
@@ -311,7 +364,7 @@ void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) {
}
}
- if (this->unk_2A6 == 1) {
+ if (this->type == SG_OCTO_TYPE_RED) {
this->collider.dim.radius += 10;
this->collider.dim.height += 15;
}
@@ -323,8 +376,11 @@ void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
-s32 func_80A36A90(EnSyatekiOkuta* this, PlayState* play) {
- if ((this->actionFunc == func_80A365EC) || (this->actionFunc == func_80A36350)) {
+/**
+ * Returns true if the Octorok has been hit, false otherwise.
+ */
+s32 EnSyatekiOkuta_CheckCollision(EnSyatekiOkuta* this, PlayState* play) {
+ if ((this->actionFunc == EnSyatekiOkuta_Die) || (this->actionFunc == EnSyatekiOkuta_DoNothing)) {
return false;
}
@@ -333,22 +389,28 @@ s32 func_80A36A90(EnSyatekiOkuta* this, PlayState* play) {
return true;
}
- func_80A368E0(this, play);
+ EnSyatekiOkuta_UpdateCollision(this, play);
return false;
}
-void func_80A36AF8(EnSyatekiOkuta* this, PlayState* play) {
+/**
+ * Checks to see if both the archery game and this Octorok are in the appropriate state to consider
+ * appearing. If the conditions are right, then the Shooting Gallery Man's Octorok flags determine
+ * what type this Octorok should be for the current wave; if the type is *not* SG_OCTO_TYPE_NONE,
+ * then this Octorok will set itself to the appropriate type and get ready to jump out of the water.
+ */
+void EnSyatekiOkuta_CheckForSignal(EnSyatekiOkuta* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- s16 temp_v1_2;
+ s16 type;
- if ((this->actionFunc != func_80A36488) && (this->actionFunc != func_80A363B4) &&
+ if ((this->actionFunc != EnSyatekiOkuta_Float) && (this->actionFunc != EnSyatekiOkuta_Appear) &&
(syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) &&
- (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_SPAWNING)) {
- temp_v1_2 = (syatekiMan->octorokFlags >> (EN_SYATEKI_OKUTA_GET_F(&this->actor) * 2)) & 3;
- if (temp_v1_2 > 0) {
+ (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING)) {
+ type = SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_GET_INDEX(&this->actor));
+ if (type > SG_OCTO_TYPE_NONE) {
Actor_SetScale(&this->actor, 0.01f);
- this->unk_2A6 = temp_v1_2;
- func_80A36360(this);
+ this->type = type;
+ EnSyatekiOkuta_SetupAppear(this);
}
}
}
@@ -360,101 +422,108 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if (this->actionFunc != func_80A36350) {
+ if (this->actionFunc != EnSyatekiOkuta_DoNothing) {
SkelAnime_Update(&this->skelAnime);
}
- func_80A36AF8(this, play);
+ EnSyatekiOkuta_CheckForSignal(this, play);
- if (func_80A36A90(this, play)) {
+ if (EnSyatekiOkuta_CheckCollision(this, play)) {
syatekiMan = (EnSyatekiMan*)this->actor.parent;
- if (this->unk_2A6 == 1) {
+ if (this->type == SG_OCTO_TYPE_RED) {
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
play->interfaceCtx.minigamePoints++;
syatekiMan->score++;
- syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED;
+ syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_RED;
} else {
Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
- syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_BLUE;
+ syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_BLUE;
}
- func_80A3657C(this);
+ EnSyatekiOkuta_SetupDie(this);
} else {
this->collider.base.acFlags &= ~AC_HIT;
}
- func_80A36CB0(this);
+ EnSyatekiOkuta_UpdateHeadScale(this);
}
-void func_80A36CB0(EnSyatekiOkuta* this) {
+/**
+ * Adjusts the scale of the Octorok's head based on their current action and their current animation frame.
+ */
+void EnSyatekiOkuta_UpdateHeadScale(EnSyatekiOkuta* this) {
f32 curFrame = this->skelAnime.curFrame;
- if (this->actionFunc == func_80A363B4) {
+ if (this->actionFunc == EnSyatekiOkuta_Appear) {
if (curFrame < 8.0f) {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f;
+ this->headScale.x = this->headScale.y = this->headScale.z = 1.0f;
} else if (curFrame < 10.0f) {
- this->unk_1D8.x = this->unk_1D8.z = 1.0f;
- this->unk_1D8.y = ((curFrame - 7.0f) * 0.4f) + 1.0f;
+ this->headScale.x = this->headScale.z = 1.0f;
+ this->headScale.y = ((curFrame - 7.0f) * 0.4f) + 1.0f;
} else if (curFrame < 14.0f) {
- this->unk_1D8.x = this->unk_1D8.z = ((curFrame - 9.0f) * 0.075f) + 1.0f;
- this->unk_1D8.y = 1.8f - ((curFrame - 9.0f) * 0.25f);
+ this->headScale.x = this->headScale.z = ((curFrame - 9.0f) * 0.075f) + 1.0f;
+ this->headScale.y = 1.8f - ((curFrame - 9.0f) * 0.25f);
} else {
- this->unk_1D8.x = this->unk_1D8.z = 1.3f - ((curFrame - 13.0f) * 0.05f);
- this->unk_1D8.y = ((curFrame - 13.0f) * 0.0333f) + 0.8f;
+ this->headScale.x = this->headScale.z = 1.3f - ((curFrame - 13.0f) * 0.05f);
+ this->headScale.y = ((curFrame - 13.0f) * 0.0333f) + 0.8f;
}
- } else if (this->actionFunc == func_80A36488) {
- this->unk_1D8.x = this->unk_1D8.z = 1.0f;
- this->unk_1D8.y = (sin_rad((M_PI / 16) * curFrame) * 0.2f) + 1.0f;
- } else if (this->actionFunc == func_80A36504) {
+ } else if (this->actionFunc == EnSyatekiOkuta_Float) {
+ this->headScale.x = this->headScale.z = 1.0f;
+ this->headScale.y = (Math_SinF((M_PI / 16) * curFrame) * 0.2f) + 1.0f;
+ } else if (this->actionFunc == EnSyatekiOkuta_Hide) {
if (curFrame < 3.0f) {
- this->unk_1D8.y = 1.0f;
+ this->headScale.y = 1.0f;
} else if (curFrame < 4.0f) {
- this->unk_1D8.y = (curFrame - 2.0f) + 1.0f;
+ this->headScale.y = (curFrame - 2.0f) + 1.0f;
} else {
- this->unk_1D8.y = 2.0f - ((curFrame - 3.0f) * 0.333f);
+ this->headScale.y = 2.0f - ((curFrame - 3.0f) * 0.333f);
}
- this->unk_1D8.x = this->unk_1D8.z = 1.0f;
- } else if (this->actionFunc == func_80A365EC) {
- curFrame += this->unk_2A4;
+ this->headScale.x = this->headScale.z = 1.0f;
+ } else if (this->actionFunc == EnSyatekiOkuta_Die) {
+ curFrame += this->deathTimer;
if (curFrame >= 35.0f) {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f;
+ this->headScale.x = this->headScale.y = this->headScale.z = 1.0f;
} else if (curFrame < 4.0f) {
- this->unk_1D8.x = this->unk_1D8.z = 1.0f - (curFrame * 0.0666f);
- this->unk_1D8.y = (curFrame * 0.1666f) + 1.0f;
+ this->headScale.x = this->headScale.z = 1.0f - (curFrame * 0.0666f);
+ this->headScale.y = (curFrame * 0.1666f) + 1.0f;
} else if (curFrame < 25.0f) {
- this->unk_1D8.x = this->unk_1D8.z = ((curFrame - 4.0f) * 0.01f) + 0.8f;
- this->unk_1D8.y = 1.5f - ((curFrame - 4.0f) * 0.025f);
+ this->headScale.x = this->headScale.z = ((curFrame - 4.0f) * 0.01f) + 0.8f;
+ this->headScale.y = 1.5f - ((curFrame - 4.0f) * 0.025f);
} else if (curFrame < 27.0f) {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = ((curFrame - 24.0f) * 0.25f) + 1.0f;
+ this->headScale.x = this->headScale.y = this->headScale.z = ((curFrame - 24.0f) * 0.25f) + 1.0f;
} else if (curFrame < 30.0f) {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.5f - ((curFrame - 26.0f) * 0.233f);
+ this->headScale.x = this->headScale.y = this->headScale.z = 1.5f - ((curFrame - 26.0f) * 0.233f);
} else {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = ((curFrame - 29.0f) * 0.04f) + 0.8f;
+ this->headScale.x = this->headScale.y = this->headScale.z = ((curFrame - 29.0f) * 0.04f) + 0.8f;
}
} else {
- this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f;
+ this->headScale.x = this->headScale.y = this->headScale.z = 1.0f;
}
}
-s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) {
- if (this->actionFunc == func_80A363B4) {
- arg2->y = 1.0f;
- arg2->z = 1.0f;
- arg2->x = (sin_rad((M_PI / 16) * arg1) * 0.4f) + 1.0f;
- } else if (this->actionFunc == func_80A365EC) {
- if ((arg1 >= 35.0f) || (arg1 < 25.0f)) {
+/**
+ * Returns true if the snout scale should be updated, false otherwise. The snout scale is returned via the scale
+ * parameter.
+ */
+s32 EnSyatekiOkuta_GetSnoutScale(EnSyatekiOkuta* this, f32 curFrame, Vec3f* scale) {
+ if (this->actionFunc == EnSyatekiOkuta_Appear) {
+ scale->y = 1.0f;
+ scale->z = 1.0f;
+ scale->x = (Math_SinF((M_PI / 16) * curFrame) * 0.4f) + 1.0f;
+ } else if (this->actionFunc == EnSyatekiOkuta_Die) {
+ if ((curFrame >= 35.0f) || (curFrame < 25.0f)) {
return false;
}
- if (arg1 < 27.0f) {
- arg2->z = 1.0f;
- arg2->x = arg2->y = ((arg1 - 24.0f) * 0.5f) + 1.0f;
- } else if (arg1 < 30.0f) {
- arg2->z = (arg1 - 26.0f) * 0.333f + 1.0f;
- arg2->x = arg2->y = 2.0f - (arg1 - 26.0f) * 0.333f;
+ if (curFrame < 27.0f) {
+ scale->z = 1.0f;
+ scale->x = scale->y = ((curFrame - 24.0f) * 0.5f) + 1.0f;
+ } else if (curFrame < 30.0f) {
+ scale->z = (curFrame - 26.0f) * 0.333f + 1.0f;
+ scale->x = scale->y = 2.0f - (curFrame - 26.0f) * 0.333f;
} else {
- arg2->z = 2.0f - ((arg1 - 29.0f) * 0.2f);
- arg2->x = arg2->y = 1.0f;
+ scale->z = 2.0f - ((curFrame - 29.0f) * 0.2f);
+ scale->x = scale->y = 1.0f;
}
} else {
return false;
@@ -465,20 +534,20 @@ s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) {
s32 EnSyatekiOkuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
s32 pad;
- Vec3f sp20;
+ Vec3f scale;
f32 curFrame;
EnSyatekiOkuta* this = THIS;
curFrame = this->skelAnime.curFrame;
- if (this->actionFunc == func_80A365EC) {
- curFrame += this->unk_2A4;
+ if (this->actionFunc == EnSyatekiOkuta_Die) {
+ curFrame += this->deathTimer;
}
if (limbIndex == OCTOROK_LIMB_HEAD) {
- sp20 = this->unk_1D8;
- Matrix_Scale(sp20.x, sp20.y, sp20.z, MTXMODE_APPLY);
- } else if ((limbIndex == OCTOROK_LIMB_SNOUT) && (func_80A370EC(this, curFrame, &sp20))) {
- Matrix_Scale(sp20.x, sp20.y, sp20.z, MTXMODE_APPLY);
+ scale = this->headScale;
+ Matrix_Scale(scale.x, scale.y, scale.z, MTXMODE_APPLY);
+ } else if ((limbIndex == OCTOROK_LIMB_SNOUT) && (EnSyatekiOkuta_GetSnoutScale(this, curFrame, &scale))) {
+ Matrix_Scale(scale.x, scale.y, scale.z, MTXMODE_APPLY);
}
return false;
@@ -489,8 +558,8 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- if (this->unk_2A6 == 1) {
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ if (this->type == SG_OCTO_TYPE_RED) {
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
} else {
gSPSegment(POLY_OPA_DISP++, 0x08, gShootingGalleryOctorokBlueMaterialDL);
@@ -498,20 +567,22 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSyatekiOkuta_OverrideLimbDraw, NULL,
&this->actor);
- func_8012C2DC(play->state.gfxCtx);
- if (this->actionFunc == func_80A365EC) {
+
+ // Draw the circle or cross that appears when the player hits an Octorok
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ if (this->actionFunc == EnSyatekiOkuta_Die) {
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z + 20.0f,
MTXMODE_NEW);
- if (this->unk_2AA >= 256) {
+ if (this->hitResultAlpha > 255) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, 255);
} else {
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, this->unk_2AA);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, this->hitResultAlpha);
}
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- if (this->unk_2A6 == 2) {
+ if (this->type == SG_OCTO_TYPE_BLUE) {
gSPDisplayList(POLY_XLU_DISP++, gShootingGalleryOctorokCrossDL);
} else {
gSPDisplayList(POLY_XLU_DISP++, gShootingGalleryOctorokCircleDL);
diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h
index 0527354d0..72be15406 100644
--- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h
+++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h
@@ -4,7 +4,39 @@
#include "global.h"
#include "objects/object_okuta/object_okuta.h"
-#define EN_SYATEKI_OKUTA_GET_F(thisx) ((thisx)->params & 0xF)
+typedef enum {
+ /* 0 */ SG_OCTO_TYPE_NONE,
+ /* 1 */ SG_OCTO_TYPE_RED,
+ /* 2 */ SG_OCTO_TYPE_BLUE,
+ /* 3 */ SG_OCTO_TYPE_MAX
+} ShootingGalleryOctorokType;
+
+typedef enum {
+ /* 0 */ SG_OCTO_ROW_BACK,
+ /* 1 */ SG_OCTO_ROW_CENTER,
+ /* 2 */ SG_OCTO_ROW_FRONT,
+ /* 3 */ SG_OCTO_ROW_MAX
+} ShootingGalleryOctorokRow;
+
+typedef enum {
+ /* 0 */ SG_OCTO_COL_LEFT,
+ /* 1 */ SG_OCTO_COL_CENTER,
+ /* 2 */ SG_OCTO_COL_RIGHT,
+ /* 3 */ SG_OCTO_COL_MAX
+} ShootingGalleryOctorokColumn;
+
+#define SG_OCTO_GET_INDEX(thisx) ((thisx)->params & 0xF)
+#define SG_OCTO_INDEX_FOR_POS(row, column) (((row) * SG_OCTO_COL_MAX) + (column))
+
+// This returns the index of the Octorok directly in front of the Octorok at the given index. In other words, it
+// returns the index of the Octorok in the same column as the one with the given index, but one row ahead. It's
+// assumed that this will only be used for Octoroks in the back or center row; it returns an invalid index for
+// Octoroks in the front row.
+#define SG_OCTO_INDEX_DIRECTLY_IN_FRONT(index) ((index) + SG_OCTO_COL_MAX)
+
+// Both of these macros assume that the Octorok types can fit in two bits, hence why the index is multiplied by 2.
+#define SG_OCTO_GET_TYPE(octorokFlags, index) (((octorokFlags) >> ((index) * 2)) & SG_OCTO_TYPE_MAX)
+#define SG_OCTO_SET_FLAG(type, index) ((type & SG_OCTO_TYPE_MAX) << ((index) * 2))
struct EnSyatekiOkuta;
@@ -15,13 +47,13 @@ typedef struct EnSyatekiOkuta {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnSyatekiOkutaActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
- /* 0x1DC */ Vec3f unk_1D8;
+ /* 0x1DC */ Vec3f headScale;
/* 0x1E4 */ Vec3s jointTable[OCTOROK_LIMB_MAX];
/* 0x244 */ Vec3s morphTable[OCTOROK_LIMB_MAX];
- /* 0x2A4 */ s16 unk_2A4;
- /* 0x2A6 */ s16 unk_2A6;
+ /* 0x2A4 */ s16 deathTimer;
+ /* 0x2A6 */ s16 type;
/* 0x2A8 */ UNK_TYPE1 unk_2A8[0x2];
- /* 0x2AA */ s16 unk_2AA;
+ /* 0x2AA */ s16 hitResultAlpha;
} EnSyatekiOkuta; // size = 0x2AC
#endif // Z_EN_SYATEKI_OKUTA_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
index 8a3a65ed2..347d78088 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
@@ -120,7 +120,7 @@ typedef enum {
/* 3 */ EN_SYATEKI_WF_ANIM_LAND,
/* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused
/* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED,
- /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER,
+ /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER
} EnSyatekiWfAnimation;
static AnimationInfo sAnimationInfo[] = {
@@ -146,12 +146,12 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
s32 i;
path = syatekiMan->path;
- while (path->unk2 != 2) {
- path = &play->setupPathList[path->unk1];
+ while (path->customValue != SG_PATH_TYPE_WOLFOS) {
+ path = &play->setupPathList[path->additionalPathIndex];
}
for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
if (path == NULL) {
@@ -408,9 +408,9 @@ void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play) {
s32 i;
for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i--) {
- firePos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- firePos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
- firePos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ firePos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x;
+ firePos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z;
+ firePos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f);
func_800B3030(play, &firePos, &sFireVelocityAndAccel, &sFireVelocityAndAccel, 100, 0, 2);
}
}
@@ -505,7 +505,7 @@ void EnSyatekiWf_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnSyatekiWf_OverrideLimbDraw, EnSyatekiWf_PostLimbDraw, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c
index dfa1e0bb7..1f97e5c57 100644
--- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c
+++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c
@@ -617,7 +617,7 @@ void EnTab_Draw(Actor* thisx, PlayState* play) {
if (this->unk_1D8 != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BE1B24[this->unk_31E]));
diff --git a/src/overlays/actors/ovl_En_Talk/z_en_talk.c b/src/overlays/actors/ovl_En_Talk/z_en_talk.c
index 4f9b2a53d..7c639c44a 100644
--- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c
+++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c
@@ -32,7 +32,7 @@ void EnTalk_Init(Actor* thisx, PlayState* play) {
EnTalk* this = THIS;
s8 targetMode = this->actor.home.rot.x - 0x1;
- if (targetMode >= 0 && targetMode < 7) {
+ if ((targetMode >= 0) && (targetMode < 7)) {
this->actor.targetMode = targetMode;
}
@@ -56,7 +56,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) {
return;
}
- if ((this->actor.xzDistToPlayer < 40.0f && Player_IsFacingActor(&this->actor, 0x3000, play)) ||
+ if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) ||
this->actor.isTargeted) {
func_800B8614(&this->actor, play, 120.0f);
}
diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c
index 11d984fe7..84d0b7dd1 100644
--- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c
+++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c
@@ -53,12 +53,12 @@ typedef struct {
/* 0x4 */ ItemId item;
/* 0x8 */ s32 amount;
/* 0xC */ s16 isBottledItem;
-} EnTalkGibudRequestedItem;
+} EnTalkGibudRequestedItem; // size = 0x10
typedef enum {
/* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET,
/* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO,
- /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET,
+ /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET
} EnTalkGibudRequestedItemState;
typedef enum {
@@ -71,7 +71,7 @@ typedef enum {
/* 6 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS,
/* 7 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER,
/* 8 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE,
- /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK,
+ /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK
} EnTalkGibudRequestedItemIndex;
typedef enum {
@@ -88,18 +88,18 @@ typedef enum {
/* 10 */ EN_TALK_GIBUD_ANIM_WALK,
/* 11 */ EN_TALK_GIBUD_ANIM_DANCE_SQUAT,
/* 12 */ EN_TALK_GIBUD_ANIM_DANCE_PIROUETTE,
- /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP,
+ /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP
} EnTalkGibudAnimation;
typedef enum {
/* 0 */ EN_TALK_GIBUD_TYPE_GIBDO,
- /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD,
+ /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD
} EnTalkGibudType;
typedef enum {
/* 0 */ EN_TALK_GIBUD_GRAB_START,
/* 1 */ EN_TALK_GIBUD_GRAB_ATTACK,
- /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE,
+ /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE
} EnTalkGibudGrabState;
ActorInit En_Talk_Gibud_InitVars = {
@@ -159,7 +159,7 @@ typedef enum {
/* 0xC */ EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect
/* 0xD */ EN_TALK_GIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation
/* 0xE */ EN_TALK_GIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact
- /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation
+ /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation
} EnTalkGibudDamageEffect;
static DamageTable sDamageTable = {
@@ -268,7 +268,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) {
this->switchFlag = -1;
}
- if (this->switchFlag != -1 && Flags_GetSwitch(play, this->switchFlag)) {
+ if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) {
Actor_Kill(&this->actor);
}
@@ -291,7 +291,7 @@ void EnTalkGibud_SetupIdle(EnTalkGibud* this) {
* Gibdo will attack the player if they get too close.
*/
void EnTalkGibud_Idle(EnTalkGibud* this, PlayState* play) {
- if (this->actor.xzDistToPlayer <= 150.0f && func_800B715C(play)) {
+ if ((this->actor.xzDistToPlayer <= 150.0f) && func_800B715C(play)) {
EnTalkGibud_SetupAttemptPlayerFreeze(this);
}
@@ -345,7 +345,8 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) {
if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) {
if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) {
player->actor.freezeTimer = 0;
- if (gSaveContext.save.playerForm == PLAYER_FORM_GORON || gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
+ if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) ||
+ (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) {
// If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to
// do so. It will appear to take damage and shake its head side-to-side.
EnTalkGibud_SetupGrabFail(this);
@@ -442,6 +443,9 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
Math_SmoothStepToF(&this->actor.shape.yOffset, 0.0f, 1.0f, 400.0f, 0.0f);
}
break;
+
+ default:
+ break;
}
}
@@ -512,7 +516,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) {
this->actor.world.rot = this->actor.shape.rot;
}
if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play)) {
- if (gSaveContext.save.playerForm != PLAYER_FORM_GORON && gSaveContext.save.playerForm != PLAYER_FORM_DEKU &&
+ if ((gSaveContext.save.playerForm != PLAYER_FORM_GORON) && (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) &&
Actor_IsFacingPlayer(&this->actor, 0x38E3)) {
EnTalkGibud_SetupWalkToPlayer(this);
}
@@ -676,6 +680,9 @@ void EnTalkGibud_GetTextIdForRequestedItem(EnTalkGibud* this, PlayState* play) {
Message_StartTextbox(play, 0x1395, &this->actor);
this->textId = 0x1395;
break;
+
+ default:
+ break;
}
}
@@ -700,6 +707,9 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) {
Message_StartTextbox(play, 0xFF, &this->actor);
this->textId = 0xFF;
break;
+
+ default:
+ break;
}
}
}
@@ -1063,8 +1073,8 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) {
break;
case EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC:
- if (this->actionFunc != EnTalkGibud_Grab &&
- (this->actionFunc != EnTalkGibud_Stunned || this->stunTimer == 0)) {
+ if ((this->actionFunc != EnTalkGibud_Grab) &&
+ ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0))) {
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffTimer = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
@@ -1073,10 +1083,13 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) {
break;
case EN_TALK_GIBUD_DMGEFF_STUN:
- if ((this->actionFunc != EnTalkGibud_Stunned) || this->stunTimer == 0) {
+ if ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0)) {
EnTalkGibud_SetupStunned(this);
}
break;
+
+ default:
+ break;
}
}
}
@@ -1114,7 +1127,7 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, PlayState* pla
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f,
UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
UPDBGCHECKINFO_FLAG_10);
- if (this->actionFunc == EnTalkGibud_Grab && this->grabState == EN_TALK_GIBUD_GRAB_START &&
+ if ((this->actionFunc == EnTalkGibud_Grab) && (this->grabState == EN_TALK_GIBUD_GRAB_START) &&
(this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
targetPos = player->actor.world.pos;
targetPos.x += 10.0f * Math_SinS(this->actor.wallYaw);
@@ -1190,7 +1203,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) {
this->limbIndex = 0;
if (this->actor.shape.shadowAlpha == 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
@@ -1199,7 +1212,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnTalkGibud_OverrideLimbDraw, EnTalkGibud_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
index fec6a2d3b..c71676061 100644
--- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
+++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
@@ -248,9 +248,9 @@ void func_80BB5318(EnTanron1* this, PlayState* play) {
ptr->unk_20 = Math_Atan2S(temp.x, temp.z);
ptr->unk_1E = Math_Atan2S(temp.y, sqrtf(SQXZ(temp)));
if ((ptr->unk_26 & 0xF) == 0) {
- ptr->unk_30 = randPlusMinusPoint5Scaled(temp_f30);
- ptr->unk_34 = randPlusMinusPoint5Scaled(temp_f30 * 0.5f);
- ptr->unk_38 = randPlusMinusPoint5Scaled(temp_f30);
+ ptr->unk_30 = Rand_CenteredFloat(temp_f30);
+ ptr->unk_34 = Rand_CenteredFloat(temp_f30 * 0.5f);
+ ptr->unk_38 = Rand_CenteredFloat(temp_f30);
}
temp.x = player->actor.world.pos.x - ptr->unk_00.x;
@@ -336,7 +336,7 @@ void func_80BB5318(EnTanron1* this, PlayState* play) {
Math_ApproachF(&ptr->unk_30, ptr->unk_34, 1.0f, 0.5f);
if ((ptr->unk_26 & 0xF) == 0) {
if (Rand_ZeroOne() < 0.5f) {
- ptr->unk_34 = randPlusMinusPoint5Scaled(12.0f);
+ ptr->unk_34 = Rand_CenteredFloat(12.0f);
}
ptr->unk_3C = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp98, &ptr->unk_00);
sp9C = ptr->unk_00.y;
@@ -369,7 +369,7 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < this->actor.params; i++, ptr++) {
if (ptr->unk_24 == 1) {
@@ -390,26 +390,23 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) {
flag = 0;
ptr = ptrBase;
for (i = 0; i < this->actor.params; i++, ptr++) {
- if (ptr->unk_24 != 2) {
- continue;
+ if (ptr->unk_24 == 2) {
+ if (!flag) {
+ gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD,
+ G_TX_NOLOD);
+ flag++;
+ }
+
+ Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW);
+ Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY);
+ Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900);
}
-
- if (!flag) {
- gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888);
- gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0,
- G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD, G_TX_NOLOD);
- flag++;
- }
-
- Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW);
- Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY);
- Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY);
- Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY);
-
- if (1) {}
-
- gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900);
}
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
index 2d1c29970..785308dad 100644
--- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
+++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
@@ -236,7 +236,7 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) {
switch (this->unk_158) {
case 0:
if (Rand_ZeroOne() > 0.2f) {
- sp32 = Rand_ZeroFloat(65536.0f);
+ sp32 = Rand_ZeroFloat(0x10000);
} else {
sp32 = Math_Atan2S(sp2C, sp28);
}
@@ -592,7 +592,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, gWartBubbleMaterialDL);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 150);
@@ -637,7 +637,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
}
}
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150);
gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL);
@@ -654,7 +654,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) {
tanron2 = tanron2->next;
}
- func_8012C974(play->state.gfxCtx);
+ Gfx_SetupDL60_XluNoCD(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255);
diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c
index c3d62e166..81a4ac2af 100644
--- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c
+++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c
@@ -100,8 +100,8 @@ void EnTanron3_CreateEffect(PlayState* play, Vec3f* effectPos) {
effectPtr->unk_34.y = 0.0f;
effectPtr->unk_34.z = Rand_ZeroFloat(2 * M_PI);
effectPtr->unk_02 = Rand_ZeroFloat(100.0f);
- effectPtr->velocity.x = randPlusMinusPoint5Scaled(25.0f);
- effectPtr->velocity.z = randPlusMinusPoint5Scaled(25.0f);
+ effectPtr->velocity.x = Rand_CenteredFloat(25.0f);
+ effectPtr->velocity.z = Rand_CenteredFloat(25.0f);
break;
}
}
@@ -155,9 +155,9 @@ void EnTanron3_SetupLive(EnTanron3* this, PlayState* play) {
this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = 50;
this->actor.speed = 5.0f;
this->speedMaxStep = 0.5f;
- this->deviation.x = randPlusMinusPoint5Scaled(500.0f);
- this->deviation.y = randPlusMinusPoint5Scaled(100.0f);
- this->deviation.z = randPlusMinusPoint5Scaled(500.0f);
+ this->deviation.x = Rand_CenteredFloat(500.0f);
+ this->deviation.y = Rand_CenteredFloat(100.0f);
+ this->deviation.z = Rand_CenteredFloat(500.0f);
Math_Vec3f_Copy(&this->targetPos, &this->actor.world.pos);
this->timer = Rand_ZeroFloat(100.0f);
}
@@ -180,10 +180,10 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->skelAnime.curFrame = 4.0f;
- if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && player->actor.shape.feetPos[0].y >= 438.0f) {
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.shape.feetPos[0].y >= 438.0f)) {
// Player is standing on the central platform, so stop chasing them
this->isNonHostile = true;
- } else if (this->isNonHostile && this->workTimer[WORK_TIMER_WAIT] == 0 && !(this->timer & 0x1F)) {
+ } else if (this->isNonHostile && (this->workTimer[WORK_TIMER_WAIT] == 0) && !(this->timer & 0x1F)) {
xDistance = this->targetPos.x - player->actor.world.pos.x;
zDistance = this->targetPos.z - player->actor.world.pos.z;
if (sqrtf(SQ(xDistance) + SQ(zDistance)) < 500.0f) {
@@ -204,20 +204,21 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
Math_Vec3f_Copy(&this->targetPos, &player->actor.world.pos);
if (!(this->timer & 0xF)) {
- if (Rand_ZeroOne() < 0.5f && this->actor.xzDistToPlayer <= 200.0f) {
+ if ((Rand_ZeroOne() < 0.5f) && (this->actor.xzDistToPlayer <= 200.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_ATTACK);
}
}
// If the player gets eaten by Gyorg, or if the attack timer ran out,
// stop chasing the player for a little bit.
- if (this->workTimer[WORK_TIMER_ATTACK] == 0 || (player->stateFlags2 & PLAYER_STATE2_80)) {
+ if ((this->workTimer[WORK_TIMER_ATTACK] == 0) || (player->stateFlags2 & PLAYER_STATE2_80)) {
this->workTimer[WORK_TIMER_WAIT] = 150;
this->isNonHostile = true;
}
break;
+
case true:
- if (sGyorg->unk_324 != 0 && !(this->timer & 0x7)) {
+ if ((sGyorg->unk_324 != 0) && !(this->timer & 0x7)) {
this->nextRotationAngle = 0x4E20;
this->actor.speed = 6.0f;
} else {
@@ -242,11 +243,11 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
}
if (this->workTimer[WORK_TIMER_OUT_OF_WATER] == 0) {
- if (this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0 && this->actor.speed > 1.0f) {
+ if ((this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0) && (this->actor.speed > 1.0f)) {
this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = Rand_ZeroFloat(20.0f);
- this->deviation.x = randPlusMinusPoint5Scaled(100.0f);
- this->deviation.y = randPlusMinusPoint5Scaled(50.0f + extraScaleY);
- this->deviation.z = randPlusMinusPoint5Scaled(100.0f);
+ this->deviation.x = Rand_CenteredFloat(100.0f);
+ this->deviation.y = Rand_CenteredFloat(50.0f + extraScaleY);
+ this->deviation.z = Rand_CenteredFloat(100.0f);
}
this->targetPosWithDeviation.y = this->targetPos.y + this->deviation.y + 50.0f;
}
@@ -286,6 +287,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
this->isBeached = true;
}
break;
+
case true:
this->nextRotationAngle = 0x3A98;
this->actor.gravity = -1.5f;
@@ -295,17 +297,17 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
this->actor.speed = Rand_ZeroFloat(2.0f) + 2.0f;
if (Rand_ZeroOne() < 0.5f) {
this->targetShapeRotation.x =
- (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.x + 0x8000;
+ (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.x + 0x8000;
}
if (Rand_ZeroOne() < 0.5f) {
this->targetShapeRotation.z =
- (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.z + 0x8000;
+ (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.z + 0x8000;
}
if (Rand_ZeroOne() < 0.5f) {
this->targetShapeRotation.y = (s16)Rand_ZeroFloat(0x10000);
}
this->actor.world.rot.y = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x) +
- (s16)randPlusMinusPoint5Scaled(0xCE20);
+ (s16)(s32)Rand_CenteredFloat(0xCE20);
}
Math_ApproachS(&this->actor.shape.rot.y, this->targetShapeRotation.y, 3, 0x500);
@@ -314,9 +316,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
if ((Rand_ZeroOne() < 0.5f) & !(this->timer & 0x3)) {
Vec3f effectPos;
- effectPos.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x;
+ effectPos.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x;
effectPos.y = this->actor.world.pos.y;
- effectPos.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z;
+ effectPos.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z;
EnTanron3_CreateEffect(play, &effectPos);
}
break;
@@ -423,7 +425,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->atCollider.base);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->acCollider.base);
- if ((s8)sGyorg->actor.colChkInfo.health <= 0 && this->actionFunc != EnTanron3_Die) {
+ if (((s8)sGyorg->actor.colChkInfo.health <= 0) && (this->actionFunc != EnTanron3_Die)) {
EnTanron3_SetupDie(this, play);
this->workTimer[WORK_TIMER_DIE] = 0;
}
@@ -452,7 +454,7 @@ void EnTanron3_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if ((this->fogTimer % 2) != 0) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099);
}
diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
index 1eaf1d128..074eaec79 100644
--- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
+++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
@@ -23,13 +23,13 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play);
typedef enum {
/* 0 */ SEAGULL_FLY_FLAP,
- /* 1 */ SEAGULL_FLY_GLIDE,
+ /* 1 */ SEAGULL_FLY_GLIDE
} SeagullFlyState;
typedef enum {
/* 0 */ SEAGULL_TIMER_FLY_STATE,
- /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET,
-} SeagullTimers;
+ /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET
+} SeagullTimer;
ActorInit En_Tanron4_InitVars = {
ACTOR_EN_TANRON4,
@@ -65,10 +65,9 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) {
s32 i;
for (i = 0; i < thisx->params; i++) {
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4,
- thisx->world.pos.x + randPlusMinusPoint5Scaled(500.0f),
- thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f),
- thisx->world.pos.z + randPlusMinusPoint5Scaled(500.0f), 0, Rand_ZeroFloat(65536.0f), 0,
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4, thisx->world.pos.x + Rand_CenteredFloat(500.0f),
+ thisx->world.pos.y + Rand_CenteredFloat(100.0f),
+ thisx->world.pos.z + Rand_CenteredFloat(500.0f), 0, Rand_ZeroFloat(0x10000), 0,
SEAGULL_CLONE);
}
}
@@ -112,9 +111,9 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) {
distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff));
if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) {
- this->targetPos.x = this->actor.home.pos.x + randPlusMinusPoint5Scaled(500.0f);
- this->targetPos.y = this->actor.home.pos.y + randPlusMinusPoint5Scaled(100.0f);
- this->targetPos.z = this->actor.home.pos.z + randPlusMinusPoint5Scaled(500.0f);
+ this->targetPos.x = this->actor.home.pos.x + Rand_CenteredFloat(500.0f);
+ this->targetPos.y = this->actor.home.pos.y + Rand_CenteredFloat(100.0f);
+ this->targetPos.z = this->actor.home.pos.z + Rand_CenteredFloat(500.0f);
this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f;
this->step = 0;
@@ -151,7 +150,7 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) {
case SEAGULL_FLY_GLIDE:
if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) {
- this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44));
+ this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44));
}
if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) {
@@ -192,9 +191,9 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) {
distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff));
if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) {
- this->targetPos.x = targetActor->world.pos.x + randPlusMinusPoint5Scaled(200.0f + KREG(82));
- this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + randPlusMinusPoint5Scaled(100.0f + KREG(81));
- this->targetPos.z = targetActor->world.pos.z + randPlusMinusPoint5Scaled(200.0f + KREG(82));
+ this->targetPos.x = targetActor->world.pos.x + Rand_CenteredFloat(200.0f + KREG(82));
+ this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + Rand_CenteredFloat(100.0f + KREG(81));
+ this->targetPos.z = targetActor->world.pos.z + Rand_CenteredFloat(200.0f + KREG(82));
this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f;
this->step = 0;
@@ -230,7 +229,7 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) {
case SEAGULL_FLY_GLIDE:
if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) {
- this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44));
+ this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44));
}
if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) {
diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
index 24d036bee..a56b01c3b 100644
--- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
+++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
@@ -101,9 +101,9 @@ void func_80BE4930(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) {
effect->unk_00 = *arg1;
- effect->unk_0C = randPlusMinusPoint5Scaled(10.0f);
+ effect->unk_0C = Rand_CenteredFloat(10.0f);
effect->unk_10 = Rand_ZeroFloat(2.0f) + 3.0f;
- effect->unk_14 = randPlusMinusPoint5Scaled(10.0f);
+ effect->unk_14 = Rand_CenteredFloat(10.0f);
effect->unk_18.y = -0.15f;
effect->unk_18.x = 0.0f;
@@ -127,9 +127,9 @@ void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) {
effect->unk_00 = *arg1;
- effect->unk_0C = randPlusMinusPoint5Scaled(30.0f);
+ effect->unk_0C = Rand_CenteredFloat(30.0f);
effect->unk_10 = Rand_ZeroFloat(7.0f);
- effect->unk_14 = randPlusMinusPoint5Scaled(30.0f);
+ effect->unk_14 = Rand_CenteredFloat(30.0f);
effect->unk_18.y = -0.3f;
effect->unk_18.x = 0.0f;
@@ -154,8 +154,8 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) {
return;
}
- this->unk_198 = randPlusMinusPoint5Scaled(0x2000);
- this->unk_19A = randPlusMinusPoint5Scaled(0x2000);
+ this->unk_198 = Rand_CenteredFloat(0x2000);
+ this->unk_19A = Rand_CenteredFloat(0x2000);
if (ENTANRON5_GET(&this->actor) < ENTANRON5_107) {
Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * D_80BE5DD0);
@@ -327,8 +327,8 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) {
spAC = 50.0f;
}
- sp9C.x = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.x;
- sp9C.z = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.z;
+ sp9C.x = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.x;
+ sp9C.z = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.z;
sp9C.y = this->actor.floorHeight + (spAC * D_80BE5DD0);
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, sp9C.x, sp9C.y, sp9C.z,
@@ -483,7 +483,7 @@ void EnTanron5_Draw(Actor* thisx, PlayState* play) {
if ((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, this->unk_148);
@@ -506,14 +506,14 @@ void func_80BE5C10(Actor* thisx, PlayState* play) {
if (((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) && phi_v0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_1A0 == 0) {
texture = gDropArrows1Tex;
} else {
texture = gDropMagicLargeTex;
}
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(texture));
diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c
index d98790c6f..1372d8791 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -133,7 +133,7 @@ void func_80863048(PlayState* play, EnTestStruct* arg1) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
@@ -267,7 +267,7 @@ void EnTest_Draw(Actor* thisx, PlayState* play) {
mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_8018450C(play, &this->skeletonInfo, mtx, EnTest_OverrideKeyframeDraw, NULL, thisx);
func_80863048(play, this->unk_20C);
}
diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.c b/src/overlays/actors/ovl_En_Test2/z_en_test2.c
index fd1710264..e853570f4 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c
@@ -72,7 +72,7 @@ void EnTest2_Init(Actor* thisx, PlayState* play) {
EnTest2* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
- if ((this->actor.params == EN_TEST2_PARAMS_B) || (this->actor.params == EN_TEST2_PARAMS_C)) {
+ if ((this->actor.params == EN_TEST2_PARAM_B) || (this->actor.params == EN_TEST2_PARAM_C)) {
this->actor.flags |= ACTOR_FLAG_20;
}
}
@@ -125,7 +125,7 @@ void EnTest2_Draw(Actor* thisx, PlayState* play) {
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (dList != NULL) {
diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.h b/src/overlays/actors/ovl_En_Test2/z_en_test2.h
index 3b03e0cc1..d54dbb265 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.h
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.h
@@ -11,8 +11,8 @@ typedef struct EnTest2 {
} EnTest2; // size = 0x148
typedef enum {
- /* 0xB */ EN_TEST2_PARAMS_B = 0xB,
- /* 0xC */ EN_TEST2_PARAMS_C
-} EnTest2_Params;
+ /* 0xB */ EN_TEST2_PARAM_B = 0xB,
+ /* 0xC */ EN_TEST2_PARAM_C
+} EnTest2_Param;
#endif // Z_EN_TEST2_H
diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c
index cedf00861..2000e0e53 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c
@@ -4,6 +4,7 @@
* Description: Kafei
*/
+#include "prevent_bss_reordering.h"
#include "z_en_test3.h"
#include "objects/object_test3/object_test3.h"
#include "overlays/actors/ovl_En_Door/z_en_door.h"
@@ -125,7 +126,7 @@ static u8 sScheduleScript[] = {
/* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_79_40, 0x12C - 0x0AA),
/* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE),
/* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7),
- /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_20, 0x0DD - 0x0B4),
+ /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x0DD - 0x0B4),
/* 0x0B4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0DC - 0x0B8),
/* 0x0B8 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x0BE - 0x0BC),
/* 0x0BC */ SCHEDULE_CMD_RET_VAL_S(5),
@@ -149,7 +150,7 @@ static u8 sScheduleScript[] = {
/* 0x0F3 */ SCHEDULE_CMD_RET_TIME(4, 0, 4, 10, 11),
/* 0x0F9 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12B - 0x0FD),
/* 0x0FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 10, 4, 30, 0x125 - 0x103),
- /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_01, 0x11C - 0x107),
+ /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x11C - 0x107),
/* 0x107 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 4, 45, 0x116 - 0x10D),
/* 0x10D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 45, 6, 0, 0x114 - 0x113),
/* 0x113 */ SCHEDULE_CMD_RET_NONE(),
@@ -312,7 +313,7 @@ s32 func_80A3E898(EnTest3* this, PlayState* play) {
u16 textId = this->unk_D78->textId;
if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
- func_80151BB4(play, 2);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI);
}
if (textId == 0xFFFF) {
Message_CloseTextbox(play);
@@ -532,17 +533,17 @@ void func_80A3F114(EnTest3* this, PlayState* play) {
}
s32 func_80A3F15C(EnTest3* this, PlayState* play, struct_80A41828* arg2) {
- s32 pathIndex;
+ s32 limit;
Path* path;
Vec3s* curPathPoint;
Vec3s* nextPathPoint;
Vec3f curPathPos;
Vec3f nextPathPos;
- pathIndex = ABS_ALT(arg2->unk_1_0) - 1;
+ limit = ABS_ALT(arg2->unk_1_0) - 1;
- if (pathIndex >= 0) {
- path = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), pathIndex);
+ if (limit >= 0) {
+ path = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), limit);
curPathPoint = Lib_SegmentedToVirtual(path->points);
if (arg2->unk_1_0 > 0) {
@@ -589,13 +590,13 @@ s32 func_80A3F384(EnTest3* this, PlayState* play) {
EnDoor* door = (EnDoor*)func_80A3F2BC(play, this, ACTOR_EN_DOOR, ACTORCAT_DOOR, 55.0f, 20.0f);
Vec3f offset;
- if ((door != NULL) && (door->unk_1A1 == 0) &&
- ((player->doorType == 0) || (&door->dyna.actor != player->doorActor)) &&
- Actor_ActorAIsFacingActorB(&this->player.actor, &door->dyna.actor, 0x3000)) {
- Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &this->player.actor.world.pos);
- this->player.doorType = 1;
+ if ((door != NULL) && !door->knobDoor.playOpenAnim &&
+ ((player->doorType == PLAYER_DOORTYPE_NONE) || (&door->knobDoor.dyna.actor != player->doorActor)) &&
+ Actor_ActorAIsFacingActorB(&this->player.actor, &door->knobDoor.dyna.actor, 0x3000)) {
+ Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &this->player.actor.world.pos);
+ this->player.doorType = PLAYER_DOORTYPE_HANDLE;
this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f;
- this->player.doorActor = &door->dyna.actor;
+ this->player.doorActor = &door->knobDoor.dyna.actor;
this->player.csId = CS_ID_NONE;
return true;
}
@@ -657,7 +658,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) {
this->player.stateFlags2 &= ~PLAYER_STATE2_40000;
D_80A41D5C = true;
if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
- func_80151BB4(play, 2);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI);
}
} else {
if (play->actorCtx.flags & ACTORCTX_FLAG_4) {
@@ -784,7 +785,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) {
func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time))));
}
if (play->actorCtx.flags & ACTORCTX_FLAG_6) {
- SET_WEEKEVENTREG(WEEKEVENTREG_51_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_02);
}
D_80A41D20 = 3;
@@ -867,7 +868,7 @@ s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul
u16 numWaypoints;
func_80A3F15C(this, play, arg2);
- this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1);
+ this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1);
if ((this->unk_D88 < 7) && (this->unk_D88 != 0) && (this->unk_D80 >= 0)) {
startTime = now;
} else {
@@ -1018,8 +1019,8 @@ void func_80A40908(EnTest3* this, PlayState* play) {
func_80A3E7E0(this, func_80A4084C);
this->player.targetedActor = &GET_PLAYER(play)->actor;
SET_WEEKEVENTREG(WEEKEVENTREG_51_08);
- func_80151BB4(play, 0x19);
- func_80151BB4(play, 2);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI);
} else {
func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1);
this->unk_D78 = &D_80A41854[6];
@@ -1103,7 +1104,7 @@ s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
pos->z *= this->player.ageProperties->unk_08;
}
if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) ||
- (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) {
+ (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) {
pos->y *= this->player.ageProperties->unk_08;
}
pos->y -= this->player.unk_AB8;
@@ -1163,7 +1164,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL
func_80128640(play, &this->player, *dList1);
if (this->player.stateFlags3 & PLAYER_STATE3_20000000) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00EDD0);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -1176,8 +1179,8 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL
leftHandActor->world.rot.y = this->player.actor.shape.rot.y + this->player.leftHandWorld.rot.y;
leftHandActor->shape.rot.y = leftHandActor->world.rot.y;
} else {
- Matrix_Get(&this->player.mf_CC4);
- Matrix_MtxFToYXZRot(&this->player.mf_CC4, &this->player.leftHandWorld.rot, false);
+ Matrix_Get(&this->player.leftHandMf);
+ Matrix_MtxFToYXZRot(&this->player.leftHandMf, &this->player.leftHandWorld.rot, false);
func_80126B8C(play, &this->player);
}
@@ -1199,7 +1202,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL
(this->player.skelAnime.curFrame >= 12.0f))) {
if (func_80127438(play, &this->player, this->player.currentMask)) {
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, object_mask_ki_tan_DL_0004A0);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
@@ -1212,13 +1217,15 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL
Matrix_MultVec3f(&D_80A418CC, &this->player.actor.focus.pos);
}
} else if (limbIndex == OBJECT_TEST3_LIMB_15) {
- if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) ||
+ if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES) ||
(INV_CONTENT(ITEM_PENDANT_OF_MEMORIES) == ITEM_PENDANT_OF_MEMORIES) ||
(this->player.getItemDrawIdPlusOne - 1 == GID_PENDANT_OF_MEMORIES)) {
D_80A41D60 = true;
} else {
OPEN_DISPS(play->state.gfxCtx);
+
gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00CB60);
+
CLOSE_DISPS(play->state.gfxCtx);
}
} else {
diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.h b/src/overlays/actors/ovl_En_Test3/z_en_test3.h
index 36cd15c27..17c704129 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h
@@ -7,7 +7,7 @@ struct EnTest3;
typedef void (*EnTest3ActionFunc)(struct EnTest3*, PlayState*);
-#define KAFEI_GET_PARAM_1F(thisx) ((thisx)->params & 0x1F)
+#define KAFEI_GET_PATH_INDEX(thisx) ((thisx)->params & 0x1F)
#define KAFEI_GET_PARAM_1E0(thisx) (((thisx)->params >> 5) & 0xF)
typedef struct {
diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
index 24d8b4137..233ecc9ec 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
@@ -4,8 +4,8 @@
* Description: Three-Day Events
*/
-#include "prevent_bss_reordering.h"
#include "z_en_test4.h"
+#include "z64horse.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
@@ -296,16 +296,16 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
sCsIdList[0] = csId;
if (csId >= 0) {
- ActorCutscene* actorCutscene = CutsceneManager_GetCutsceneEntry(sCsIdList[0]);
+ ActorCutscene* csEntry = CutsceneManager_GetCutsceneEntry(sCsIdList[0]);
SET_EVENTINF(EVENTINF_52);
- sCsIdList[1] = actorCutscene->additionalCsId;
+ sCsIdList[1] = csEntry->additionalCsId;
} else {
CLEAR_EVENTINF(EVENTINF_52);
sCsIdList[1] = sCsIdList[0];
}
- if (sIsLoaded || (CHECK_EVENTINF(EVENTINF_27))) {
+ if (sIsLoaded || CHECK_EVENTINF(EVENTINF_TRIGGER_DAYTELOP)) {
Actor_Kill(&this->actor);
} else {
sIsLoaded = true;
@@ -405,15 +405,15 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
if ((rideActor->type == HORSE_TYPE_EPONA) || (rideActor->type == HORSE_TYPE_2)) {
if (CURRENT_DAY < 3) {
- D_801BDA9C = 1;
+ gHorseIsMounted = true;
} else {
- D_801BDA9C = 0;
+ gHorseIsMounted = false;
}
}
}
gSaveContext.respawnFlag = -4;
- SET_EVENTINF(EVENTINF_27);
+ SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP);
Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Test5/z_en_test5.c b/src/overlays/actors/ovl_En_Test5/z_en_test5.c
index a041a1aaf..f7a9b431b 100644
--- a/src/overlays/actors/ovl_En_Test5/z_en_test5.c
+++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.c
@@ -66,13 +66,13 @@ void EnTest5_HandleBottleAction(EnTest5* this, PlayState* play) {
player = GET_PLAYER(play);
- if (player->interactRangeActor == NULL || player->getItemId != GI_MAX) {
+ if ((player->interactRangeActor == NULL) || (player->getItemId != GI_MAX)) {
Math_Vec3f_DistXYZAndStoreDiff(&this->minPos, &player->actor.world.pos, &playerPosRelativeToWater);
// Make sure that the player is within the bounds of the water and deep enough to grab some
- if (playerPosRelativeToWater.x >= 0.0f && playerPosRelativeToWater.x <= this->xLength &&
- playerPosRelativeToWater.z >= 0.0f && playerPosRelativeToWater.z <= this->zLength &&
- fabsf(playerPosRelativeToWater.y) < 100.0f && player->actor.depthInWater > 12.0f) {
+ if ((playerPosRelativeToWater.x >= 0.0f) && (playerPosRelativeToWater.x <= this->xLength) &&
+ (playerPosRelativeToWater.z >= 0.0f) && (playerPosRelativeToWater.z <= this->zLength) &&
+ (fabsf(playerPosRelativeToWater.y) < 100.0f) && (player->actor.depthInWater > 12.0f)) {
Actor_OfferGetItem(&this->actor, play, GI_MAX, this->actor.xzDistToPlayer,
fabsf(this->actor.playerHeightRel));
}
@@ -89,10 +89,10 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play);
// If it's the hot spring variant, generate steam clouds
- if (ENTEST5_IS_HOT_SPRING(&this->actor) && (play->state.frames % 4) == 0) {
- steamPos.x = (Rand_ZeroOne() * this->xLength) + this->minPos.x;
+ if (ENTEST5_IS_HOT_SPRING(&this->actor) && ((play->state.frames % 4) == 0)) {
+ steamPos.x = this->minPos.x + (Rand_ZeroOne() * this->xLength);
steamPos.y = this->minPos.y + 100.0f;
- steamPos.z = (Rand_ZeroOne() * this->zLength) + this->minPos.z;
+ steamPos.z = this->minPos.z + (Rand_ZeroOne() * this->zLength);
if ((BgCheck_EntityRaycastFloor2(play, &play->colCtx, &poly, &steamPos) + 10.0f) < this->minPos.y) {
Vec3f steamVel;
@@ -102,8 +102,7 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) {
steamVel.x = 0.0f;
steamVel.z = 0.0f;
- EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f,
- (s16)((-200) - (s32)(Rand_ZeroOne() * 50.0f)));
+ EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f, -200 - (s32)(Rand_ZeroOne() * 50.0f));
}
}
}
diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
index 70ab37232..185e11dbd 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
@@ -18,30 +18,38 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2);
void EnTest6_Update(Actor* thisx, PlayState* play);
void EnTest6_Draw(Actor* thisx, PlayState* play);
-struct EnTest6Struct;
+struct SoTCsAmmoDrops;
-typedef void (*EnTest6StructFunc)(EnTest6*, PlayState*, struct EnTest6Struct*);
+typedef void (*SoTCsAmmoDropDrawFunc)(EnTest6*, PlayState*, struct SoTCsAmmoDrops*);
-typedef struct EnTest6Struct {
- /* 0x00 */ s32 unk_00;
- /* 0x04 */ f32 unk_04;
- /* 0x08 */ f32 unk_08;
- /* 0x0C */ f32 unk_0C;
- /* 0x10 */ f32 unk_10;
- /* 0x14 */ EnTest6StructFunc unk_14;
-} EnTest6Struct; // size = 0x18
+typedef enum SoTCsAmmoDropType {
+ /* 0 */ SOTCS_AMMO_DROP_NONE,
+ /* 1 */ SOTCS_AMMO_DROP_ARROWS,
+ /* 2 */ SOTCS_AMMO_DROP_BOMB,
+ /* 3 */ SOTCS_AMMO_DROP_DEKU_NUT,
+ /* 4 */ SOTCS_AMMO_DROP_DEKU_STICK,
+ /* 5 */ SOTCS_AMMO_DROP_RUPEE_GREEN,
+ /* 6 */ SOTCS_AMMO_DROP_RUPEE_BLUE
+} SoTCsAmmoDropType;
-void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr);
-void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr);
+typedef struct SoTCsAmmoDrops {
+ /* 0x00 */ SoTCsAmmoDropType type;
+ /* 0x04 */ f32 scale;
+ /* 0x08 */ Vec3f pos;
+ /* 0x14 */ SoTCsAmmoDropDrawFunc draw;
+} SoTCsAmmoDrops; // size = 0x18
+
+void EnTest6_DrawAmmoDropDefault(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop);
+void EnTest6_DrawAmmoDropRupee(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop);
void EnTest6_SetupAction(EnTest6* this, EnTest6ActionFunc actionFunc);
-void func_80A9156C(EnTest6* this, PlayState* play);
-void func_80A91690(EnTest6* this, PlayState* play);
-void func_80A91760(EnTest6* this, PlayState* play);
-void func_80A920C8(EnTest6* this, PlayState* play);
-void func_80A92188(EnTest6* this, PlayState* play);
-void func_80A92950(EnTest6* this, PlayState* play);
+void EnTest6_StartCutscene(EnTest6* this, PlayState* play);
+void EnTest6_SetupInvertedSoTCutscene(EnTest6* this, PlayState* play);
+void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play);
+void EnTest6_SetupDoubleSoTCutscene(EnTest6* this, PlayState* play);
+void EnTest6_DoubleSoTCutscene(EnTest6* this, PlayState* play);
+void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play);
-EnTest6Struct D_80A94910[12];
+SoTCsAmmoDrops sSoTCsAmmoDrops[12];
ActorInit En_Test6_InitVars = {
ACTOR_EN_TEST6,
@@ -55,7 +63,7 @@ ActorInit En_Test6_InitVars = {
(ActorFunc)EnTest6_Draw,
};
-CutsceneData D_80A93E80[] = {
+CutsceneData sDoubleSoTCsCamData[] = {
// Header
CS_CAM_SPLINE(13, 424, 0, 100),
@@ -108,106 +116,114 @@ CutsceneData D_80A93E80[] = {
CS_CAM_END()
};
-TexturePtr D_80A9402C[] = {
- NULL, gDropArrows2Tex, gDropBombTex, gDropDekuNutTex, gDropDekuStickTex, gRupeeGreenTex, gRupeeBlueTex,
+TexturePtr sSoTCsAmmoDropTextures[] = {
+ NULL, // SOTCS_AMMO_DROP_NONE
+ gDropArrows2Tex, // SOTCS_AMMO_DROP_ARROWS
+ gDropBombTex, // SOTCS_AMMO_DROP_BOMB
+ gDropDekuNutTex, // SOTCS_AMMO_DROP_DEKU_NUT
+ gDropDekuStickTex, // SOTCS_AMMO_DROP_DEKU_STICK
+ gRupeeGreenTex, // SOTCS_AMMO_DROP_RUPEE_GREEN
+ gRupeeBlueTex, // SOTCS_AMMO_DROP_RUPEE_BLUE
};
-Color_RGB8 D_80A94048 = { 230, 230, 220 };
-Color_RGB8 D_80A9404C = { 120, 120, 100 };
-Color_RGB8 D_80A94050 = { 0, 0, 0 };
+typedef enum SoTCsDrawType {
+ /* 0 */ SOTCS_DRAW_DOUBLE_SOT,
+ /* 1 */ SOTCS_DRAW_RESET_CYCLE_SOT,
+ /* 2 */ SOTCS_DRAW_INVERTED_SOT,
+ /* 99 */ SOTCS_DRAW_TYPE_NONE = 99
+} SoTCsDrawType;
-s16 D_80A94054 = 500;
-s16 D_80A94058 = 1500;
+#define SOTCS_AMMO_FLAG_RUPEE (1 << 0)
+#define SOTCS_AMMO_FLAG_BOMB (1 << 1)
+#define SOTCS_AMMO_FLAG_NUT (1 << 2)
+#define SOTCS_AMMO_FLAG_ARROW (1 << 4)
-static Vec3f sSubCamUp = { 0.0f, 1.0f, 0.0f };
-
-Color_RGB8 D_80A94068 = { 225, 230, 225 };
-Color_RGB8 D_80A9406C = { 120, 120, 100 };
-Color_RGB8 D_80A94070 = { 0, 0, 0 };
-
-s16 D_80A94074 = 940;
-s16 D_80A94078 = 2000;
-
-void func_80A90730(EnTest6* this, PlayState* play) {
+void EnTest6_SetupCutscene(EnTest6* this, PlayState* play) {
s32 i;
Player* player = GET_PLAYER(play);
- s32 phi_s0;
- f32 phi_f24;
+ s32 ammoFlags;
+ f32 yOffset;
this->actor.home.pos = player->actor.world.pos;
this->actor.home.rot = player->actor.shape.rot;
- switch (ENTEST6_GET(&this->actor)) {
- case ENTEST6_24:
- case ENTEST6_25:
- func_80A91690(this, play);
+ switch (SOTCS_GET_OCARINA_MODE(&this->actor)) {
+ case OCARINA_MODE_APPLY_INV_SOT_FAST:
+ case OCARINA_MODE_APPLY_INV_SOT_SLOW:
+ EnTest6_SetupInvertedSoTCutscene(this, play);
CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
- return;
+ break;
- case ENTEST6_26:
- func_80A920C8(this, play);
+ case OCARINA_MODE_APPLY_DOUBLE_SOT:
+ EnTest6_SetupDoubleSoTCutscene(this, play);
CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
- return;
- }
+ break;
- phi_s0 = 0;
- phi_f24 = -900.0f;
+ default: // Setup "return to first day cutscene"
+ ammoFlags = 0;
+ yOffset = -900.0f;
- if (CHECK_EVENTINF(EVENTINF_70)) {
- for (i = 0; i < 6; i++) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5;
- }
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5;
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 6;
- phi_s0 |= 1;
- }
+ if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES)) {
+ for (i = 0; i < 6; i++) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type =
+ SOTCS_AMMO_DROP_RUPEE_GREEN;
+ }
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type =
+ SOTCS_AMMO_DROP_RUPEE_GREEN;
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_RUPEE_BLUE;
+ ammoFlags |= SOTCS_AMMO_FLAG_RUPEE;
+ }
- if (CHECK_EVENTINF(EVENTINF_74)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1;
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1;
- if (!(phi_s0 & 1)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1;
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1;
- }
- phi_s0 |= 0x10;
- }
+ if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS;
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS;
+ if (!(ammoFlags & SOTCS_AMMO_FLAG_RUPEE)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS;
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS;
+ }
+ ammoFlags |= SOTCS_AMMO_FLAG_ARROW;
+ }
- if (CHECK_EVENTINF(EVENTINF_71)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2;
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2;
- if (!(phi_s0 & 1)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2;
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2;
- }
- phi_s0 |= 2;
- }
+ if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB;
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB;
+ if (!(ammoFlags & SOTCS_AMMO_FLAG_RUPEE)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB;
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB;
+ }
+ ammoFlags |= SOTCS_AMMO_FLAG_BOMB;
+ }
- if (CHECK_EVENTINF(EVENTINF_72)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3;
- if (!(phi_s0 & (0x10 | 0x2 | 0x1))) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3;
- }
- phi_s0 |= 4;
- }
+ if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_DEKU_NUT;
+ if (!(ammoFlags & (SOTCS_AMMO_FLAG_ARROW | SOTCS_AMMO_FLAG_BOMB | SOTCS_AMMO_FLAG_RUPEE))) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type =
+ SOTCS_AMMO_DROP_DEKU_NUT;
+ }
+ ammoFlags |= SOTCS_AMMO_FLAG_NUT;
+ }
- if (CHECK_EVENTINF(EVENTINF_73)) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4;
- if (!(phi_s0 & (0x10 | 0x2 | 0x1))) {
- D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4;
- }
- }
+ if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO)) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_DEKU_STICK;
+ if (!(ammoFlags & (SOTCS_AMMO_FLAG_ARROW | SOTCS_AMMO_FLAG_BOMB | SOTCS_AMMO_FLAG_RUPEE))) {
+ sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type =
+ SOTCS_AMMO_DROP_DEKU_STICK;
+ }
+ }
- for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) {
- D_80A94910[i].unk_08 = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f;
- D_80A94910[i].unk_10 = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f;
- D_80A94910[i].unk_0C = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + phi_f24;
- D_80A94910[i].unk_04 = -10.0f;
- if (D_80A94910[i].unk_00 < 5) {
- D_80A94910[i].unk_14 = func_80A90D34;
- } else {
- D_80A94910[i].unk_14 = func_80A90FC0;
- }
- phi_f24 += 50.0f;
+ for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) {
+ sSoTCsAmmoDrops[i].pos.x = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f;
+ sSoTCsAmmoDrops[i].pos.z = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f;
+ sSoTCsAmmoDrops[i].pos.y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + yOffset;
+ sSoTCsAmmoDrops[i].scale = -10.0f;
+ if (sSoTCsAmmoDrops[i].type <= SOTCS_AMMO_DROP_DEKU_STICK) {
+ sSoTCsAmmoDrops[i].draw = EnTest6_DrawAmmoDropDefault;
+ } else {
+ sSoTCsAmmoDrops[i].draw = EnTest6_DrawAmmoDropRupee;
+ }
+ yOffset += 50.0f;
+ }
+ break;
}
}
@@ -219,43 +235,45 @@ void EnTest6_DisableMotionBlur(void) {
Play_DisableMotionBlur();
}
-void func_80A90C54(PlayState* play, f32 arg1) {
+void EnTest6_EnableWhiteFillScreen(PlayState* play, f32 alphaRatio) {
play->envCtx.fillScreen = true;
play->envCtx.screenFillColor[0] = 250;
play->envCtx.screenFillColor[1] = 250;
play->envCtx.screenFillColor[2] = 250;
- play->envCtx.screenFillColor[3] = 255.0f * arg1;
+ play->envCtx.screenFillColor[3] = 255.0f * alphaRatio;
}
-void func_80A90D20(PlayState* play) {
+void EnTest6_DisableWhiteFillScreen(PlayState* play) {
play->envCtx.fillScreen = false;
}
-void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
+void EnTest6_DrawAmmoDropDefault(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
- if (ptr->unk_00 != 0) {
- Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW);
- Matrix_Scale(ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, MTXMODE_APPLY);
+ if (ammoDrop->type != SOTCS_AMMO_DROP_NONE) {
+ Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale,
+ MTXMODE_NEW);
+ Matrix_Scale(ammoDrop->scale * 0.02f, ammoDrop->scale * 0.02f, ammoDrop->scale * 0.02f, MTXMODE_APPLY);
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sSoTCsAmmoDropTextures[ammoDrop->type]));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gItemDropDL);
}
- Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW);
- Matrix_Scale(2.0f * ptr->unk_04, 2.0f * ptr->unk_04, 2.0f * ptr->unk_04, MTXMODE_APPLY);
+ Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale,
+ MTXMODE_NEW);
+ Matrix_Scale(2.0f * ammoDrop->scale, 2.0f * ammoDrop->scale, 2.0f * ammoDrop->scale, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZS(play->state.frames * 512, MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, 2.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 210, 210, 230, 128);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0);
@@ -266,48 +284,50 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
+void EnTest6_DrawAmmoDropRupee(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop) {
s32 pad;
Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
Gfx* gfx = gfxHead;
- Hilite* sp70;
- Vec3f sp64;
+ Hilite* hilite;
+ Vec3f ammoDropPos;
- sp64.x = ptr->unk_08 * ptr->unk_04;
- sp64.y = ptr->unk_0C;
- sp64.z = ptr->unk_10 * ptr->unk_04;
+ ammoDropPos.x = ammoDrop->pos.x * ammoDrop->scale;
+ ammoDropPos.y = ammoDrop->pos.y;
+ ammoDropPos.z = ammoDrop->pos.z * ammoDrop->scale;
- sp70 = func_800BCBF4(&sp64, play);
+ hilite = func_800BCBF4(&ammoDropPos, play);
OPEN_DISPS(play->state.gfxCtx);
if (gfxHead != NULL) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
- gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF,
- (sp70->h.y1 + 60) & 0xFFFF);
+ //! FAKE: & 0xFFFF
+ gDPSetTileSize(gfx++, 1, hilite->h.x1 & 0xFFFF, hilite->h.y1 & 0xFFFF, (hilite->h.x1 + 60) & 0xFFFF,
+ (hilite->h.y1 + 60) & 0xFFFF);
gSPEndDisplayList(gfx++);
gSPSegment(POLY_OPA_DISP++, 0x07, gfxHead);
- Matrix_Translate(sp64.x, sp64.y, sp64.z, MTXMODE_NEW);
- Matrix_Scale(ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, MTXMODE_APPLY);
+ Matrix_Translate(ammoDropPos.x, ammoDropPos.y, ammoDropPos.z, MTXMODE_NEW);
+ Matrix_Scale(ammoDrop->scale * 0.018f, ammoDrop->scale * 0.018f, ammoDrop->scale * 0.018f, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sSoTCsAmmoDropTextures[ammoDrop->type]));
gSPDisplayList(POLY_OPA_DISP++, gRupeeDL);
}
- Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW);
- Matrix_Scale(ptr->unk_04 * 2.5f, ptr->unk_04 * 2.5f, ptr->unk_04 * 2.5f, MTXMODE_APPLY);
+ Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale,
+ MTXMODE_NEW);
+ Matrix_Scale(ammoDrop->scale * 2.5f, ammoDrop->scale * 2.5f, ammoDrop->scale * 2.5f, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZS(play->state.frames * 256, MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, 4.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 220, 220, 230, 192);
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 0);
@@ -327,8 +347,9 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) {
EnTest6* this = THIS;
s32 i;
- if (((ENTEST6_GET(&this->actor) == ENTEST6_24) || (ENTEST6_GET(&this->actor) == ENTEST6_25) ||
- (ENTEST6_GET(&this->actor) == ENTEST6_26)) &&
+ if (((SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) ||
+ (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) ||
+ (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_DOUBLE_SOT)) &&
(play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE)) {
Actor_Kill(&this->actor);
return;
@@ -340,12 +361,13 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) {
this->lights[i].node = LightContext_InsertLight(play, &play->lightCtx, &this->lights[i].info);
}
- this->unk_286 = 0;
- this->cueId = 0;
- this->unk_278 = 0;
- this->unk_276 = 99;
- func_80A90730(this, play);
- EnTest6_SetupAction(this, func_80A9156C);
+ this->screenFillAlpha = 0;
+ this->cueId = SOTCS_CUEID_NONE;
+ this->invSoTClockYaw = 0;
+ this->drawType = SOTCS_DRAW_TYPE_NONE;
+
+ EnTest6_SetupCutscene(this, play);
+ EnTest6_SetupAction(this, EnTest6_StartCutscene);
}
void EnTest6_Destroy(Actor* thisx, PlayState* play2) {
@@ -356,17 +378,22 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) {
play->envCtx.lightSettings.ambientColor[0] = 0;
play->envCtx.lightSettings.ambientColor[1] = 0;
play->envCtx.lightSettings.ambientColor[2] = 0;
+
play->envCtx.lightSettings.diffuseColor1[0] = 0;
play->envCtx.lightSettings.diffuseColor1[1] = 0;
play->envCtx.lightSettings.diffuseColor1[2] = 0;
+
play->envCtx.lightSettings.diffuseColor2[0] = 0;
play->envCtx.lightSettings.diffuseColor2[1] = 0;
play->envCtx.lightSettings.diffuseColor2[2] = 0;
+
play->envCtx.lightSettings.fogColor[0] = 0;
play->envCtx.lightSettings.fogColor[1] = 0;
play->envCtx.lightSettings.fogColor[2] = 0;
+
play->envCtx.lightSettings.fogNear = 0;
play->envCtx.lightSettings.zFar = 0;
+
play->envCtx.fillScreen = false;
for (i = 0; i < ARRAY_COUNT(this->lights); i++) {
@@ -374,50 +401,51 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) {
}
}
-void func_80A9156C(EnTest6* this, PlayState* play) {
- switch (ENTEST6_GET(&this->actor)) {
- case ENTEST6_24:
- case ENTEST6_25:
+void EnTest6_StartCutscene(EnTest6* this, PlayState* play) {
+ switch (SOTCS_GET_OCARINA_MODE(&this->actor)) {
+ case OCARINA_MODE_APPLY_INV_SOT_FAST:
+ case OCARINA_MODE_APPLY_INV_SOT_SLOW:
if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL);
this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
- EnTest6_SetupAction(this, func_80A91760);
+ EnTest6_SetupAction(this, EnTest6_InvertedSoTCutscene);
}
break;
- case ENTEST6_26:
+ case OCARINA_MODE_APPLY_DOUBLE_SOT:
if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL);
this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
- EnTest6_SetupAction(this, func_80A92188);
+ EnTest6_SetupAction(this, EnTest6_DoubleSoTCutscene);
}
break;
default:
gSaveContext.save.daysElapsed = 0;
- gSaveContext.save.day = false;
+ gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
- EnTest6_SetupAction(this, func_80A92950);
+ EnTest6_SetupAction(this, EnTest6_SharedSoTCutscene);
break;
}
}
-void func_80A91690(EnTest6* this, PlayState* play) {
- this->cueId = 90;
- this->unk_27A = 100;
- this->unk_286 = 0;
- if (ENTEST6_GET(&this->actor) == ENTEST6_25) {
+void EnTest6_SetupInvertedSoTCutscene(EnTest6* this, PlayState* play) {
+ this->cueId = SOTCS_CUEID_INV_INIT;
+ this->timer = 100;
+ this->screenFillAlpha = 0;
+
+ if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) {
play_sound(NA_SE_SY_TIME_CONTROL_SLOW);
- } else if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
+ } else if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) {
play_sound(NA_SE_SY_TIME_CONTROL_NORMAL);
}
}
-void func_80A916F0(EnTest6* this, PlayState* play) {
+void EnTest6_StopInvertedSoTCutscene(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.freezeTimer = 0;
@@ -429,216 +457,249 @@ void func_80A916F0(EnTest6* this, PlayState* play) {
Actor_Kill(&this->actor);
}
-void func_80A91760(EnTest6* this, PlayState* play) {
+Color_RGB8 sInvSoTCsFogColor = { 230, 230, 220 };
+Color_RGB8 sInvSoTCsAmbientColor = { 120, 120, 100 };
+Color_RGB8 sInvSoTCsDiffuseColor = { 0, 0, 0 };
+s16 sInvSoTCsFogNear = 500;
+s16 sInvSoTCsZFar = 1500;
+
+void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play) {
Input* input = CONTROLLER1(&play->state);
- s16 temp_s0;
+ s16 clockYaw;
Player* player = GET_PLAYER(play);
Camera* mainCam;
Vec3f subCamAt;
Vec3f subCamEye;
- Vec3f sp54;
+ Vec3f eyeNext;
s32 i;
- f32 sp4C;
- Camera* subCam = Play_GetCamera(play, this->subCamId);
+ f32 temp;
+ Camera* subCam;
+ subCam = Play_GetCamera(play, this->subCamId);
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
+ // Update cutscene effects
switch (this->cueId) {
- case 90:
- this->unk_276 = 2;
- this->unk_15C = 0.0f;
- this->unk_14C = 0.1f;
- this->unk_282 = 0;
- this->unk_278 = 0;
- this->cueId = 91;
+ case SOTCS_CUEID_INV_INIT:
+ this->drawType = SOTCS_DRAW_INVERTED_SOT;
+ this->invSoTEnvLerp = 0.0f;
+ this->speed = 0.1f;
+ this->alpha = 0;
+ this->invSoTClockYaw = 0;
+ this->cueId = SOTCS_CUEID_INV_SETUP_CLOCKS;
break;
- case 91:
- this->unk_15C += this->unk_14C;
- func_800FD59C(play, &D_80A9404C, this->unk_15C);
- func_800FD5E0(play, &D_80A94050, this->unk_15C);
- func_800FD654(play, &D_80A94048, this->unk_15C);
- func_800FD698(play, D_80A94054, D_80A94058, this->unk_15C);
+ case SOTCS_CUEID_INV_SETUP_CLOCKS:
+ this->invSoTEnvLerp += this->speed;
+ Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp);
+ Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp);
+ Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp);
+ Environment_LerpFog(play, sInvSoTCsFogNear, sInvSoTCsZFar, this->invSoTEnvLerp);
- if (this->unk_27A == 90) {
- this->unk_282 = 0;
- if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
- this->unk_27C = 0x200;
- this->unk_150 = 0.0f;
- sp4C = -100.0f;
+ if (this->timer == 90) {
+ this->alpha = 0;
+ if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) {
+ this->clockAngle = 0x200;
+ this->clockDist = 0.0f;
+ temp = -100.0f;
} else {
- this->unk_27C = 0x570;
- this->unk_150 = 110.0f;
- sp4C = 100.0f;
+ this->clockAngle = 0x570;
+ this->clockDist = 110.0f;
+ temp = 100.0f;
}
- this->unk_14C = 1.0f;
+ this->speed = 1.0f;
- for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) {
- this->unk_20C[i].x = player->actor.world.pos.x;
- this->unk_20C[i].y = player->actor.world.pos.y;
- this->unk_20C[i].z = player->actor.world.pos.z;
+ for (i = 0; i < SOTCS_INV_NUM_CLOCKS; i++) {
+ this->invSoTClockPos[i].x = player->actor.world.pos.x;
+ this->invSoTClockPos[i].y = player->actor.world.pos.y;
+ this->invSoTClockPos[i].z = player->actor.world.pos.z;
}
- this->unk_254 = ZeldaArena_Malloc(sizeof(Vec3f) * 64);
- if (this->unk_254 != NULL) {
- for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) {
- (*this->unk_254)[i].x = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.x +
- ((subCam->at.x - subCam->eye.x) * 0.2f);
- (*this->unk_254)[i].y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 120.0f) + subCam->eye.y +
- ((subCam->at.y - subCam->eye.y) * 0.2f) + sp4C;
- (*this->unk_254)[i].z = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.z +
- ((subCam->at.z - subCam->eye.z) * 0.2f);
+ this->invSoTParticles = ZeldaArena_Malloc(sizeof(Vec3f) * SOTCS_NUM_PARTICLES);
+ if (this->invSoTParticles != NULL) {
+ for (i = 0; i < ARRAY_COUNT(this->invSoTParticles[0]); i++) {
+ (*this->invSoTParticles)[i].x = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.x +
+ ((subCam->at.x - subCam->eye.x) * 0.2f);
+ (*this->invSoTParticles)[i].y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 120.0f) + subCam->eye.y +
+ ((subCam->at.y - subCam->eye.y) * 0.2f) + temp;
+ (*this->invSoTParticles)[i].z = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.z +
+ ((subCam->at.z - subCam->eye.z) * 0.2f);
}
}
+
EnTest6_EnableMotionBlur(120);
Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME);
Distortion_SetDuration(80);
+
play->unk_18844 = true;
- this->cueId = 95;
+ this->cueId = SOTCS_CUEID_INV_CLOCKS;
}
break;
- case 95:
- if (this->unk_27A > 80) {
- this->unk_282 += 25;
+ case SOTCS_CUEID_INV_CLOCKS:
+ if (this->timer > 80) {
+ this->alpha += 25;
}
- if (this->unk_27A < 20) {
- this->unk_282 -= 25;
+ if (this->timer < 20) {
+ this->alpha -= 25;
}
- func_800FD59C(play, &D_80A9404C, this->unk_15C);
- func_800FD5E0(play, &D_80A94050, this->unk_15C);
- func_800FD654(play, &D_80A94048, this->unk_15C);
- func_800FD698(play, D_80A94054 + this->unk_282, D_80A94058 + this->unk_282, this->unk_15C);
+ Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp);
+ Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp);
+ Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp);
+ Environment_LerpFog(play, sInvSoTCsFogNear + this->alpha, sInvSoTCsZFar + this->alpha, this->invSoTEnvLerp);
- this->unk_278 -= this->unk_27C;
- temp_s0 = this->unk_278;
- if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
- this->unk_27C += 8;
- this->unk_150 += this->unk_14C;
+ this->invSoTClockYaw -= this->clockAngle;
+ clockYaw = this->invSoTClockYaw;
+
+ if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) {
+ this->clockAngle += 8;
+ this->clockDist += this->speed;
} else {
- this->unk_27C -= 8;
- this->unk_150 -= this->unk_14C;
+ this->clockAngle -= 8;
+ this->clockDist -= this->speed;
}
- for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) {
- temp_s0 += 0x10000 / ARRAY_COUNT(this->unk_20C);
- if (player) {}
- this->unk_20C[i].x = (Math_SinS(temp_s0) * this->unk_150) + player->actor.world.pos.x;
- this->unk_20C[i].y = player->actor.world.pos.y;
- this->unk_20C[i].z = (Math_CosS(temp_s0) * this->unk_150) + player->actor.world.pos.z;
+ for (i = 0; i < SOTCS_INV_NUM_CLOCKS; i++) {
+ //! FAKE:
+ if (player != NULL) {}
+
+ clockYaw += 0x10000 / SOTCS_INV_NUM_CLOCKS;
+ this->invSoTClockPos[i].x = player->actor.world.pos.x + (Math_SinS(clockYaw) * this->clockDist);
+ this->invSoTClockPos[i].y = player->actor.world.pos.y;
+ this->invSoTClockPos[i].z = player->actor.world.pos.z + (Math_CosS(clockYaw) * this->clockDist);
}
- if (this->unk_254 != NULL) {
- for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) {
- (*this->unk_254)[i].x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
- if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
- (*this->unk_254)[i].y += 1.0f;
+ if (this->invSoTParticles != NULL) {
+ for (i = 0; i < ARRAY_COUNT(this->invSoTParticles[0]); i++) {
+ // Wiggle in the x-direction
+ (*this->invSoTParticles)[i].x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
+
+ // Fall or rise depending on slow-down or speed-up
+ if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) {
+ // Rise up
+ (*this->invSoTParticles)[i].y += 1.0f;
} else {
- if (1) {}
- (*this->unk_254)[i].y -= 1.0f;
+ // Fall down
+ (*this->invSoTParticles)[i].y -= 1.0f;
}
- (*this->unk_254)[i].z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
+ // Wiggle in the z-direction
+ (*this->invSoTParticles)[i].z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
}
}
- if (this->unk_27A == 10) {
- this->unk_14C = 0.1f;
+ if (this->timer == 10) {
+ this->speed = 0.1f;
EnTest6_DisableMotionBlur();
Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME);
play->unk_18844 = false;
- if (this->unk_254 != NULL) {
- ZeldaArena_Free(this->unk_254);
+ if (this->invSoTParticles != NULL) {
+ ZeldaArena_Free(this->invSoTParticles);
}
- this->cueId = 99;
+ this->cueId = SOTCS_CUEID_INV_END;
}
break;
- case 99:
- this->unk_15C -= this->unk_14C;
- func_800FD59C(play, &D_80A9404C, this->unk_15C);
- func_800FD5E0(play, &D_80A94050, this->unk_15C);
- func_800FD654(play, &D_80A94048, this->unk_15C);
- func_800FD698(play, D_80A94054, D_80A94058, this->unk_15C);
+ case SOTCS_CUEID_INV_END:
+ this->invSoTEnvLerp -= this->speed;
+ Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp);
+ Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp);
+ Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp);
+ Environment_LerpFog(play, sInvSoTCsFogNear, sInvSoTCsZFar, this->invSoTEnvLerp);
+ break;
+
+ default:
break;
}
- if (this->unk_286 != 0) {
+ // Update Player Cutscene Animation
+ if (this->screenFillAlpha != 0) {
func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
} else {
- if (this->unk_27A == 90) {
+ if (this->timer == 90) {
+ // Look side-to-side but downwards, with chin down
+ // gPlayerAnim_al_elf_tobidasi
func_800B7298(play, NULL, PLAYER_CSMODE_66);
}
- if (this->unk_27A == 70) {
+ if (this->timer == 70) {
+ // close eyes and sway body in circles
+ // gPlayerAnim_alink_yurayura
func_800B7298(play, NULL, PLAYER_CSMODE_82);
}
- if (this->unk_27A == 30) {
+ if (this->timer == 30) {
+ // Look side-to-side but upwards, with chin up
+ // gPlayerAnim_alink_kyoro
func_800B7298(play, NULL, PLAYER_CSMODE_81);
}
- if (this->unk_27A == 5) {
+ if (this->timer == 5) {
+ // Give a big nod of approval
+ // gPlayerAnim_al_yes
func_800B7298(play, NULL, PLAYER_CSMODE_74);
}
}
- if (this->unk_27A > 80) {
- subCam->fov += (90.0f - subCam->fov) / (this->unk_27A - 80);
- } else if (this->unk_27A > 60) {
- sp4C = 1.0f / (this->unk_27A - 60);
+ // Update camera
+ if (this->timer > 80) {
+ subCam->fov += (90.0f - subCam->fov) / (this->timer - 80);
+ } else if (this->timer > 60) {
+ temp = 1.0f / (this->timer - 60);
- subCamAt.x = subCam->at.x + ((player->actor.world.pos.x - subCam->at.x) * sp4C);
- subCamAt.y = subCam->at.y + (((player->actor.focus.pos.y - subCam->at.y) - 20.0f) * sp4C);
- subCamAt.z = subCam->at.z + ((player->actor.world.pos.z - subCam->at.z) * sp4C);
+ subCamAt.x = subCam->at.x + ((player->actor.world.pos.x - subCam->at.x) * temp);
+ subCamAt.y = subCam->at.y + (((player->actor.focus.pos.y - subCam->at.y) - 20.0f) * temp);
+ subCamAt.z = subCam->at.z + ((player->actor.world.pos.z - subCam->at.z) * temp);
- sp54.x = (Math_SinS(player->actor.world.rot.y) * 80.0f) + subCamAt.x;
- sp54.y = subCamAt.y + 20.0f;
- sp54.z = (Math_CosS(player->actor.world.rot.y) * 80.0f) + subCamAt.z;
- sp4C *= 0.75f;
+ eyeNext.x = subCamAt.x + (Math_SinS(player->actor.world.rot.y) * 80.0f);
+ eyeNext.y = subCamAt.y + 20.0f;
+ eyeNext.z = subCamAt.z + (Math_CosS(player->actor.world.rot.y) * 80.0f);
+ temp *= 0.75f;
- VEC3F_LERPIMPDST(&subCamEye, &subCam->eye, &sp54, sp4C);
+ VEC3F_LERPIMPDST(&subCamEye, &subCam->eye, &eyeNext, temp);
Play_SetCameraAtEye(play, this->subCamId, &subCamAt, &subCamEye);
- } else if ((this->unk_27A < 11) && (this->unk_27A > 0)) {
- subCam->fov += (mainCam->fov - subCam->fov) / this->unk_27A;
+ } else if ((this->timer < 11) && (this->timer > 0)) {
+ subCam->fov += (mainCam->fov - subCam->fov) / this->timer;
}
- if (this->unk_286 != 0) {
- func_80A90C54(play, this->unk_286 * 0.05f);
+ // Update white screen
+ if (this->screenFillAlpha != 0) {
+ EnTest6_EnableWhiteFillScreen(play, this->screenFillAlpha * 0.05f);
subCam->fov += (mainCam->fov - subCam->fov) * 0.05f;
- this->unk_286++;
- if (this->unk_286 >= 20) {
- this->unk_27A = 1;
+ this->screenFillAlpha++;
+ if (this->screenFillAlpha >= 20) {
+ this->timer = 1;
}
- } else if ((this->unk_27A <= 60) && (this->unk_27A > 40) &&
+ } else if ((this->timer <= 60) && (this->timer > 40) &&
(CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) {
- this->unk_286 = 1;
- if (ENTEST6_GET(&this->actor) == ENTEST6_25) {
+ this->screenFillAlpha = 1;
+
+ if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) {
AudioSfx_StopById(NA_SE_SY_TIME_CONTROL_SLOW);
- } else if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
+ } else if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) {
AudioSfx_StopById(NA_SE_SY_TIME_CONTROL_NORMAL);
}
}
- if (DECR(this->unk_27A) == 0) {
- func_80A916F0(this, play);
+ if (DECR(this->timer) == 0) {
+ EnTest6_StopInvertedSoTCutscene(this, play);
play->msgCtx.ocarinaMode = 4;
}
}
-void func_80A920C8(EnTest6* this, PlayState* play) {
+void EnTest6_SetupDoubleSoTCutscene(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- this->unk_27A = 120;
- this->unk_286 = 0;
- this->unk_160 = 0.0f;
+ this->timer = 120;
+ this->screenFillAlpha = 0;
+ this->doubleSoTEnvLerp = 0.0f;
this->actor.home.pos = player->actor.world.pos;
this->actor.home.rot = player->actor.shape.rot;
}
-void func_80A92118(EnTest6* this, PlayState* play) {
+void EnTest6_StopDoubleSoTCutscene(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.freezeTimer = 0;
@@ -650,7 +711,15 @@ void func_80A92118(EnTest6* this, PlayState* play) {
Actor_Kill(&this->actor);
}
-void func_80A92188(EnTest6* this, PlayState* play) {
+static Vec3f sSubCamUp = { 0.0f, 1.0f, 0.0f };
+
+Color_RGB8 sDoubleSoTCsFogColor = { 225, 230, 225 };
+Color_RGB8 sDoubleSoTCsAmbientColor = { 120, 120, 100 };
+Color_RGB8 sDoubleSoTCsDiffuseColor = { 0, 0, 0 };
+s16 sDoubleSoTCsFogNear = 940;
+s16 sDoubleSoTCsZFar = 2000;
+
+void EnTest6_DoubleSoTCutscene(EnTest6* this, PlayState* play) {
Input* input = CONTROLLER1(&play->state);
Player* player = GET_PLAYER(play);
Camera* subCam;
@@ -658,55 +727,55 @@ void func_80A92188(EnTest6* this, PlayState* play) {
s16 subCamId;
s16 pad2;
- if (this->unk_27A > 115) {
- this->unk_160 += 0.2f;
- func_80A90C54(play, this->unk_160);
- } else if (this->unk_27A > 90) {
- this->unk_160 -= 0.05f;
- func_80A90C54(play, this->unk_160);
- } else if (this->unk_27A == 90) {
- this->unk_160 = 0.0f;
- func_80A90D20(play);
+ if (this->timer > 115) {
+ this->doubleSoTEnvLerp += 0.2f;
+ EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp);
+ } else if (this->timer > 90) {
+ this->doubleSoTEnvLerp -= 0.05f;
+ EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp);
+ } else if (this->timer == 90) {
+ this->doubleSoTEnvLerp = 0.0f;
+ EnTest6_DisableWhiteFillScreen(play);
}
- if (this->unk_27A == 1) {
- this->unk_160 = 0.0f;
- func_80A90D20(play);
- } else if (this->unk_27A < 17) {
- this->unk_160 -= 0.06666666f;
- func_80A90C54(play, this->unk_160);
- } else if (this->unk_27A < 22) {
- this->unk_160 += 0.2f;
- func_80A90C54(play, this->unk_160);
+ if (this->timer == 1) {
+ this->doubleSoTEnvLerp = 0.0f;
+ EnTest6_DisableWhiteFillScreen(play);
+ } else if (this->timer < 17) {
+ this->doubleSoTEnvLerp -= 0.06666666f;
+ EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp);
+ } else if (this->timer < 22) {
+ this->doubleSoTEnvLerp += 0.2f;
+ EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp);
}
- if (this->unk_27A == 115) {
- func_800FD59C(play, &D_80A9406C, 1.0f);
- func_800FD5E0(play, &D_80A94070, 1.0f);
- func_800FD654(play, &D_80A94068, 1.0f);
- func_800FD698(play, D_80A94074, D_80A94078, 1.0f);
+ if (this->timer == 115) {
+ Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, 1.0f);
+ Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, 1.0f);
+ Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, 1.0f);
+ Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, 1.0f);
play->unk_18844 = true;
}
- if (this->unk_27A == 15) {
- func_800FD59C(play, &D_80A9406C, 0.0f);
- func_800FD5E0(play, &D_80A94070, 0.0f);
- func_800FD654(play, &D_80A94068, 0.0f);
- func_800FD698(play, D_80A94074, D_80A94078, 0.0f);
+ if (this->timer == 15) {
+ Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, 0.0f);
+ Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, 0.0f);
+ Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, 0.0f);
+ Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, 0.0f);
play->unk_18844 = false;
}
- if (this->unk_286 >= 20) {
- func_800FD59C(play, &D_80A9406C, this->unk_160);
- func_800FD5E0(play, &D_80A94070, this->unk_160);
- func_800FD654(play, &D_80A94068, this->unk_160);
- func_800FD698(play, D_80A94074, D_80A94078, this->unk_160);
+ if (this->screenFillAlpha >= 20) {
+ Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, this->doubleSoTEnvLerp);
+ Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, this->doubleSoTEnvLerp);
+ Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, this->doubleSoTEnvLerp);
+ Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, this->doubleSoTEnvLerp);
play->unk_18844 = false;
}
func_800B8F98(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG);
- switch (this->unk_27A) {
+ switch (this->timer) {
case 119:
EnTest6_EnableMotionBlur(50);
break;
@@ -715,7 +784,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
EnTest6_EnableMotionBlur(20);
Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME);
Distortion_SetDuration(90);
- this->cueId = 2;
+ this->cueId = SOTCS_CUEID_DOUBLE_INIT;
break;
case 110:
@@ -724,53 +793,56 @@ void func_80A92188(EnTest6* this, PlayState* play) {
case 38:
case 114:
- this->cueId = 1;
+ this->cueId = SOTCS_CUEID_DOUBLE_WAIT;
break;
case 76:
- this->cueId = 3;
+ this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_INWARD;
break;
case 61:
EnTest6_EnableMotionBlur(150);
- this->cueId = 4;
+ this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_SPIN;
break;
case 51:
EnTest6_EnableMotionBlur(180);
- this->cueId = 5;
+ this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD;
break;
case 14:
case 15:
EnTest6_EnableMotionBlur(50);
Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME);
- this->cueId = 0;
+ this->cueId = SOTCS_CUEID_NONE;
break;
case 1:
EnTest6_DisableMotionBlur();
if (CHECK_EVENTINF(EVENTINF_52)) {
- this->cueId = 9;
+ this->cueId = SOTCS_CUEID_DOUBLE_END;
}
break;
+
+ default:
+ break;
}
- func_80A92950(this, play);
+ EnTest6_SharedSoTCutscene(this, play);
- if (this->unk_27A == 115) {
+ if (this->timer == 115) {
subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
subCam = Play_GetCamera(play, subCamId);
this->subCamAt = subCam->at;
this->subCamEye = subCam->eye;
this->subCamFov = subCam->fov;
- CutsceneCamera_Init(subCam, &this->unk_18C);
+ CutsceneCamera_Init(subCam, &this->csCamInfo);
}
- if ((this->unk_27A <= 115) && (this->unk_27A >= 16)) {
- CutsceneCamera_UpdateSplines((u8*)D_80A93E80, &this->unk_18C);
- } else if (this->unk_27A < 16) {
+ if ((this->timer <= 115) && (this->timer >= 16)) {
+ CutsceneCamera_UpdateSplines((u8*)sDoubleSoTCsCamData, &this->csCamInfo);
+ } else if (this->timer < 16) {
subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
Play_SetCameraAtEyeUp(play, subCamId, &this->subCamAt, &this->subCamEye, &sSubCamUp);
@@ -778,7 +850,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
Play_SetCameraRoll(play, subCamId, 0);
}
- switch (this->unk_27A) {
+ switch (this->timer) {
case 116:
player->actor.freezeTimer = 2;
player->actor.shape.rot.x = 0;
@@ -821,24 +893,27 @@ void func_80A92188(EnTest6* this, PlayState* play) {
player->unk_AC0 = 0.0f;
player->actor.shape.yOffset = 0.0f;
break;
+
+ default:
+ break;
}
- if ((this->unk_286 > 0) && (this->unk_286 < 20)) {
- func_80A90C54(play, this->unk_286 * 0.05f);
- this->unk_286++;
- if (this->unk_286 >= 20) {
- this->unk_27A = 15;
- this->unk_160 = 0.9333333f;
+ if ((this->screenFillAlpha > 0) && (this->screenFillAlpha < 20)) {
+ EnTest6_EnableWhiteFillScreen(play, this->screenFillAlpha * 0.05f);
+ this->screenFillAlpha++;
+ if (this->screenFillAlpha >= 20) {
+ this->timer = 15;
+ this->doubleSoTEnvLerp = 0.9333333f;
}
- } else if ((this->unk_27A < 96) && (this->unk_27A > 50) &&
+ } else if ((this->timer < 96) && (this->timer > 50) &&
(CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) {
- this->unk_286 = 1;
- this->unk_27A = 39;
+ this->screenFillAlpha = 1;
+ this->timer = 39;
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 20);
}
- if (DECR(this->unk_27A) == 0) {
- func_80A92118(this, play);
+ if (DECR(this->timer) == 0) {
+ EnTest6_StopDoubleSoTCutscene(this, play);
}
}
@@ -848,166 +923,171 @@ void EnTest6_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
}
-void func_80A92950(EnTest6* this, PlayState* play) {
+/**
+ * Processes two different cutscenes:
+ * return to "Dawn of the First Day" Cs, and Song of Double Time Cs
+ */
+void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) {
s32 pad[2];
Player* player = GET_PLAYER(play);
- f32 temp_f0;
+ f32 yDiff;
s32 i;
s32 cueChannel;
- if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_505)) {
- cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_505);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_SOTCS)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_SOTCS);
this->cueId = play->csCtx.actorCues[cueChannel]->id;
switch (this->cueId) {
- case 1:
+ case SOTCS_CUEID_DOUBLE_WAIT:
break;
- case 2:
- this->unk_276 = 0;
- this->unk_278 = 0;
- this->unk_27C = 0;
+ case SOTCS_CUEID_DOUBLE_INIT:
+ this->drawType = SOTCS_DRAW_DOUBLE_SOT;
+ this->counter = 0;
+ this->clockAngle = 0;
player->actor.shape.shadowDraw = NULL;
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
- this->unk_154 = 150.0f;
+ this->clockSpeed = 150.0f;
}
if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
- this->unk_280 = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->clockColorGray = play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
- this->unk_280 = 38;
+ this->clockColorGray = 38;
}
if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
- this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
+ this->clockDist = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
- this->unk_150 = 480.0f;
+ this->clockDist = 480.0f;
}
break;
- case 3:
+ case SOTCS_CUEID_DOUBLE_CLOCKS_INWARD:
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
- this->unk_280 += 6;
+ this->clockColorGray += 6;
}
if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
- this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
+ this->clockRadialSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
- this->unk_158 = -32.0f;
+ this->clockRadialSpeed = -32.0f;
}
- this->unk_150 += this->unk_158;
+ this->clockDist += this->clockRadialSpeed;
break;
- case 4:
+ case SOTCS_CUEID_DOUBLE_CLOCKS_SPIN:
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
- this->unk_280 -= 4;
+ this->clockColorGray -= 4;
}
break;
- case 5:
+ case SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD:
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
- this->unk_280 -= 8;
+ this->clockColorGray -= 8;
}
if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
- this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
+ this->clockRadialSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
- this->unk_158 += 20.0f;
+ this->clockRadialSpeed += 20.0f;
}
- this->unk_150 += this->unk_158;
- if (this->unk_150 > 3500.0f) {
- this->unk_150 = 3500.0f;
- this->cueId = 0;
+ this->clockDist += this->clockRadialSpeed;
+ if (this->clockDist > 3500.0f) {
+ this->clockDist = 3500.0f;
+ this->cueId = SOTCS_CUEID_NONE;
}
break;
- case 6:
- this->unk_276 = 1;
- this->unk_278 = 0;
- this->unk_27C = 0;
+ case SOTCS_CUEID_RESET_INIT:
+ this->drawType = SOTCS_DRAW_RESET_CYCLE_SOT;
+ this->counter = 0;
+ this->clockAngle = 0;
player->actor.shape.shadowDraw = NULL;
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
- this->unk_154 = 100.0f;
+ this->clockSpeed = 100.0f;
}
if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
- this->unk_14C = (u32)play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->speed = (u32)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
- this->unk_14C = 20.0f;
+ this->speed = 20.0f;
}
if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
- this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
+ this->clockDist = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
- this->unk_150 = 300.0f;
+ this->clockDist = 300.0f;
}
- this->unk_158 = 0.0f;
+ this->clockAccel = 0.0f;
break;
- case 7:
+ case SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN:
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockAccel = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
- this->unk_158 = -5.0f;
+ this->clockAccel = -5.0f;
}
- this->unk_154 += this->unk_158;
+ this->clockSpeed += this->clockAccel;
break;
- case 8:
+ case SOTCS_CUEID_RESET_CLOCKS_SPEED_UP:
if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
- this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->clockAccel += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
- this->unk_158 += 2.0f;
+ this->clockAccel += 2.0f;
}
- this->unk_154 += this->unk_158;
- if (this->unk_154 > 10000.0f) {
- this->unk_154 = 10000.0f;
- this->cueId = 0;
+ this->clockSpeed += this->clockAccel;
+ if (this->clockSpeed > 10000.0f) {
+ this->clockSpeed = 10000.0f;
+ this->cueId = SOTCS_CUEID_NONE;
}
break;
- case 0:
+ case SOTCS_CUEID_NONE:
default:
- this->unk_276 = 99;
+ this->drawType = SOTCS_DRAW_TYPE_NONE;
return;
- case 9:
- Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), player->unk_3CE,
- PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC);
- this->unk_276 = 99;
+ case SOTCS_CUEID_DOUBLE_END:
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, ((void)0, gSaveContext.save.entrance),
+ player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0,
+ player->unk_3CC);
+ this->drawType = SOTCS_DRAW_TYPE_NONE;
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
play->transitionType = TRANS_TYPE_FADE_BLACK;
if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
gSaveContext.respawnFlag = -0x63;
- SET_EVENTINF(EVENTINF_27);
+ SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP);
} else {
gSaveContext.respawnFlag = 2;
}
@@ -1016,74 +1096,74 @@ void func_80A92950(EnTest6* this, PlayState* play) {
}
} else {
switch (this->cueId) {
- case 2:
- this->unk_276 = 0;
- this->unk_278 = 0;
- this->unk_27C = 0;
+ case SOTCS_CUEID_DOUBLE_INIT:
+ this->drawType = SOTCS_DRAW_DOUBLE_SOT;
+ this->counter = 0;
+ this->clockAngle = 0;
player->actor.shape.shadowDraw = NULL;
- this->unk_280 = 38;
- this->unk_154 = 150.0f;
- this->unk_150 = 480.0f;
+ this->clockColorGray = 38;
+ this->clockSpeed = 150.0f;
+ this->clockDist = 480.0f;
- case 1:
+ case SOTCS_CUEID_DOUBLE_WAIT:
break;
- case 3:
- this->unk_158 = -32.0f;
- this->unk_280 += 6;
- this->unk_150 += -32.0f;
+ case SOTCS_CUEID_DOUBLE_CLOCKS_INWARD:
+ this->clockRadialSpeed = -32.0f;
+ this->clockColorGray += 6;
+ this->clockDist += -32.0f;
break;
- case 4:
- this->unk_280 -= 4;
+ case SOTCS_CUEID_DOUBLE_CLOCKS_SPIN:
+ this->clockColorGray -= 4;
break;
- case 5:
- this->unk_280 -= 8;
- this->unk_158 += 20.0f;
- this->unk_150 += this->unk_158;
- if (this->unk_150 > 3500.0f) {
- this->unk_150 = 3500.0f;
- this->cueId = 0;
+ case SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD:
+ this->clockColorGray -= 8;
+ this->clockRadialSpeed += 20.0f;
+ this->clockDist += this->clockRadialSpeed;
+ if (this->clockDist > 3500.0f) {
+ this->clockDist = 3500.0f;
+ this->cueId = SOTCS_CUEID_NONE;
}
break;
- case 6:
- this->unk_276 = 1;
- this->unk_278 = 0;
- this->unk_27C = 0;
+ case SOTCS_CUEID_RESET_INIT:
+ this->drawType = SOTCS_DRAW_RESET_CYCLE_SOT;
+ this->counter = 0;
+ this->clockAngle = 0;
player->actor.shape.shadowDraw = NULL;
- this->unk_154 = 100.0f;
- this->unk_14C = 20.0f;
- this->unk_150 = 300.0f;
- this->unk_158 = 0.0f;
+ this->clockSpeed = 100.0f;
+ this->speed = 20.0f;
+ this->clockDist = 300.0f;
+ this->clockAccel = 0.0f;
break;
- case 7:
- this->unk_158 = -5.0f;
- this->unk_154 += -5.0f;
+ case SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN:
+ this->clockAccel = -5.0f;
+ this->clockSpeed += -5.0f;
break;
- case 8:
- this->unk_158 += 2.0f;
- this->unk_154 += this->unk_158;
- if (this->unk_154 > 10000.0f) {
- this->unk_154 = 10000.0f;
- this->cueId = 0;
+ case SOTCS_CUEID_RESET_CLOCKS_SPEED_UP:
+ this->clockAccel += 2.0f;
+ this->clockSpeed += this->clockAccel;
+ if (this->clockSpeed > 10000.0f) {
+ this->clockSpeed = 10000.0f;
+ this->cueId = SOTCS_CUEID_NONE;
}
break;
- case 0:
+ case SOTCS_CUEID_NONE:
default:
- this->unk_276 = 99;
+ this->drawType = SOTCS_DRAW_TYPE_NONE;
return;
- case 9:
+ case SOTCS_CUEID_DOUBLE_END:
if (gSaveContext.save.time > CLOCK_TIME(12, 0)) {
- Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF),
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, ((void)0, gSaveContext.save.entrance),
player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0,
player->unk_3CC);
- this->unk_276 = 99;
+ this->drawType = SOTCS_DRAW_TYPE_NONE;
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
play->transitionType = TRANS_TYPE_FADE_BLACK;
@@ -1094,228 +1174,246 @@ void func_80A92950(EnTest6* this, PlayState* play) {
}
}
- if (this->unk_276 == 1) {
- for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) {
- D_80A94910[i].unk_08 += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
- D_80A94910[i].unk_10 += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
- D_80A94910[i].unk_0C += 3.0f;
+ if (this->drawType == SOTCS_DRAW_RESET_CYCLE_SOT) {
+ for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) {
+ sSoTCsAmmoDrops[i].pos.x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
+ sSoTCsAmmoDrops[i].pos.z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f);
+ sSoTCsAmmoDrops[i].pos.y += 3.0f;
- if (player->actor.world.pos.y < D_80A94910[i].unk_0C) {
- temp_f0 = D_80A94910[i].unk_0C - player->actor.world.pos.y;
- if (temp_f0 > 550.0f) {
- temp_f0 = 1.0f;
+ if (player->actor.world.pos.y < sSoTCsAmmoDrops[i].pos.y) {
+ yDiff = sSoTCsAmmoDrops[i].pos.y - player->actor.world.pos.y;
+ if (yDiff > 550.0f) {
+ yDiff = 1.0f;
} else {
- temp_f0 = temp_f0 / 550.0f;
+ yDiff /= 550.0f;
}
- D_80A94910[i].unk_04 = SQ(temp_f0);
+ sSoTCsAmmoDrops[i].scale = SQ(yDiff);
} else {
- D_80A94910[i].unk_04 = -10.0f;
+ sSoTCsAmmoDrops[i].scale = -10.0f;
}
}
}
- this->unk_278++;
+ this->counter++;
}
-void func_80A93298(EnTest6* this, PlayState* play) {
- s16 temp_s3;
- s16 temp_s4;
- f32 phi_f24;
- s16 phi_s2;
+/**
+ * Draws clocks in a double spiral above and below player
+ */
+void EnTest6_DrawThreeDayResetSoTCutscene(EnTest6* this, PlayState* play) {
+ s16 clock1Yaw;
+ s16 clock2Yaw;
+ s16 angle;
s32 i;
- f32 cos;
- f32 sin;
+ Vec3f clockPos;
OPEN_DISPS(play->state.gfxCtx);
- this->unk_148 = POLY_OPA_DISP;
- phi_f24 = 0.0f;
+ this->gfx = POLY_OPA_DISP;
+ clockPos.y = 0.0f;
- temp_s3 = this->unk_27C;
- temp_s4 = (s32)(Math_SinS(play->state.frames) * 12000.0f) + temp_s3 + 0x4E20;
- phi_s2 = (play->state.frames & 0x3C) * 1024;
- phi_s2 *= (this->unk_154 / 200.0f);
- this->unk_27C += (s16)this->unk_154;
- this->unk_27E = (s16)((this->unk_154 / 200.0f) * 256.0f);
+ clock1Yaw = this->clockAngle;
+ clock2Yaw = clock1Yaw + 0x4E20 + (s32)(0x2EE0 * Math_SinS(play->state.frames));
+ // The `& 0x3C` ensures the angle only updates once every 4 frames
+ angle = (play->state.frames & 0x3C) * 1024;
+ angle *= this->clockSpeed / 200.0f;
+ this->clockAngle += (s16)this->clockSpeed;
+ this->clockRingRotZ = (s16)((this->clockSpeed / 200.0f) * 256.0f);
- for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) {
- temp_s3 += 0x1000;
- cos = Math_CosS(temp_s3) * this->unk_150;
- sin = Math_SinS(temp_s3) * this->unk_150;
- Matrix_Translate(cos, phi_f24, sin, MTXMODE_NEW);
+ // Draw 2 clocks per loop
+ for (i = 0; i < (SOTCS_RESET_NUM_CLOCKS / 2); i++) {
+ // Clock 1
+ clock1Yaw += 0x1000;
+ clockPos.x = Math_CosS(clock1Yaw) * this->clockDist;
+ clockPos.z = Math_SinS(clock1Yaw) * this->clockDist;
+ Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_NEW);
Matrix_RotateXS(0x4000, MTXMODE_APPLY);
Matrix_Scale(0.8f, 0.8f, 0.8f, MTXMODE_APPLY);
- Matrix_RotateZS(phi_s2, MTXMODE_APPLY);
+ Matrix_RotateZS(angle, MTXMODE_APPLY);
- gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255);
- gDPSetEnvColor(this->unk_148++, 255, 255, 255, 255);
- gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
- gSPDisplayList(this->unk_148++, gSongOfTimeClockDL);
+ gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255);
+ gDPSetEnvColor(this->gfx++, 255, 255, 255, 255);
+ gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
+ gSPDisplayList(this->gfx++, gSongOfTimeClockDL);
- temp_s4 += 0x1000;
- cos = Math_CosS(temp_s4) * this->unk_150;
- sin = Math_SinS(temp_s4) * this->unk_150;
- Matrix_Translate(cos, phi_f24, sin, MTXMODE_NEW);
+ // Clock 2
+ clock2Yaw += 0x1000;
+ clockPos.x = Math_CosS(clock2Yaw) * this->clockDist;
+ clockPos.z = Math_SinS(clock2Yaw) * this->clockDist;
+ Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_NEW);
Matrix_RotateXS(0x4000, MTXMODE_APPLY);
Matrix_Scale(0.8f, 0.8f, 0.8f, MTXMODE_APPLY);
- Matrix_RotateZS(-phi_s2, MTXMODE_APPLY);
+ Matrix_RotateZS(-angle, MTXMODE_APPLY);
- gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255);
- gDPSetEnvColor(this->unk_148++, 255, 255, 255, 255);
- gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
- gSPDisplayList(this->unk_148++, gSongOfTimeClockDL);
+ gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255);
+ gDPSetEnvColor(this->gfx++, 255, 255, 255, 255);
+ gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
+ gSPDisplayList(this->gfx++, gSongOfTimeClockDL);
- phi_f24 -= this->unk_14C;
- phi_s2 += this->unk_27E;
+ clockPos.y -= this->speed;
+ angle += this->clockRingRotZ;
}
- POLY_OPA_DISP = this->unk_148;
+ POLY_OPA_DISP = this->gfx;
- for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) {
- if (D_80A94910[i].unk_04 > 0.0f) {
- D_80A94910[i].unk_14(this, play, &D_80A94910[i]);
+ for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) {
+ if (sSoTCsAmmoDrops[i].scale > 0.0f) {
+ sSoTCsAmmoDrops[i].draw(this, play, &sSoTCsAmmoDrops[i]);
}
}
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_80A9369C(Actor* thisx, PlayState* play2) {
- EnTest6* this = THIS;
- PlayState* play = play2;
- f32 temp_f20;
- f32 temp_f22;
- f32 phi_f26;
- s16 phi_s2;
- s16 sp78;
+/**
+ * Draws clocks in a ring that spins around player
+ */
+void EnTest6_DrawDoubleSoTCutscene(EnTest6* this, PlayState* play) {
+ s32 pad1[2];
+ Vec3f clockPos;
+ s16 clockRotX;
+ s16 clockNormalAngle;
s32 i;
Player* player = GET_PLAYER(play);
- s32 pad;
+ s32 pad2;
- if (this) {}
OPEN_DISPS(play->state.gfxCtx);
- this->unk_148 = POLY_OPA_DISP;
- this->unk_27C += (s16)this->unk_154;
- this->unk_27E = this->unk_27C * 2;
- sp78 = (play->state.frames & 0x3C) * 1024;
- phi_s2 = this->unk_27C + 0x4000;
+ this->gfx = POLY_OPA_DISP;
+ this->clockAngle += (s16)this->clockSpeed;
+ this->clockRingRotZ = this->clockAngle * 2;
+ // The `& 0x3C` ensures the clock only turns once every 4 frames.
+ // Each turn rotates the clock 22.5 degrees (0x10000 / 64 * 4)
+ // clockNormalAngle = (play->state.frames & 0x3C) * ((0x10000 / 64 * 4) / 4);
+ clockNormalAngle = (play->state.frames & 0x3C) * (DEG_TO_BINANG(22.5f) / 4);
+ clockRotX = this->clockAngle + 0x4000;
+
+ // All cases have the exact same code
switch (player->transformation) {
- default:
- phi_f26 = player->actor.world.pos.y + 40.0f;
- break;
-
case PLAYER_FORM_DEKU:
- phi_f26 = player->actor.world.pos.y + 40.0f;
+ clockPos.x = player->actor.world.pos.y + 40.0f;
break;
case PLAYER_FORM_GORON:
- phi_f26 = player->actor.world.pos.y + 40.0f;
+ clockPos.x = player->actor.world.pos.y + 40.0f;
break;
case PLAYER_FORM_ZORA:
- phi_f26 = player->actor.world.pos.y + 40.0f;
+ clockPos.x = player->actor.world.pos.y + 40.0f;
break;
case PLAYER_FORM_FIERCE_DEITY:
- phi_f26 = player->actor.world.pos.y + 40.0f;
+ clockPos.x = player->actor.world.pos.y + 40.0f;
+ break;
+
+ default:
+ clockPos.x = player->actor.world.pos.y + 40.0f;
break;
}
- for (i = 0; i < 51; i++) {
- temp_f20 = Math_CosS(phi_s2) * this->unk_150;
- temp_f22 = Math_SinS(phi_s2) * this->unk_150;
- Matrix_RotateZS(this->unk_27E, MTXMODE_NEW);
- Matrix_Translate(phi_f26, temp_f20, temp_f22, MTXMODE_APPLY);
+ // Draw clocks
+ for (i = 0; i < SOTCS_DOUBLE_NUM_CLOCKS; i++) {
+ clockPos.y = Math_CosS(clockRotX) * this->clockDist;
+ clockPos.z = Math_SinS(clockRotX) * this->clockDist;
+ // Rotate the entire clock ring
+ Matrix_RotateZS(this->clockRingRotZ, MTXMODE_NEW);
+
+ Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_APPLY);
Matrix_Scale(0.85f, 0.85f, 0.85f, MTXMODE_APPLY);
- Matrix_RotateXS(phi_s2, MTXMODE_APPLY);
- Matrix_RotateZS(sp78, MTXMODE_APPLY);
+ // Orient the clock so the plane it's drawn on also passes through player
+ Matrix_RotateXS(clockRotX, MTXMODE_APPLY);
+ // Rotate around the normal of the plane, so the clock plane does not change,
+ // the drawn shape is spun internally
+ Matrix_RotateZS(clockNormalAngle, MTXMODE_APPLY);
- gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(this->unk_148++, 0, 0xFF, this->unk_280, this->unk_280, this->unk_280, 255);
- gDPSetEnvColor(this->unk_148++, 235, 238, 235, 255);
- gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
- gSPDisplayList(this->unk_148++, gSongOfTimeClockDL);
+ gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(this->gfx++, 0, 0xFF, this->clockColorGray, this->clockColorGray, this->clockColorGray, 255);
+ gDPSetEnvColor(this->gfx++, 235, 238, 235, 255);
+ gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
+ gSPDisplayList(this->gfx++, gSongOfTimeClockDL);
- phi_s2 += 0x505;
+ clockRotX += 0x10000 / SOTCS_DOUBLE_NUM_CLOCKS;
}
Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f,
player->actor.world.pos.z);
Lights_PointSetColorAndRadius(&this->lights[0].info, 100, 250, 100, 200);
- POLY_OPA_DISP = this->unk_148;
+ POLY_OPA_DISP = this->gfx;
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_80A939E8(EnTest6* this, PlayState* play2) {
+/**
+ * Draws clocks flat on the ground.
+ * Also draws black particles that raise or fall to indicate if time is speeding up or slowing down
+ */
+void EnTest6_DrawInvertedSoTCutscene(EnTest6* this, PlayState* play2) {
PlayState* play = play2;
Player* player = GET_PLAYER(play);
- f32 temp_f20;
+ f32 flashScale;
s32 i;
OPEN_DISPS(play->state.gfxCtx);
switch (this->cueId) {
- case 91:
- case 93:
+ case SOTCS_CUEID_INV_SETUP_CLOCKS:
+ case SOTCS_CUEID_INV_UNUSED:
Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f,
player->actor.world.pos.z);
- Lights_PointSetColorAndRadius(&this->lights[0].info, 245, 245, 200, this->unk_282);
+ Lights_PointSetColorAndRadius(&this->lights[0].info, 245, 245, 200, this->alpha);
break;
- case 95:
- this->unk_148 = POLY_XLU_DISP;
+ case SOTCS_CUEID_INV_CLOCKS:
+ this->gfx = POLY_XLU_DISP;
- for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) {
- Matrix_Translate(this->unk_20C[i].x, this->unk_20C[i].y, this->unk_20C[i].z, MTXMODE_NEW);
+ // Draw clocks
+ for (i = 0; i < ARRAY_COUNT(this->invSoTClockPos); i++) {
+ Matrix_Translate(this->invSoTClockPos[i].x, this->invSoTClockPos[i].y, this->invSoTClockPos[i].z,
+ MTXMODE_NEW);
Matrix_Scale(0.3f, 0.3f, 0.3f, MTXMODE_APPLY);
Matrix_RotateXS(-0x4000, MTXMODE_APPLY);
- Matrix_RotateZS(this->unk_278, MTXMODE_APPLY);
+ Matrix_RotateZS(this->invSoTClockYaw, MTXMODE_APPLY);
- gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255);
- gDPSetEnvColor(this->unk_148++, 245, 245, 200, this->unk_282);
- gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
- gSPDisplayList(this->unk_148++, gSongOfTimeClockDL);
+ gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255);
+ gDPSetEnvColor(this->gfx++, 245, 245, 200, this->alpha);
+ gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
+ gSPDisplayList(this->gfx++, gSongOfTimeClockDL);
- POLY_XLU_DISP = this->unk_148;
+ POLY_XLU_DISP = this->gfx;
}
- if (this->unk_254 != NULL) {
- for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) {
- temp_f20 = Rand_ZeroOne() * 0.0025f;
- Matrix_Translate((*this->unk_254)[i].x, (*this->unk_254)[i].y, (*this->unk_254)[i].z, MTXMODE_NEW);
- Matrix_Scale(temp_f20, temp_f20, temp_f20, MTXMODE_APPLY);
+ // Draw black particles
+ if (this->invSoTParticles != NULL) {
+ for (i = 0; i < SOTCS_NUM_PARTICLES; i++) {
+ flashScale = Rand_ZeroOne() * 0.0025f;
+ Matrix_Translate((*this->invSoTParticles)[i].x, (*this->invSoTParticles)[i].y,
+ (*this->invSoTParticles)[i].z, MTXMODE_NEW);
+ Matrix_Scale(flashScale, flashScale, flashScale, MTXMODE_APPLY);
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->unk_282 >> 1);
- gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->unk_282);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->alpha >> 1);
+ gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->alpha);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZS(this->unk_278 + (i << 2), MTXMODE_APPLY);
+ Matrix_RotateZS(this->invSoTClockYaw + (i << 2), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
}
+
Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f,
player->actor.world.pos.z);
- Lights_PointSetColorAndRadius(&this->lights[0].info, 250, 250, 100, this->unk_282);
+ Lights_PointSetColorAndRadius(&this->lights[0].info, 250, 250, 100, this->alpha);
break;
- case 90:
- case 92:
- case 94:
- case 96:
- case 97:
- case 98:
- case 99:
+ case SOTCS_CUEID_INV_INIT:
+ case SOTCS_CUEID_INV_END:
break;
}
@@ -1325,18 +1423,21 @@ void func_80A939E8(EnTest6* this, PlayState* play2) {
void EnTest6_Draw(Actor* thisx, PlayState* play) {
EnTest6* this = THIS;
- if (this->cueId != 0) {
- switch (this->unk_276) {
- case 1:
- func_80A93298(this, play);
+ if (this->cueId != SOTCS_CUEID_NONE) {
+ switch (this->drawType) {
+ case SOTCS_DRAW_RESET_CYCLE_SOT:
+ EnTest6_DrawThreeDayResetSoTCutscene(this, play);
break;
- case 0:
- func_80A9369C(thisx, play);
+ case SOTCS_DRAW_DOUBLE_SOT:
+ EnTest6_DrawDoubleSoTCutscene(this, play);
break;
- case 2:
- func_80A939E8(this, play);
+ case SOTCS_DRAW_INVERTED_SOT:
+ EnTest6_DrawInvertedSoTCutscene(this, play);
+ break;
+
+ default:
break;
}
}
diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.h b/src/overlays/actors/ovl_En_Test6/z_en_test6.h
index d7e40a983..726e23dc5 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h
@@ -7,46 +7,71 @@ struct EnTest6;
typedef void (*EnTest6ActionFunc)(struct EnTest6*, PlayState*);
-#define ENTEST6_GET(thisx) ((thisx)->params)
+#define SOTCS_GET_OCARINA_MODE(thisx) ((thisx)->params)
-enum {
- /* 24 */ ENTEST6_24 = 24,
- /* 25 */ ENTEST6_25,
- /* 26 */ ENTEST6_26,
-};
+// CueIds are a mix of cues from external cutscenes and internal states
+
+typedef enum SoTCsCueId {
+ /* 0x00 */ SOTCS_CUEID_NONE,
+ /* 0x01 */ SOTCS_CUEID_DOUBLE_WAIT,
+ /* 0x02 */ SOTCS_CUEID_DOUBLE_INIT,
+ /* 0x03 */ SOTCS_CUEID_DOUBLE_CLOCKS_INWARD,
+ /* 0x04 */ SOTCS_CUEID_DOUBLE_CLOCKS_SPIN,
+ /* 0x05 */ SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD,
+ /* 0x06 */ SOTCS_CUEID_RESET_INIT,
+ /* 0x07 */ SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN,
+ /* 0x08 */ SOTCS_CUEID_RESET_CLOCKS_SPEED_UP,
+ /* 0x09 */ SOTCS_CUEID_DOUBLE_END,
+ /* 0x5A */ SOTCS_CUEID_INV_INIT = 90,
+ /* 0x5B */ SOTCS_CUEID_INV_SETUP_CLOCKS,
+ /* 0x5D */ SOTCS_CUEID_INV_UNUSED = 93,
+ /* 0x5F */ SOTCS_CUEID_INV_CLOCKS = 95,
+ /* 0x63 */ SOTCS_CUEID_INV_END = 99
+} SoTCsCueId;
typedef struct {
- /* 0x00 */ LightNode* node;
- /* 0x04 */ LightInfo info;
-} EnTest6Light; // size = 0x14
+ /* 0x0 */ LightNode* node;
+ /* 0x4 */ LightInfo info;
+} SoTCsLight; // size = 0x14
+
+#define SOTCS_INV_NUM_CLOCKS 6
+#define SOTCS_DOUBLE_NUM_CLOCKS 51
+#define SOTCS_RESET_NUM_CLOCKS 128
+#define SOTCS_NUM_PARTICLES 64
typedef struct EnTest6 {
/* 0x000 */ Actor actor;
/* 0x144 */ EnTest6ActionFunc actionFunc;
- /* 0x148 */ Gfx* unk_148;
- /* 0x14C */ f32 unk_14C;
- /* 0x150 */ f32 unk_150;
- /* 0x154 */ f32 unk_154;
- /* 0x158 */ f32 unk_158;
- /* 0x15C */ f32 unk_15C;
- /* 0x160 */ f32 unk_160;
- /* 0x164 */ EnTest6Light lights[2];
- /* 0x18C */ CutsceneCamera unk_18C;
- /* 0x20C */ Vec3f unk_20C[6];
- /* 0x254 */ Vec3f (*unk_254)[64];
+ /* 0x148 */ Gfx* gfx;
+ /* 0x14C */ f32 speed; // Used for clock distance and lights
+ /* 0x150 */ f32 clockDist; // Radius from player
+ /* 0x154 */ f32 clockSpeed;
+ /* 0x158 */ union {
+ f32 clockRadialSpeed; // For double SoT cutscene
+ f32 clockAccel; // For reset SoT cutscene
+ };
+ /* 0x15C */ f32 invSoTEnvLerp;
+ /* 0x160 */ f32 doubleSoTEnvLerp;
+ /* 0x164 */ SoTCsLight lights[2];
+ /* 0x18C */ CutsceneCamera csCamInfo;
+ /* 0x20C */ Vec3f invSoTClockPos[SOTCS_INV_NUM_CLOCKS];
+ /* 0x254 */ Vec3f (*invSoTParticles)[SOTCS_NUM_PARTICLES];
/* 0x258 */ Vec3f subCamAt;
/* 0x264 */ Vec3f subCamEye;
/* 0x270 */ f32 subCamFov;
/* 0x274 */ s16 cueId;
- /* 0x276 */ s16 unk_276;
- /* 0x278 */ s16 unk_278;
- /* 0x27A */ s16 unk_27A;
- /* 0x27C */ s16 unk_27C;
- /* 0x27E */ s16 unk_27E;
- /* 0x280 */ s16 unk_280;
- /* 0x282 */ s16 unk_282;
+ /* 0x276 */ s16 drawType;
+ /* 0x278 */ union {
+ s16 invSoTClockYaw; // For inverted SoT cutscene.
+ s16 counter; // For double/reset SoT cutscenes. Increments every frame, unused.
+ };
+ /* 0x27A */ s16 timer;
+ /* 0x27C */ s16 clockAngle;
+ /* 0x27E */ s16 clockRingRotZ; // For double/reset SoT cutscenes
+ /* 0x280 */ s16 clockColorGray; // For double SoT cutscene
+ /* 0x282 */ s16 alpha;
/* 0x284 */ s16 subCamId;
- /* 0x286 */ s16 unk_286;
+ /* 0x286 */ s16 screenFillAlpha; // As a ratio, 20 is an alpha of 255
} EnTest6; // size = 0x288
#endif // Z_EN_TEST6_H
diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c
index 9c672ed51..fefe92672 100644
--- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c
+++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c
@@ -4,6 +4,7 @@
* Description: Soaring effects (wings, sphere, etc)
*/
+#include "prevent_bss_reordering.h"
#include "z_en_test7.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -330,7 +331,7 @@ void func_80AF14FC(PlayState* play2, EnTest7Struct2* arg1) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C1C0(play->state.gfxCtx);
+ Gfx_SetupDL26_Opa(play->state.gfxCtx);
Matrix_Push();
@@ -363,14 +364,13 @@ void func_80AF14FC(PlayState* play2, EnTest7Struct2* arg1) {
}
temp_v0 = Matrix_NewMtx(play->state.gfxCtx);
- if (temp_v0 != NULL) {
- gSPMatrix(POLY_OPA_DISP++, temp_v0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_081628);
+ if (temp_v0 == NULL) {
+ continue;
}
+ gSPMatrix(POLY_OPA_DISP++, temp_v0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_081628);
}
- if (ptr) {}
-
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
@@ -443,13 +443,13 @@ void func_80AF19A8(EnTest7* this, PlayState* play) {
}
void func_80AF1A2C(EnTest7* this, PlayState* play) {
- Color_RGB8 sp34 = { 64, 0, 0 };
- Color_RGB8 sp30 = { 220, 220, 255 };
- f32 sp2C = this->unk_1E54 / 10.0f;
+ Color_RGB8 fogColor = { 64, 0, 0 };
+ Color_RGB8 ambientColor = { 220, 220, 255 };
+ f32 envLerp = this->unk_1E54 / 10.0f;
- func_800FD59C(play, &sp30, sp2C);
- func_800FD654(play, &sp34, sp2C);
- func_800FD698(play, 2000, 4000, sp2C);
+ Environment_LerpAmbientColor(play, &ambientColor, envLerp);
+ Environment_LerpFogColor(play, &fogColor, envLerp);
+ Environment_LerpFog(play, 2000, 4000, envLerp);
if (this->unk_1E54 >= 10) {
Camera* subCam =
@@ -610,9 +610,9 @@ void func_80AF2030(EnTest7* this, PlayState* play) {
void func_80AF21E8(EnTest7* this, PlayState* play) {
s32 sp2C = this->unk_1E54 - 100;
- f32 sp1C;
- Color_RGB8 sp24 = { 64, 0, 0 };
- Color_RGB8 sp20 = { 220, 220, 255 };
+ f32 envLerp;
+ Color_RGB8 fogColor = { 64, 0, 0 };
+ Color_RGB8 ambientColor = { 220, 220, 255 };
if (R_PLAY_FILL_SCREEN_ON) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_VANISH);
@@ -623,10 +623,10 @@ void func_80AF21E8(EnTest7* this, PlayState* play) {
R_PLAY_FILL_SCREEN_ALPHA = 0;
}
- sp1C = 1.0f - (sp2C / 10.0f);
- func_800FD59C(play, &sp20, sp1C);
- func_800FD654(play, &sp24, sp1C);
- func_800FD698(play, 2000, 4000, sp1C);
+ envLerp = 1.0f - (sp2C / 10.0f);
+ Environment_LerpAmbientColor(play, &ambientColor, envLerp);
+ Environment_LerpFogColor(play, &fogColor, envLerp);
+ Environment_LerpFog(play, 2000, 4000, envLerp);
if (this->unk_1E54 >= 110) {
func_80AF082C(this, func_80AF2318);
diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c
index ed048288e..0672bd4bf 100644
--- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c
+++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c
@@ -190,7 +190,8 @@ void EnTg_Draw(Actor* thisx, PlayState* play) {
Matrix_Pop();
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0));
@@ -260,7 +261,7 @@ void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects) {
OPEN_DISPS(play->state.gfxCtx);
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
+ POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP);
for (i = 0; i < numEffects; i++, effect++) {
if (effect->isEnabled == true) {
diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
index a26095bc7..87589ae8c 100644
--- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
+++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
@@ -193,12 +193,12 @@ void func_80C10984(EnThiefbird* this, s32 arg1) {
for (i = 0; i < ARRAY_COUNT(this->unk_3F0); i++, ptr++) {
if (ptr->unk_22 == 0) {
ptr->unk_22 = (s32)Rand_ZeroFloat(20.0f) + 40;
- ptr->unk_00.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.x;
- ptr->unk_00.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.y;
- ptr->unk_00.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.z;
- ptr->unk_0C.x = randPlusMinusPoint5Scaled(5.0f);
+ ptr->unk_00.x = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.x;
+ ptr->unk_00.y = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.y;
+ ptr->unk_00.z = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.z;
+ ptr->unk_0C.x = Rand_CenteredFloat(5.0f);
ptr->unk_0C.y = Rand_ZeroOne() + 2.0f;
- ptr->unk_0C.z = randPlusMinusPoint5Scaled(5.0f);
+ ptr->unk_0C.z = Rand_CenteredFloat(5.0f);
ptr->unk_1C = Rand_ZeroFloat(1000.0f);
ptr->unk_18 = (Rand_ZeroFloat(20.0f) + 40.0f) * 0.0001f;
ptr->unk_1E = (s32)Rand_Next() >> 0x10;
@@ -1128,7 +1128,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
gSPDisplayList(&gfx[1], gTakkuriFeatherMaterialDL);
gfx = &gfx[2];
@@ -1154,7 +1154,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) {
void EnThiefbird_Draw(Actor* thisx, PlayState* play) {
EnThiefbird* this = THIS;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnThiefbird_OverrideLimbDraw, EnThiefbird_PostLimbDraw, &this->actor);
if (this->actor.colorFilterTimer > 0) {
diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
index 10f3ea529..dfcd1bad0 100644
--- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
+++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c
@@ -114,12 +114,12 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) {
}
void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) {
- EnTimeTag* this2 = this;
+ Actor* thisx = &this->actor;
if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) {
- if (this->actor.csId != CS_ID_NONE) {
+ if (thisx->csId != CS_ID_NONE) {
this->actionFunc = EnTimeTag_RooftopOath_Cutscene;
- CutsceneManager_Queue(this2->actor.csId);
+ CutsceneManager_Queue(thisx->csId);
gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
}
play->msgCtx.ocarinaMode = 4;
diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h
index 128e01973..c022ca122 100644
--- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h
+++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h
@@ -56,7 +56,7 @@ typedef enum {
/* 13 */ TIMETAG_KICKOUT_TEXT_TOWN_SHOOTING_GALLERY_2, // quick, it's closing time
/* 14 */ TIMETAG_KICKOUT_TEXT_SWORDSMANS_SCHOOL, // need to cut the moon, must leave
/* 15 */ TIMETAG_KICKOUT_TEXT_TREASURE_CHEST_SHOP, // already time to close shop
- /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK, // no more for today
+ /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK // no more for today
} TimeTagKickOutText;
typedef struct EnTimeTag {
diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
index 3d5c7a741..1ae0e073b 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
@@ -253,9 +253,9 @@ void func_80893BCC(EnTite* this, PlayState* play) {
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
for (j = 0; j < 2; j++) {
ptr = &this->limbPos[i];
- sp7C.x = ptr->x + randPlusMinusPoint5Scaled(1.0f);
- sp7C.y = ptr->y + randPlusMinusPoint5Scaled(1.0f);
- sp7C.z = ptr->z + randPlusMinusPoint5Scaled(1.0f);
+ sp7C.x = ptr->x + Rand_CenteredFloat(1.0f);
+ sp7C.y = ptr->y + Rand_CenteredFloat(1.0f);
+ sp7C.z = ptr->z + Rand_CenteredFloat(1.0f);
func_800B0DE0(play, &sp7C, &gZeroVec3f, &D_80896B64, &D_80896B3C, &D_80896B40,
(s32)Rand_ZeroFloat(16.0f) + 80, 15);
}
@@ -808,9 +808,9 @@ void func_80895738(EnTite* this, PlayState* play) {
void func_8089595C(EnTite* this, PlayState* play) {
Vec3f sp2C;
- sp2C.x = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.x;
+ sp2C.x = Rand_CenteredFloat(20.0f) + this->actor.world.pos.x;
sp2C.y = this->actor.world.pos.y + 15.0f;
- sp2C.z = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.z;
+ sp2C.z = Rand_CenteredFloat(20.0f) + this->actor.world.pos.z;
func_800B0DE0(play, &sp2C, &gZeroVec3f, &D_80896B44, &D_80896B3C, &D_80896B40, 500, 50);
}
@@ -1161,9 +1161,10 @@ void EnTite_Draw(Actor* thisx, PlayState* play) {
Gfx* gfx;
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
if (this->actor.params == ENTITE_MINUS_2) {
gSPSegment(&gfx[1], 0x08, D_80896B24[0][0]);
diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.h b/src/overlays/actors/ovl_En_Tite/z_en_tite.h
index 57d8ef3e3..af77f4a8d 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h
@@ -7,13 +7,13 @@ struct EnTite;
typedef void (*EnTiteActionFunc)(struct EnTite*, PlayState*);
-enum {
+typedef enum {
/* -4 */ ENTITE_MINUS_4 = -4,
/* -3 */ ENTITE_MINUS_3,
/* -2 */ ENTITE_MINUS_2,
/* -1 */ ENTITE_MINUS_1,
- /* 0 */ ENTITE_MINUS_0,
-};
+ /* 0 */ ENTITE_MINUS_0
+} EnTiteParam;
typedef struct EnTite {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
index d434bacaa..469e07e6d 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -130,9 +130,9 @@ static f32 D_80AEF8F0[] = {
};
typedef struct {
- /* 0x00 */ Actor* unk_00;
- /* 0x04 */ f32 unk_04;
-} EnTkStruct; // size = 0x8?
+ /* 0x0 */ Actor* unk_00;
+ /* 0x4 */ f32 unk_04;
+} EnTkStruct; // size = 0x8
void func_80AEC460(EnTk* this) {
if (DECR(this->unk_2C4) == 0) {
@@ -471,7 +471,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) {
if ((door != NULL) && (this->unk_2CA & 0x400)) {
Vec3f sp5C;
- Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->dyna.actor.world.pos);
+ Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->knobDoor.dyna.actor.world.pos);
door->unk_1A7 = 2;
if (sp5C.z < -20.0f) {
this->unk_2CA &= ~0x400;
@@ -503,12 +503,12 @@ s32 func_80AED354(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) {
s32 func_80AED38C(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) {
u16 sp1E = SCHEDULE_TIME_NOW;
- u8 params = ENTK_GET_F800(&this->actor);
+ u8 pathIndex = ENTK_GET_PATH_INDEX(&this->actor);
u16 phi_a1;
s32 index = scheduleOutput->result - 1;
u16 tmp;
- this->timePath = SubS_GetAdditionalPath(play, params, D_80AEF8E8[index + 1]);
+ this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AEF8E8[index + 1]);
if (this->timePath == NULL) {
return false;
}
@@ -1366,6 +1366,7 @@ void EnTk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
gSPDisplayList(POLY_OPA_DISP++, object_tk_DL_00B530);
CLOSE_DISPS(play->state.gfxCtx);
+
break;
}
}
@@ -1382,7 +1383,7 @@ void EnTk_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AEFA90[this->unk_2C2]));
diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.h b/src/overlays/actors/ovl_En_Tk/z_en_tk.h
index 9604133e7..aa15c6fc6 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h
@@ -10,7 +10,7 @@ typedef void (*EnTkUnkFunc)(struct EnTk*, PlayState*);
#define ENTK_GET_F(thisx) ((thisx)->params & 0xF)
#define ENTK_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F)
-#define ENTK_GET_F800(thisx) ((((thisx)->params >> 0xB) & 0x1F) & 0xFF)
+#define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F)
typedef struct EnTk {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
index c6681b4be..204fa8714 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
@@ -160,7 +160,8 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) {
Gfx* gfx = sShellDLists[this->actor.params];
OPEN_DISPS(play->state.gfxCtx);
- if (this->alpha == 0xFF) {
+
+ if (this->alpha == 255) {
Scene_SetRenderModeXlu(play, 0, 0x01);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
Gfx_DrawDListOpa(play, gfx);
@@ -169,5 +170,6 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha);
Gfx_DrawDListXlu(play, gfx);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h
index 9033b9923..edc488d1e 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h
@@ -18,7 +18,7 @@ typedef enum {
/* 1 */ TORCH2_PARAM_GORON,
/* 2 */ TORCH2_PARAM_ZORA,
/* 3 */ TORCH2_PARAM_DEKU,
- /* 4 */ TORCH2_PARAM_FIERCE_DEITY,
+ /* 4 */ TORCH2_PARAM_FIERCE_DEITY
} EnTorch2Param;
typedef enum {
@@ -26,7 +26,7 @@ typedef enum {
/* 1 */ TORCH2_STATE_FADING_IN,
/* 2 */ TORCH2_STATE_SOLID,
/* 3 */ TORCH2_STATE_IDLE,
- /* 4 */ TORCH2_STATE_DYING,
+ /* 4 */ TORCH2_STATE_DYING
} EnTorch2State;
#endif // Z_EN_TORCH2_H
diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
index 3a563ab60..2177742dc 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
@@ -205,16 +205,16 @@ void EnToto_Destroy(Actor* thisx, PlayState* play) {
}
void func_80BA383C(EnToto* this, PlayState* play) {
- if (SkelAnime_Update(&this->skelAnime) && this->actionFuncIndex == 1 &&
- this->skelAnime.animation != &object_zm_Anim_000C80) {
- if (play->msgCtx.currentTextId != 0x2A98 && play->msgCtx.currentTextId != 0x2A99) {
- if (this->unk2B4 & 1 || Rand_ZeroOne() > 0.5f) {
+ if (SkelAnime_Update(&this->skelAnime) && (this->actionFuncIndex == 1) &&
+ (this->skelAnime.animation != &object_zm_Anim_000C80)) {
+ if ((play->msgCtx.currentTextId != 0x2A98) && (play->msgCtx.currentTextId != 0x2A99)) {
+ if ((this->unk2B4 & 1) || (Rand_ZeroOne() > 0.5f)) {
this->unk2B4 = (this->unk2B4 + 1) & 3;
}
}
Animation_PlayOnce(&this->skelAnime, D_80BA5078[this->unk2B4]);
}
- func_800BBB74(this->unk260, 0x14, 0x50, 3);
+ func_800BBB74(&this->blinkInfo, 20, 80, 3);
}
void func_80BA3930(EnToto* this, PlayState* play) {
@@ -251,9 +251,8 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
return;
}
- //! TODO: Neither 0xED02 nor 0xED01 match CLOCK_TIME macro
if (((play->sceneId == SCENE_MILK_BAR) &&
- !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time < 0xED02))) ||
+ !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= (CLOCK_TIME(22, 13) + 7)))) ||
((play->sceneId != SCENE_MILK_BAR) && func_80BA397C(this, 0x2000))) {
if (this->unk2B6 != 0) {
this->text = D_80BA5044;
@@ -291,7 +290,7 @@ void func_80BA3BFC(EnToto* this, PlayState* play) {
this->unk2B4 = 0;
} else {
if (this->text->unk0 == 4) {
- func_80151BB4(play, 9);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO);
}
Animation_MorphToLoop(&this->skelAnime, &object_zm_Anim_00B3E0, -4.0f);
}
@@ -316,7 +315,7 @@ void func_80BA3D38(EnToto* this, PlayState* play) {
this->text = ENTOTO_WEEK_EVENT_FLAGS ? D_80BA50BC : D_80BA5088;
func_80BA4C0C(this, play);
play->actorCtx.flags |= ACTORCTX_FLAG_5;
- this->unk260[0] = 0;
+ this->blinkInfo.eyeTexIndex = 0;
}
void func_80BA3DBC(EnToto* this, PlayState* play) {
@@ -327,16 +326,16 @@ void func_80BA3DBC(EnToto* this, PlayState* play) {
if (!func_80BA4C44(this, play)) {
return;
}
- if (this->text->unk1 != 0 && ENTOTO_WEEK_EVENT_FLAGS) {
+ if ((this->text->unk1 != 0) && ENTOTO_WEEK_EVENT_FLAGS) {
this->unk2B7 = 1;
return;
}
} else {
player = GET_PLAYER(play);
if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) {
- func_80151BB4(play, 48);
- func_80151BB4(play, 9);
- func_80151BB4(play, 10);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN);
} else {
return;
}
@@ -370,7 +369,7 @@ s32 func_80BA3F2C(EnToto* this, PlayState* play) {
func_80BA3EE8(this, play);
}
if (this->text->unk0 == 4) {
- func_80151BB4(play, 9);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO);
}
return 0;
}
@@ -428,7 +427,7 @@ s32 func_80BA415C(EnToto* this, PlayState* play) {
} else {
func_8019F208();
}
- return (play->msgCtx.choiceIndex != 0 ? 0 : this->text->unk1) + 1; // Possible msg MACRO
+ return ((play->msgCtx.choiceIndex != 0) ? 0 : this->text->unk1) + 1;
}
return 0;
}
@@ -584,8 +583,9 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) {
this->unk2B3 += 8;
}
for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) {
- if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) {
+ if ((gSaveContext.save.playerForm != (i + 1)) && (D_80BA5128[i] & this->unk2B3)) {
Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6);
+
Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0,
PLAYER_PARAMS(0xFF, PLAYER_INITMODE_F) | 0xFFFFF000);
}
@@ -686,8 +686,8 @@ void func_80BA4CB4(EnToto* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime,
(this->cueId == 1) ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8);
if ((this->cueId == 2) && (this->unk2B3 != 0xF)) {
- func_80151BB4(play, 9);
- func_80151BB4(play, 10);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN);
}
}
}
@@ -727,8 +727,8 @@ void EnToto_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk260[0]]));
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->blinkInfo.eyeTexIndex]));
Scene_SetRenderModeXlu(play, 0, 1);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.h b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
index cf9f3c718..dc2b0947e 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
@@ -26,7 +26,7 @@ typedef struct EnToto {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[18];
/* 0x1F4 */ Vec3s morphTable[18];
- /* 0x260 */ s16 unk260[2];
+ /* 0x260 */ BlinkInfo blinkInfo;
/* 0x264 */ ColliderCylinder collider;
/* 0x2B0 */ u8 actionFuncIndex;
/* 0x2B1 */ u8 unk2B1;
diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
index e4a4a4ab8..ee9c5aaae 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
@@ -126,7 +126,7 @@ void EnTrt_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 a
s32 EnTrt_TestItemSelected(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
- if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) {
+ if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A);
}
return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
@@ -274,10 +274,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) {
s8 stickY = CONTROLLER1(&play->state)->rel.stick_y;
if (this->stickAccumX == 0) {
- if (stickX > 30 || stickX < -30) {
+ if ((stickX > 30) || (stickX < -30)) {
this->stickAccumX = stickX;
}
- } else if (stickX <= 30 && stickX >= -30) {
+ } else if ((stickX <= 30) && (stickX >= -30)) {
this->stickAccumX = 0;
} else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions
this->stickAccumX = stickX;
@@ -290,10 +290,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) {
}
}
if (this->stickAccumY == 0) {
- if (stickY > 30 || stickY < -30) {
+ if ((stickY > 30) || (stickY < -30)) {
this->stickAccumY = stickY;
}
- } else if (stickY <= 30 && stickY >= -30) {
+ } else if ((stickY <= 30) && (stickY >= -30)) {
this->stickAccumY = 0;
} else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions
this->stickAccumY = stickY;
@@ -351,10 +351,12 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
SET_WEEKEVENTREG(WEEKEVENTREG_53_08);
Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
break;
+
case 0x888:
this->textId = 0x889;
Message_StartTextbox(play, this->textId, &this->actor);
break;
+
case 0x889:
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
CutsceneManager_Stop(this->csId);
@@ -364,6 +366,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
this->actionFunc = EnTrt_PayForMushroom;
break;
+
default:
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
EnTrt_EndInteraction(play, this);
@@ -389,10 +392,14 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) {
this->textId = 0x887;
Message_ContinueTextbox(play, this->textId);
break;
+
case 0x887:
case 0x88B:
EnTrt_EndInteraction(play, this);
break;
+
+ default:
+ break;
}
}
}
@@ -504,12 +511,15 @@ s32 EnTrt_FacingShopkeeperDialogResult(EnTrt* this, PlayState* play) {
func_8019F208();
EnTrt_SetupTalkToShopkeeper(play, this);
return true;
+
case 1:
func_8019F230();
EnTrt_EndInteraction(play, this);
return true;
+
+ default:
+ return false;
}
- return false;
}
void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) {
@@ -603,7 +613,7 @@ s32 EnTrt_HasPlayerSelectedItem(PlayState* play, EnTrt* this, Input* input) {
return true;
}
if (EnTrt_TestItemSelected(play)) {
- if (item->actor.params != SI_POTION_BLUE || (this->flags & ENTRT_GIVEN_MUSHROOM)) {
+ if ((item->actor.params != SI_POTION_BLUE) || (this->flags & ENTRT_GIVEN_MUSHROOM)) {
this->prevActionFunc = this->actionFunc;
Message_ContinueTextbox(play, EnTrt_GetItemChoiceTextId(this));
play_sound(NA_SE_SY_DECIDE);
@@ -733,11 +743,15 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
case 0:
EnTrt_HandleCanBuyItem(play, this);
break;
+
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
break;
+
+ default:
+ break;
}
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
@@ -904,19 +918,25 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
this->actionFunc = EnTrt_StartRedPotionConversation;
}
break;
+
case 0x83E:
func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnTrt_FaceShopkeeper;
break;
+
case 0x850:
case 0x890:
this->actionFunc = EnTrt_SetupEndInteraction;
break;
+
case 0x88F:
this->actionFunc = EnTrt_StartRedPotionConversation;
break;
+
+ default:
+ break;
}
}
}
@@ -1015,16 +1035,20 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) {
case 0x889:
this->textId = 0x88A;
break;
+
case 0x881:
this->textId = 0x88C;
break;
+
case 0x838:
case 0x83C:
case 0x88E:
case 0x88F:
this->textId = 0x83A;
break;
+
default:
+ //! FAKE:
if (1) {}
this->textId = 0x849;
break;
@@ -1048,8 +1072,8 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
Message_StartTextbox(play, this->textId, &this->actor);
} else {
- if ((player->actor.world.pos.x >= -50.0f && player->actor.world.pos.x <= 50.0f) &&
- (player->actor.world.pos.z >= -19.0f && player->actor.world.pos.z <= 30.0f)) {
+ if ((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= 50.0f) &&
+ (player->actor.world.pos.z >= -19.0f) && (player->actor.world.pos.z <= 30.0f)) {
func_800B8614(&this->actor, play, 200.0f);
}
}
@@ -1129,6 +1153,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) {
EnTrt_SetupStartShopping(play, this, true);
func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
break;
+
case 1:
default:
func_8019F230();
@@ -1571,7 +1596,7 @@ void EnTrt_DrawCursor(PlayState* play, EnTrt* this, f32 x, f32 y, f32 z, u8 draw
OPEN_DISPS(play->state.gfxCtx);
if (drawCursor != 0) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b,
this->cursorColor.a);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP,
@@ -1632,7 +1657,7 @@ void EnTrt_DrawStickDirectionPrompt(PlayState* play, EnTrt* this) {
OPEN_DISPS(play->state.gfxCtx);
if (drawStickRightPrompt || drawStickLeftPrompt) {
- func_8012C654(play->state.gfxCtx);
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD,
@@ -1793,7 +1818,7 @@ void EnTrt_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
index 67f52e064..29560fdce 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
@@ -216,7 +216,7 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) {
this->unk_1E4 = 0;
this->unk_3D9 = 1;
this->actor.velocity.y = 0.0f;
- this->path = SubS_GetPathByIndex(play, this->path->unk1, -1);
+ this->path = SubS_GetPathByIndex(play, this->path->additionalPathIndex, PATH_INDEX_NONE);
CutsceneManager_Stop(this->csId);
this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
CutsceneManager_Queue(this->csId);
@@ -450,7 +450,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
if (this->unk_3A8 == 0x84C) {
EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER);
- this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE);
this->unk_3B2 = 18;
} else if (this->unk_3A8 == 0x88F) {
this->unk_3A8 = 0x88E;
@@ -499,9 +499,9 @@ void func_80AD434C(EnTrt2* this, PlayState* play) {
Vec3f sp5C = { 0.0f, 0.5f, 0.0f };
for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i -= 2) {
- sp68.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- sp68.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
- sp68.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ sp68.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x;
+ sp68.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z;
+ sp68.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f);
func_800B3030(play, &sp68, &sp5C, &sp5C, 100, 0, 3);
}
@@ -592,7 +592,7 @@ s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2) {
phi_f14 = points[arg + 1].z - points[arg - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
@@ -639,9 +639,9 @@ f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) {
void func_80AD4A78(EnTrt2* this, PlayState* play) {
Vec3f sp34;
- sp34.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x;
+ sp34.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x;
sp34.y = this->actor.world.pos.y;
- sp34.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z;
+ sp34.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z;
Actor_SpawnFloorDustRing(play, &this->actor, &sp34, 50.0f, 0, 2.0f, 0, 0, 0);
}
@@ -722,7 +722,7 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10;
Actor_SetObjectDependency(play, &this->actor);
Actor_SetScale(&this->actor, 0.008f);
- this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE);
this->unk_3AE = Rand_S16Offset(100, 50);
this->unk_3B0 = 10;
this->unk_3A8 = 0;
@@ -941,7 +941,7 @@ void func_80AD56E8(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8]));
diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
index f30f41d80..f9e2b4fc8 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
@@ -9,7 +9,9 @@ typedef void (*EnTrt2ActionFunc)(struct EnTrt2*, PlayState*);
typedef void (*EnTrt2UnkFunc)(struct EnTrt2*);
typedef void (*EnTrt2UnkFunc2)(struct EnTrt2*, PlayState*);
-#define ENTRT2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENTRT2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENTRT2_PATH_INDEX_NONE 0x3F
typedef struct EnTrt2 {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c
index 2ba130869..895d1d406 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c
@@ -179,7 +179,7 @@ void func_80A85788(EnTruUnkStruct* arg0, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 30; i++, arg0++) {
f32 alpha;
@@ -239,7 +239,7 @@ void func_80A85BCC(EnTruUnkStruct* arg0, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 30; i++, arg0++) {
f32 alpha;
@@ -295,7 +295,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 30; i++, arg0++) {
f32 alpha;
@@ -305,7 +305,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) {
}
if (!flag) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gSPDisplayList(POLY_XLU_DISP++, gKoumeDustMaterialDL);
flag = true;
}
@@ -494,7 +494,7 @@ s32 func_80A86B0C(EnTru* this, PlayState* play) {
s32 func_80A86BAC(EnTru* this, PlayState* play) {
if (this->unk_34E & 0x400) {
Matrix_Push();
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -524,7 +524,7 @@ s32 func_80A86BAC(EnTru* this, PlayState* play) {
if (this->unk_34E & 0x800) {
Matrix_Push();
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -692,10 +692,11 @@ s32 func_80A872AC(EnTru* this, PlayState* play) {
}
this->unk_34E &= ~(0x4000 | 0x2000);
- if ((player->exchangeItemId == 35) || (player->exchangeItemId == 36)) {
+ if ((player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_RED) ||
+ (player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_BLUE)) {
this->unk_34E |= 0x2000;
this->unk_38C = player->exchangeItemId;
- } else if (player->exchangeItemId != 0) {
+ } else if (player->exchangeItemId != PLAYER_IA_NONE) {
this->unk_34E |= 0x4000;
}
@@ -972,8 +973,8 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) {
this->actor.shape.shadowDraw = NULL;
this->unk_34E |= (0x200 | 0x8);
this->unk_34E &= ~0x800;
- if (player->exchangeItemId != 0) {
- player->exchangeItemId = 0;
+ if (player->exchangeItemId != PLAYER_IA_NONE) {
+ player->exchangeItemId = PLAYER_IA_NONE;
}
EnTru_ChangeAnim(this, KOUME_ANIM_HOVER1);
}
@@ -1138,7 +1139,8 @@ void EnTru_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
this->animIndex = -1;
EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN);
- this->path = SubS_GetDayDependentPath(play, ENTRU_GET_PATH(&this->actor), 255, &this->unk_384);
+ this->path =
+ SubS_GetDayDependentPath(play, ENTRU_GET_PATH_INDEX(&this->actor), ENTRU_PATH_INDEX_NONE, &this->unk_384);
if (this->path != NULL) {
this->unk_384 = 1;
}
@@ -1265,7 +1267,7 @@ void EnTru_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.h b/src/overlays/actors/ovl_En_Tru/z_en_tru.h
index c6d2af00c..e7c06e127 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h
@@ -9,7 +9,9 @@ struct EnTru;
typedef void (*EnTruActionFunc)(struct EnTru*, PlayState*);
typedef s32 (*EnTruUnkFunc)(Actor*, PlayState*);
-#define ENTRU_GET_PATH(thisx) ((thisx)->params & 0xFF)
+#define ENTRU_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
+
+#define ENTRU_PATH_INDEX_NONE 0xFF
typedef struct {
/* 0x00 */ u8 unk_00;
diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c
index 09ec80172..f877a26a8 100644
--- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c
+++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c
@@ -301,7 +301,7 @@ s32 func_80B76600(EnTruMt* this, Path* path, s32 arg2) {
phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z;
}
- func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
sp50 = true;
}
@@ -431,7 +431,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) {
this->collider.dim.worldSphere.radius = 22;
this->actor.colChkInfo.damageTable = &sDamageTable;
- this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), ENTRUMT_PATH_INDEX_NONE);
this->actor.targetMode = 0;
Actor_SetScale(&this->actor, 0.008f);
@@ -439,7 +439,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) {
this->unk_328 = 0;
this->actor.room = -1;
- this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), ENTRUMT_PATH_INDEX_NONE);
EnTruMt_ChangeAnim(&this->skelAnime, KOUME_MT_ANIM_FLY);
this->actionFunc = func_80B76A64;
}
@@ -527,7 +527,7 @@ void EnTruMt_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
}
if (limbIndex == KOUME_LIMB_BROOM) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -583,7 +583,7 @@ void EnTruMt_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex]));
diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h
index b114804d7..d25d54a24 100644
--- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h
+++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h
@@ -11,6 +11,8 @@ typedef void (*EnTruMtActionFunc)(struct EnTruMt*, PlayState*);
#define ENTRUMT_GET_FF(thisx) ((thisx)->params & 0xFF)
#define ENTRUMT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENTRUMT_PATH_INDEX_NONE 0x3F
+
typedef struct EnTruMt {
/* 0x000 */ Actor actor;
/* 0x144 */ EnTruMtActionFunc actionFunc;
diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c
index 22ce0600c..a404ac817 100644
--- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c
+++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c
@@ -420,7 +420,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x1075:
case 0x1078:
- player->exchangeItemId = 0;
+ player->exchangeItemId = PLAYER_IA_NONE;
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
break;
@@ -448,7 +448,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
break;
case 0x107B:
- player->exchangeItemId = 0;
+ player->exchangeItemId = PLAYER_IA_NONE;
Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
break;
@@ -627,7 +627,7 @@ void EnTsn_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E]));
diff --git a/src/overlays/actors/ovl_En_Twig/z_en_twig.c b/src/overlays/actors/ovl_En_Twig/z_en_twig.c
index b756d0f92..a86359610 100644
--- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c
+++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c
@@ -4,7 +4,6 @@
* Description: Beaver Race Ring
*/
-#include "prevent_bss_reordering.h"
#include "z_en_twig.h"
#include "objects/object_twig/object_twig.h"
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
index 34551dac9..551d7d774 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -47,18 +47,18 @@ void EnViewer_Init(Actor* thisx, PlayState* play) {
this->unk_154 = D_8089F3E0;
D_8089F3E0++;
switch (ENVIEWER_GET_3(&this->actor)) {
- case ENVIEWER_PARAMS_0:
+ case ENVIEWER_PARAM_0:
this->unk_148 = ENVIEWER_GET_8000(&this->actor) * 40.0f;
this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
EnViewer_SetupAction(this, func_8089F17C);
break;
- case ENVIEWER_PARAMS_1:
+ case ENVIEWER_PARAM_1:
this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f;
this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
this->unk_14C = (u16)(this->actor.world.rot.y) * 40.0f;
EnViewer_SetupAction(this, func_8089F218);
break;
- case ENVIEWER_PARAMS_2:
+ case ENVIEWER_PARAM_2:
this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f;
this->unk_14C = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
EnViewer_SetupAction(this, func_8089F2C4);
@@ -78,8 +78,8 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) {
}
play->envCtx.lightSettingOverride = 0;
play->envCtx.unk_E0 = 2;
- play->envCtx.unk_C1 = this->actor.world.rot.x;
- play->envCtx.unk_C2 = this->actor.world.rot.z;
+ play->envCtx.lightSetting = this->actor.world.rot.x;
+ play->envCtx.prevLightSetting = this->actor.world.rot.z;
play->envCtx.lightBlend = arg2;
}
@@ -94,7 +94,7 @@ void func_8089F0A0(EnViewer* this, PlayState* play) {
func_800FAAB4(
play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId));
play->envCtx.lightBlend = 1.0f;
- play->envCtx.unk_C2 = play->envCtx.unk_C1;
+ play->envCtx.prevLightSetting = play->envCtx.lightSetting;
}
}
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
index 1532e7c70..c4d2114bf 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
@@ -22,9 +22,9 @@ typedef struct EnViewer {
} EnViewer; // size = 0x158
typedef enum {
- /* 0x0 */ ENVIEWER_PARAMS_0,
- /* 0x1 */ ENVIEWER_PARAMS_1,
- /* 0x2 */ ENVIEWER_PARAMS_2
-} EnViewerParams;
+ /* 0x0 */ ENVIEWER_PARAM_0,
+ /* 0x1 */ ENVIEWER_PARAM_1,
+ /* 0x2 */ ENVIEWER_PARAM_2
+} EnViewerParam;
#endif // Z_EN_VIEWER_H
diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
index 505df7f11..2f68391b1 100644
--- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c
+++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
@@ -391,8 +391,9 @@ void func_808CCCF0(EnVm* this, PlayState* play) {
this->unk_214--;
if (this->unk_214 == 1) {
- EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x,
- this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x6FF, 0);
+ EnBom* bomb =
+ (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x6FF, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
@@ -513,7 +514,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]);
POLY_OPA_DISP = &gfx[1];
@@ -523,7 +524,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) {
if (this->unk_210 == 2) {
gfx = POLY_XLU_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 60]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_60]);
gDPSetColorDither(&gfx[1], G_CD_DISABLE);
Matrix_Translate(this->unk_234.x, this->unk_234.y + 10.0f, this->unk_234.z, MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
index a4b3f7cc6..c8ef2638e 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
@@ -650,7 +650,7 @@ void EnWallmas_Update(Actor* thisx, PlayState* play) {
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f;
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f);
- } else if (Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f) == 0) {
+ } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) {
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
}
@@ -668,7 +668,7 @@ void EnWallmas_DrawShadow(EnWallmas* this, PlayState* play) {
gfx = POLY_OPA_DISP;
- gSPDisplayList(&gfx[0], &sSetupDL[6 * 44]);
+ gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_44]);
gDPSetPrimColor(&gfx[1], 0, 0, 0, 0, 0, 255);
func_800C0094(this->actor.floorPoly, this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z,
&mf);
@@ -742,7 +742,7 @@ void EnWallmas_Draw(Actor* thisx, PlayState* play) {
EnWallmas* this = THIS;
if (this->actionFunc != EnWallmas_WaitToDrop) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnWallmas_OverrideLimbDraw, EnWallmas_PostLimbDraw, &this->actor);
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h
index 93dd63245..4d1466b95 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h
@@ -27,9 +27,9 @@
* the timer to 130 frames if the player strays too far from the Wallmaster's current position.
*/
typedef enum {
- /* 0x0 */ WALLMASTER_TYPE_TIMER_ONLY,
- /* 0x1 */ WALLMASTER_TYPE_PROXIMITY,
- /* 0x2 */ WALLMASTER_TYPE_FLAG
+ /* 0 */ WALLMASTER_TYPE_TIMER_ONLY,
+ /* 1 */ WALLMASTER_TYPE_PROXIMITY,
+ /* 2 */ WALLMASTER_TYPE_FLAG
} WallmasterType;
struct EnWallmas;
diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
index 6d5522e8a..dd1fa60e1 100644
--- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
+++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
@@ -149,8 +149,8 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
u8 playerForm;
s16 playerParams;
- if (play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0 &&
- CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]) {
+ if ((play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0) &&
+ (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) {
if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) {
CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]);
@@ -208,8 +208,8 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
// why are we getting player home rotation from the room data? doesnt player have home.rot.y?
// especially because we are converting from deg to binang, but isnt home.rot.y already in binang??
- Play_SetRespawnData(&play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room,
- playerParams, &newRespawnPos,
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, entrance,
+ play->setupEntranceList[playerSpawnIndex].room, playerParams, &newRespawnPos,
DEG_TO_BINANG_ALT((playerActorEntry->rot.y >> 7) & 0x1FF));
func_80169EFC(&play->state);
@@ -245,7 +245,6 @@ void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
func_8019F128(NA_SE_OC_SECRET_HOLE_OUT);
func_801A4058(5);
- if (1) {}
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
@@ -262,7 +261,7 @@ void EnWarptag_Update(Actor* thisx, PlayState* play) {
void EnWarpTag_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWarpTagRainbowTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c
index 159b7444e..c8ec8f8c4 100644
--- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c
+++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c
@@ -159,9 +159,9 @@ void EnWaterEffect_Update(Actor* thisx, PlayState* play2) {
if ((this->unk_DC4 % 32) == 0) {
if (Rand_ZeroOne() < 0.5f) {
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4);
- sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x;
+ sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x;
sp88.y = this->actor.world.pos.y;
- sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z;
+ sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z;
if ((this->actor.world.pos.y + this->actor.depthInWater) <= this->actor.floorHeight) {
phi_v1 = 0;
} else {
@@ -289,12 +289,12 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) {
if ((ptr->unk_00 == 1) || (ptr->unk_00 == 2)) {
if (!phi_s4) {
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex));
gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260);
@@ -326,7 +326,7 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) {
for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) {
if (ptr->unk_00 == 3) {
if (!phi_s4) {
- func_8012C448(gfxCtx);
+ Gfx_SetupDL44_Xlu(gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex));
gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0);
@@ -367,9 +367,9 @@ void func_80A599E8(EnWaterEffect* this, Vec3f* arg1, u8 arg2) {
if (arg2 >= 2) {
if (arg2 == 2) {
- ptr->unk_10.x = randPlusMinusPoint5Scaled(10.0f);
+ ptr->unk_10.x = Rand_CenteredFloat(10.0f);
ptr->unk_10.y = Rand_ZeroFloat(3.0f) + 5.0f;
- ptr->unk_10.z = randPlusMinusPoint5Scaled(10.0f);
+ ptr->unk_10.z = Rand_CenteredFloat(10.0f);
}
ptr->unk_2C.z = 0.0017f;
ptr->unk_2C.x = 0.003f;
@@ -421,9 +421,9 @@ void func_80A59C04(Actor* thisx, PlayState* play2) {
if (this->unk_DC6 == 0) {
this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f;
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4);
- sp74.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x;
+ sp74.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x;
sp74.y = this->actor.world.pos.y;
- sp74.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z;
+ sp74.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z;
func_80A599E8(this, &sp74, 0);
}
}
@@ -524,8 +524,8 @@ void func_80A5A184(Actor* thisx, PlayState* play2) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->unk_144); i++, ptr++) {
if (ptr->unk_00 == 4) {
@@ -623,7 +623,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 165, 235, 255, 128);
@@ -634,7 +634,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) ||
(this->actor.params == ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY)) {
if (this->unk_E2C > 1.0f) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000DE0));
Matrix_Scale(this->unk_DC8[1].y, this->unk_DC8[1].z, this->unk_DC8[1].y, MTXMODE_APPLY);
@@ -646,7 +646,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
Matrix_Pop();
if (this->unk_E30 > 1.0f) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E0C));
Matrix_Scale(this->unk_DC8[2].y, this->unk_DC8[2].z, this->unk_DC8[2].y, MTXMODE_APPLY);
@@ -661,7 +661,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
}
if ((this->unk_E34 > 1.0f) && (this->actor.params != ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E40));
Matrix_Scale(this->unk_DC8[3].y, this->unk_DC8[3].z, this->unk_DC8[3].y, MTXMODE_APPLY);
@@ -674,7 +674,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) ||
(this->actor.params == ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E58));
Matrix_Scale(this->unk_DC8[4].y, this->unk_DC8[4].z, this->unk_DC8[4].y, MTXMODE_APPLY);
@@ -684,12 +684,12 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) {
}
if (this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) {
if (ptr->unk_00 == 3) {
if (!phi_s4) {
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex));
gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0);
diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h
index 433ebac62..f4b9d7284 100644
--- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h
+++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h
@@ -24,7 +24,7 @@ typedef enum {
/* 0x309 */ ENWATEREFFECT_TYPE_GYORG_RIPPLES = 0x309, // Ripples on the surface when Gyrog enters/leaves the water
/* 0x30A */ ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY, // Large "funnel" of water that forms when Gyorg enters/leaves the water
/* 0x30B */ ENWATEREFFECT_TYPE_GYORG_SECONDARY_SPRAY, // Secondary "funnel" in the middle of the larger "funnel"
- /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE, // Shockwave on the surface when Gyorg rams into the central platform
+ /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE // Shockwave on the surface when Gyorg rams into the central platform
} EnWaterEffectType;
typedef struct EnWaterEffect {
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
index fb00fdae3..84f621915 100644
--- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
+++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
@@ -76,32 +76,35 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
this->unk158 = this->actor.world.rot.y;
EnWeatherTag_SetupAction(this, func_80966A08);
break;
+
case WEATHERTAG_TYPE_UNK1:
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
Actor_Kill(&this->actor);
}
EnWeatherTag_SetupAction(this, func_80966B08);
break;
+
case WEATHERTAG_TYPE_WINTERFOG:
EnWeatherTag_SetupAction(this, func_80966E0C);
break;
- case WEATHERTAG_TYPE_UNK3:
- //! FAKE: this can move to different locations and still match
- if (1) {}
+ case WEATHERTAG_TYPE_UNK3:
EnWeatherTag_SetupAction(this, func_80966EF0);
break;
+
case WEATHERTAG_TYPE_UNK4:
EnWeatherTag_SetupAction(this, func_80966FEC);
break;
+
case WEATHERTAG_TYPE_UNK5:
func_800BC154(play, &play->actorCtx, &this->actor, 7);
play->skyboxId = SKYBOX_3;
- play->envCtx.unk_1F = 5;
- play->envCtx.unk_20 = 5;
+ play->envCtx.lightConfig = 5;
+ play->envCtx.changeLightNextConfig = 5;
D_801F4E74 = 1.0f;
EnWeatherTag_SetupAction(this, func_80966BF4);
break;
+
case WEATHERTAG_TYPE_WATERMURK:
pathID = WEATHER_TAG_PATHID(&this->actor);
path = &play->setupPathList[pathID];
@@ -109,32 +112,38 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
this->pathCount = path->count;
EnWeatherTag_SetupAction(this, func_809672DC);
break;
+
case WEATHERTAG_TYPE_LOCALDAY2RAIN:
EnWeatherTag_SetupAction(this, func_809674C8);
+ break;
+
+ default:
+ break;
}
}
// matches but unused params is suspicious
// called WeatherTag_CheckEnableWeatherEffect in OOT, that's where "weatherMode" came from
-u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24,
- u8 weatherMode) {
+u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig,
+ u8 changeLightNextConfig, u16 changeDuration, u8 weatherMode) {
Player* player = GET_PLAYER(play);
u8 returnVal = 0;
if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
- if (play->envCtx.unk_1F == play->envCtx.unk_20) {
+ if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) {
D_801BDBB8 = 1;
- if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) {
+ if (!(play->envCtx.lightMode == 0) ||
+ ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) {
D_801BDBB8 = 0;
if (gWeatherMode != weatherMode) {
gWeatherMode = weatherMode;
- play->envCtx.unk_21 = 1;
- play->envCtx.unk_1F = new1F;
- play->envCtx.unk_20 = new20;
- D_801BDBB4 = new20;
- play->envCtx.unk_24 = new24;
- play->envCtx.unk_22 = play->envCtx.unk_24;
+ play->envCtx.changeLightEnabled = true;
+ play->envCtx.lightConfig = lightConfig;
+ play->envCtx.changeLightNextConfig = changeLightNextConfig;
+ D_801BDBB4 = changeLightNextConfig;
+ play->envCtx.changeDuration = changeDuration;
+ play->envCtx.changeLightTimer = play->envCtx.changeDuration;
}
returnVal = 1;
}
@@ -145,23 +154,25 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4,
// again with the unused parameters
// called WeatherTag_CheckRestoreWeather in OOT
-u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24) {
+u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig,
+ u8 changeLightNextConfig, u16 changeDuration) {
Player* player = GET_PLAYER(play);
u8 returnVal = 0;
if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
- if (play->envCtx.unk_1F == play->envCtx.unk_20) {
+ if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) {
D_801BDBB8 = 1;
- if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) {
+ if (!(play->envCtx.lightMode == 0) ||
+ ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) {
D_801BDBB8 = 0;
gWeatherMode = 0;
- play->envCtx.unk_21 = 1;
- play->envCtx.unk_1F = new1F;
- play->envCtx.unk_20 = new20;
- D_801BDBB4 = new20;
- play->envCtx.unk_24 = new24;
- play->envCtx.unk_22 = play->envCtx.unk_24;
+ play->envCtx.changeLightEnabled = true;
+ play->envCtx.lightConfig = lightConfig;
+ play->envCtx.changeLightNextConfig = changeLightNextConfig;
+ D_801BDBB4 = changeLightNextConfig;
+ play->envCtx.changeDuration = changeDuration;
+ play->envCtx.changeLightTimer = play->envCtx.changeDuration;
returnVal = 1;
}
}
@@ -232,7 +243,7 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) {
// poisoned swamp: placed behind the water fall from ikana
// this tag stops spawning after STT cleared?
void func_80966B08(EnWeatherTag* this, PlayState* play) {
- if (func_80966608(this, play, 0, 0, play->envCtx.unk_1F, 5, 100, 2) || (gWeatherMode == 2)) {
+ if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) {
play->skyboxId = SKYBOX_3;
EnWeatherTag_SetupAction(this, func_80966D20);
} else if (D_801F4E74 <= 0.01f) {
@@ -245,7 +256,7 @@ void func_80966B08(EnWeatherTag* this, PlayState* play) {
// WEATHERTAG_TYPE_UNK5: only one in ikana canyon, corner of cliff right outside of stone tower entrance
// because it uses cutsecnes.. is this the clear ikana cutcsene?
void func_80966BF4(EnWeatherTag* this, PlayState* play) {
- u8 newUnk20;
+ u8 changeLightNextConfig;
CsCmdActorCue* cue;
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_567)) {
@@ -255,23 +266,25 @@ void func_80966BF4(EnWeatherTag* this, PlayState* play) {
case 0:
case 1:
default:
- newUnk20 = 0;
+ changeLightNextConfig = 0;
break;
+
case 2:
- newUnk20 = 3;
+ changeLightNextConfig = 3;
break;
+
case 3:
- newUnk20 = 4;
+ changeLightNextConfig = 4;
break;
}
Math_SmoothStepToF(&D_801F4E74, 0.0f, 0.2f, 0.02f, 0.001f);
- if (play->envCtx.unk_20 != newUnk20) {
- play->envCtx.unk_21 = 1;
- play->envCtx.unk_20 = newUnk20;
- play->envCtx.unk_24 = 100;
- play->envCtx.unk_22 = play->envCtx.unk_24;
+ if (play->envCtx.changeLightNextConfig != changeLightNextConfig) {
+ play->envCtx.changeLightEnabled = true;
+ play->envCtx.changeLightNextConfig = changeLightNextConfig;
+ play->envCtx.changeDuration = 100;
+ play->envCtx.changeLightTimer = play->envCtx.changeDuration;
}
}
}
@@ -287,9 +300,11 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) {
default:
newUnk20 = 0;
break;
+
case 2:
newUnk20 = 3;
break;
+
case 3:
newUnk20 = 4;
break;
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h
index b1e7f8f86..5313aacfd 100644
--- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h
+++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h
@@ -32,7 +32,7 @@ typedef enum {
/* 4 */ WEATHERTAG_TYPE_UNK4,
/* 5 */ WEATHERTAG_TYPE_UNK5,
/* 6 */ WEATHERTAG_TYPE_WATERMURK,
- /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN,
+ /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN
} WeatherTagType;
#endif // Z_EN_WEATHER_TAG_H
diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
index 44a50e99d..26301730f 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -489,9 +489,9 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) {
}
for (i = 0; i < arg2; i++) {
- sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x;
+ sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x;
sp88.y = Rand_ZeroFloat(5.0f) + this->actor.world.pos.y;
- sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z;
+ sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z;
func_800B0F18(play, &sp88, &gZeroVec3f, &D_809942DC, phi_s1, phi_s1, phi_s6, 5,
Rand_ZeroFloat(5.0f) + 14.0f);
}
@@ -616,7 +616,8 @@ void func_80991280(EnWf* this, PlayState* play) {
if (!func_8099408C(play, this) && !func_80990948(play, this, 0)) {
phi_v1 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y));
- if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != 0) && (phi_v1 >= 0x1F40)) {
+ if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
+ (phi_v1 >= 0x1F40)) {
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
func_80991948(this);
@@ -666,7 +667,8 @@ void func_8099149C(EnWf* this, PlayState* play) {
sp28 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y));
- if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && (player->meleeWeaponState != 0) && (sp28 >= 0x1F40)) {
+ if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) &&
+ (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (sp28 >= 0x1F40)) {
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
if (Rand_ZeroOne() > 0.7f) {
@@ -1197,9 +1199,9 @@ void func_80992E0C(EnWf* this, PlayState* play) {
this->unk_2A0--;
for (i = (25 - this->unk_2A0) >> 1; i >= 0; i--) {
- sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
- sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x;
+ sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z;
+ sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f);
func_800B3030(play, &sp60, &D_809942F0, &D_809942F0, 100, 0, 2);
}
@@ -1573,7 +1575,7 @@ void EnWf_Draw(Actor* thisx, PlayState* play) {
if (this->actionFunc != func_80990F50) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->actor.params == 0) {
gSPSegment(POLY_OPA_DISP++, 0x08, sNormalEyeTextures[this->eyeIndex]);
diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
index 209218163..208422b2f 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
@@ -50,7 +50,7 @@ typedef enum {
/* 6 */ EN_WIZ_ACTION_BURST_INTO_FLAMES,
/* 7 */ EN_WIZ_ACTION_RUN_IN_CIRCLES,
/* 8 */ EN_WIZ_ACTION_ATTACK,
- /* 9 */ EN_WIZ_ACTION_DANCE,
+ /* 9 */ EN_WIZ_ACTION_DANCE
} EnWizAction;
typedef enum {
@@ -68,7 +68,7 @@ typedef enum {
/* 0 */ EN_WIZ_FIGHT_STATE_FIRST_PHASE,
/* 1 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_CUTSCENE,
/* 2 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE,
- /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND,
+ /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND
} EnWizFightState;
typedef enum {
@@ -77,7 +77,7 @@ typedef enum {
/* 2 */ EN_WIZ_ANIM_DANCE,
/* 3 */ EN_WIZ_ANIM_WIND_UP,
/* 4 */ EN_WIZ_ANIM_ATTACK,
- /* 5 */ EN_WIZ_ANIM_DAMAGE,
+ /* 5 */ EN_WIZ_ANIM_DAMAGE
} EnWizAnimation;
ActorInit En_Wiz_InitVars = {
@@ -239,12 +239,12 @@ static ColliderCylinderInit sCylinderInit = {
};
typedef enum {
- /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage
- /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts.
- /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire
- /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice
- /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs
- /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF, // Deals regular damage and has no special effect
+ /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage
+ /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts.
+ /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire
+ /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice
+ /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs
+ /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF // Deals regular damage and has no special effect
} EnWizDamageEffect;
static DamageTable sFireWizrobeDamageTable = {
@@ -824,7 +824,7 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) {
}
}
- if ((this->animLoopCounter >= 3) && (!this->hasActiveProjectile)) {
+ if ((this->animLoopCounter >= 3) && !this->hasActiveProjectile) {
this->targetPlatformLightAlpha = 0;
EnWiz_SetupWindUp(this);
}
@@ -962,7 +962,7 @@ void EnWiz_Attack(EnWiz* this, PlayState* play) {
}
if (this->timer == 0) {
- if ((Animation_OnFrame(&this->skelAnime, 6.0f)) && (!this->hasActiveProjectile)) {
+ if (Animation_OnFrame(&this->skelAnime, 6.0f) && !this->hasActiveProjectile) {
Player* player = GET_PLAYER(play);
Vec3f pos;
s32 type = this->type;
@@ -1285,8 +1285,8 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) {
//! colliders are effectively disabled, this doesn't cause any problems in the final
//! game, but it becomes an issue if the ghost colliders are enabled.
this->fightState = EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE;
- this->ghostColliders.base.acFlags &= ~BUMP_HIT;
- if (this->ghostPos[i].x != .0f || this->ghostPos[i].z != .0f) {
+ this->ghostColliders.base.acFlags &= ~AC_HIT;
+ if ((this->ghostPos[i].x != .0f) || (this->ghostPos[i].z != .0f)) {
for (j = 0; j < 9; j++) {
accel.x = 0.0f;
accel.y = 1.0f;
@@ -1297,7 +1297,7 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) {
scaleStep = Rand_S16Offset(20, 10);
Math_Vec3f_Copy(&pos, &this->ghostPos[i]);
pos.x += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1);
- pos.y += 70.0f + randPlusMinusPoint5Scaled(30.0f);
+ pos.y += 70.0f + Rand_CenteredFloat(30.0f);
pos.z += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1);
func_800B0DE0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvTimer,
Rand_S16Offset(350, 100), scaleStep);
@@ -1419,9 +1419,9 @@ void EnWiz_PostLimbDrawXlu(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_MultVec3f(&staffFlamePos, &flamePos);
- flamePos.x += randPlusMinusPoint5Scaled(4.0f);
- flamePos.y += randPlusMinusPoint5Scaled(7.0f);
- flamePos.z += randPlusMinusPoint5Scaled(5.0f);
+ flamePos.x += Rand_CenteredFloat(4.0f);
+ flamePos.y += Rand_CenteredFloat(7.0f);
+ flamePos.z += Rand_CenteredFloat(5.0f);
func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, ((Rand_ZeroFloat(1.0f) * 50.0f) + 70.0f), 10, 1);
SoundSource_PlaySfxAtFixedWorldPos(play, &flamePos, 10, NA_SE_EN_EXTINCT);
}
@@ -1451,8 +1451,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if ((this->action == EN_WIZ_ACTION_BURST_INTO_FLAMES) || (this->alpha != 255)) {
Scene_SetRenderModeXlu(play, 1, 2);
@@ -1502,8 +1502,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) {
}
for (i = 0; i < platformCount; i++) {
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if ((this->ghostPos[i].x != 0.0f) && (this->ghostPos[i].z != 0.0f)) {
Matrix_Translate(this->ghostPos[i].x, this->ghostPos[i].y + 10.0f, this->ghostPos[i].z, MTXMODE_NEW);
@@ -1529,8 +1529,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) {
Matrix_Pop();
}
- func_8012C2DC(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
// Draw the light emanating from the Wizrobe's platform
if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) {
diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
index 4d35a0f68..70f7a6c64 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
@@ -10,7 +10,7 @@
typedef enum {
/* 0 */ EN_WIZ_TYPE_FIRE,
/* 1 */ EN_WIZ_TYPE_ICE,
- /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM, // does not request the mini-boss BGM
+ /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM // does not request the mini-boss BGM
} EnWizType;
struct EnWiz;
diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c
index 4a3689005..ac6ae3152 100644
--- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c
+++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c
@@ -96,8 +96,8 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnWizBrock* this = THIS;
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
@@ -121,6 +121,7 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) {
if (this->platformType != EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE) {
OPEN_DISPS(play->state.gfxCtx);
+
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformCenterTexAnim));
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255);
diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h
index 3df0362ed..651aac8ea 100644
--- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h
+++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h
@@ -7,7 +7,7 @@ typedef enum {
/* 0 */ EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE,
/* 1 */ EN_WIZ_BROCK_PLATFORM_TYPE_FIRE,
/* 2 */ EN_WIZ_BROCK_PLATFORM_TYPE_ICE,
- /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX,
+ /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX
} EnWizBrockPlatformType;
struct EnWizBrock;
diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
index bad93b685..12d06e487 100644
--- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
+++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
@@ -32,7 +32,7 @@ typedef enum {
/* 0 */ EN_WIZ_FIRE_ACTION_MOVE_MAGIC_PROJECTILE,
/* 1 */ EN_WIZ_FIRE_ACTION_SMALL_FLAME,
/* 2 */ EN_WIZ_FIRE_ACTION_POOL,
- /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE,
+ /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE
} EnWizFireAction;
static s32 sPoolHitByIceArrow = false;
@@ -152,7 +152,7 @@ void EnWiz_SetupMoveMagicProjectile(EnWizFire* this, PlayState* play) {
Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY);
if (this->type != EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) {
- velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f;
+ velocity.z = Rand_CenteredFloat(2.0f) + 8.0f;
} else {
velocity.z = 12.0f;
}
@@ -223,8 +223,8 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
this->increaseLowestUsedIndexTimer = 10;
Matrix_Push();
- Matrix_RotateYS((s16)randPlusMinusPoint5Scaled(0x100) + this->actor.world.rot.y, MTXMODE_NEW);
- velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f;
+ Matrix_RotateYS((s16)(s32)Rand_CenteredFloat(0x100) + this->actor.world.rot.y, MTXMODE_NEW);
+ velocity.z = Rand_CenteredFloat(2.0f) + 8.0f;
Matrix_MultVec3f(&velocity, &this->actor.velocity);
Matrix_Pop();
@@ -257,7 +257,7 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WIZ_FIRE, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, arcingProjectileRotY, 0,
EN_WIZ_FIRE_TYPE_ARCING_MAGIC_PROJECTILE);
- arcingProjectileRotY += BINANG_ADD((s32)randPlusMinusPoint5Scaled(0x1000), 0x3333);
+ arcingProjectileRotY += BINANG_ADD((s32)Rand_CenteredFloat(0x1000), 0x10000 / 5);
}
Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
@@ -313,9 +313,9 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
void EnWiz_SetupSmallFlame(EnWizFire* this, PlayState* play) {
this->targetScale = 0.02f;
this->timer = Rand_S16Offset(50, 50);
- this->scaleMod.x = randPlusMinusPoint5Scaled(1.0f) * 0.007f;
- this->scaleMod.y = randPlusMinusPoint5Scaled(1.0f) * 0.005f;
- this->scaleMod.z = randPlusMinusPoint5Scaled(1.0f) * 0.007f;
+ this->scaleMod.x = Rand_CenteredFloat(1.0f) * 0.007f;
+ this->scaleMod.y = Rand_CenteredFloat(1.0f) * 0.005f;
+ this->scaleMod.z = Rand_CenteredFloat(1.0f) * 0.007f;
this->actionFunc = EnWiz_SmallFlame;
}
@@ -379,13 +379,13 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) {
Vec3f accel = { 0.0f, 0.0f, 0.0f };
Vec3f pos;
- accel.x = randPlusMinusPoint5Scaled(3.0f) / 10.0f;
+ accel.x = Rand_CenteredFloat(3.0f) / 10.0f;
accel.y = 0.23f;
- accel.z = randPlusMinusPoint5Scaled(3.0f) / 10.0f;
+ accel.z = Rand_CenteredFloat(3.0f) / 10.0f;
Math_Vec3f_Copy(&pos, &this->actor.world.pos);
- pos.x += randPlusMinusPoint5Scaled(150.0f);
- pos.z += randPlusMinusPoint5Scaled(150.0f);
+ pos.x += Rand_CenteredFloat(150.0f);
+ pos.z += Rand_CenteredFloat(150.0f);
Math_ApproachF(&this->poolScale, 0.022f, 0.3f, 0.01f);
this->collider.dim.radius = this->poolScale * 4300.0f;
@@ -573,7 +573,7 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
DECR(this->steamSpawnTimer);
DECR(this->poolTimer);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10,
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10.0f,
UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
UPDBGCHECKINFO_FLAG_10);
@@ -658,8 +658,8 @@ void EnWizFire_DrawIcePool(EnWizFire* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) {
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW);
Matrix_Scale(this->poolScale, this->poolScale, this->poolScale, MTXMODE_APPLY);
@@ -691,8 +691,8 @@ void EnWizFire_DrawFirePoolAndFlame(EnWizFire* this, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) {
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Push();
Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW);
@@ -754,8 +754,8 @@ void EnWizFire_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Push();
for (i = ARRAY_COUNT(this->magicProjectilePos) - 1; i >= this->lowestUsedIndex; i--) {
@@ -875,8 +875,8 @@ void EnWizFire_DrawEffects(EnWizFire* this, PlayState* play) {
OPEN_DISPS(gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
materialFlag = false;
for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
index 3c0357999..cf4331ffa 100644
--- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
+++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
@@ -264,8 +264,8 @@ void EnWood02_Init(Actor* thisx, PlayState* play) {
case WOOD_LEAF_YELLOW:
this->unk_14A[0] = 75;
actorScale = 0.02f;
- this->actor.velocity.x = randPlusMinusPoint5Scaled(6.0f);
- this->actor.velocity.z = randPlusMinusPoint5Scaled(6.0f);
+ this->actor.velocity.x = Rand_CenteredFloat(6.0f);
+ this->actor.velocity.z = Rand_CenteredFloat(6.0f);
this->actor.velocity.y = (Rand_ZeroOne() * 1.25f) + -3.1f;
break;
}
@@ -409,7 +409,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
for (i = 3; i >= 0; i--) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WOOD02, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z,
- 0, randPlusMinusPoint5Scaled(0xFFFF), 0, leavesParams);
+ 0, Rand_CenteredFloat(0xFFFF), 0, leavesParams);
}
}
@@ -486,10 +486,10 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) {
red = green = blue = 255;
}
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
if ((thisx->params == WOOD_LEAF_GREEN) || (thisx->params == WOOD_LEAF_YELLOW)) {
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, red, green, blue, 127);
@@ -501,7 +501,7 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_808C4D70[this->drawType & 0xF]);
} else {
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_808C4D54[this->drawType & 0xF]);
diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c
index c5224f8e8..94d64903a 100644
--- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c
+++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c
@@ -136,9 +136,9 @@ void EnYb_Destroy(Actor* thisx, PlayState* play) {
void func_80BFA2FC(PlayState* play) {
if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) {
- func_80151BB4(play, 0x34);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK);
}
- func_80151BB4(play, 0xF);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO);
}
/**
@@ -170,35 +170,37 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) {
}
void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames) {
- if (animIndex >= 0 && animIndex < 3) {
- if ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP)) {
- if (animIndex > 0) {
- if (animMode == ANIMMODE_LOOP) {
- PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f,
- Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP,
- morphFrames);
- } else {
- // unused case, (only called once with animMode = ANIMMODE_LOOP)
- PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f,
- Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP,
- morphFrames);
- }
- } else {
- // unused case, (only called once with animIndex = 2)
- AnimationHeader* animationPtr = gYbUnusedAnimations[animIndex];
+ s32 pad;
- if (1) {}
-
- Animation_Change(&this->skelAnime, gYbUnusedAnimations[animIndex], 1.0f, 0.0f,
- Animation_GetLastFrame(animationPtr), animMode, morphFrames);
- }
- this->animIndex = animIndex;
- }
+ if ((animIndex < 0) || (animIndex > 2)) {
+ return;
}
+
+ if ((animIndex == this->animIndex) && (animMode == ANIMMODE_LOOP)) {
+ return;
+ }
+
+ if (animIndex > 0) {
+ if (animMode == ANIMMODE_LOOP) {
+ PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f,
+ Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP,
+ morphFrames);
+ } else {
+ // unused case, (only called once with animMode = ANIMMODE_LOOP)
+ PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f,
+ Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP,
+ morphFrames);
+ }
+ } else {
+ // unused case, (only called once with animIndex = 2)
+ Animation_Change(&this->skelAnime, gYbUnusedAnimations[animIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(gYbUnusedAnimations[animIndex]), animMode, morphFrames);
+ }
+ this->animIndex = animIndex;
}
s32 EnYb_CanTalk(EnYb* this, PlayState* play) {
- if (this->actor.xzDistToPlayer < 100.0f && Player_IsFacingActor(&this->actor, 0x3000, play) &&
+ if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
Actor_IsFacingPlayer(&this->actor, 0x3000)) {
return true;
} else {
@@ -242,9 +244,9 @@ void EnYb_Disappear(EnYb* this, PlayState* play) {
EnYb_UpdateAnimation(this, play);
for (i = 3; i >= 0; i--) {
- sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
- sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x;
+ sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z;
+ sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f);
func_800B3030(play, &sp60, &D_80BFB2E8, &D_80BFB2E8, 100, 0, 2);
}
@@ -296,6 +298,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) {
this->actionFunc = EnYb_Disappear;
SET_WEEKEVENTREG(WEEKEVENTREG_82_04);
break;
+
case 0x147C: // Spread my dance across the world
if (Player_GetMask(play) == PLAYER_MASK_KAMARO) {
Message_CloseTextbox(play);
@@ -311,6 +314,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) {
EnYb_ReceiveMask(this, play);
}
break;
+
default:
Message_CloseTextbox(play);
this->actionFunc = EnYb_Idle;
@@ -353,9 +357,9 @@ void EnYb_Idle(EnYb* this, PlayState* play) {
Player* player = GET_PLAYER(play);
EnYb_UpdateAnimation(this, play);
- if (this->actor.xzDistToPlayer < 180.0f && fabsf(this->actor.playerHeightRel) < 50.0f &&
- play->msgCtx.ocarinaMode == 3 && play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING &&
- gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
+ if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) &&
+ (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) &&
+ (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
this->actionFunc = EnYb_TeachingDance;
this->teachingCutsceneTimer = 200;
EnYb_ChangeCutscene(this, 0);
@@ -377,8 +381,8 @@ void EnYb_Idle(EnYb* this, PlayState* play) {
if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
this->playerOcarinaOut &= ~1;
}
- } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && this->actor.xzDistToPlayer < 180.0f &&
- fabsf(this->actor.playerHeightRel) < 50.0f) {
+ } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && (this->actor.xzDistToPlayer < 180.0f) &&
+ (fabsf(this->actor.playerHeightRel) < 50.0f)) {
this->playerOcarinaOut |= 1;
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
}
@@ -458,22 +462,20 @@ void EnYb_Draw(Actor* thisx, PlayState* play) {
if (this->alpha != 0) {
if (this->alpha < 255) {
if (this->alpha > 128) {
- func_8012C2B4(POLY_XLU_DISP++);
+ Gfx_SetupDL71(POLY_XLU_DISP++);
Scene_SetRenderModeXlu(play, 2, 2);
} else {
- func_8012C304(POLY_XLU_DISP++);
+ Gfx_SetupDL72(POLY_XLU_DISP++);
Scene_SetRenderModeXlu(play, 1, 2);
}
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
- if (1) {}
-
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawXlu, &this->actor, POLY_XLU_DISP);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Scene_SetRenderModeXlu(play, 0, 1);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawOpa, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c
index 7a160e368..ba71bbd7f 100644
--- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c
+++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c
@@ -206,11 +206,11 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) {
}
void EnZo_Walk(EnZo* this, PlayState* play) {
- if (ENZO_GET_PATH(&this->actor) != 0x3F) {
+ if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) {
EnZo_ChangeAnim(&this->skelAnime, 6);
}
- if (ENZO_GET_PATH(&this->actor) != 0x3F) {
+ if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) {
this->actionFunc = EnZo_FollowPath;
} else {
this->actionFunc = EnZo_DoNothing;
@@ -264,7 +264,7 @@ void EnZo_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH(&this->actor), 0x3F);
+ this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH_INDEX(&this->actor), ENZO_PATH_INDEX_NONE);
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = EnZo_Walk;
@@ -347,7 +347,8 @@ void EnZo_Draw(Actor* thisx, PlayState* play) {
TexturePtr eyeTextures[] = { gZoraEyeOpenTex, gZoraEyeHalfTex, gZoraEyeClosedTex };
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
@@ -370,5 +371,6 @@ void EnZo_Draw(Actor* thisx, PlayState* play) {
}
SubS_DrawShadowTex(&this->actor, &play->state, shadowTex);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.h b/src/overlays/actors/ovl_En_Zo/z_en_zo.h
index bfd0c79dd..9d32f63e5 100644
--- a/src/overlays/actors/ovl_En_Zo/z_en_zo.h
+++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.h
@@ -8,7 +8,9 @@ struct EnZo;
typedef void (*EnZoActionFunc)(struct EnZo*, PlayState*);
-#define ENZO_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9)
+#define ENZO_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9)
+
+#define ENZO_PATH_INDEX_NONE 0x3F
typedef struct EnZo {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c
index 998c2b186..cdf6b1766 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c
@@ -759,7 +759,7 @@ void EnZob_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_2F4 & 0x20) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_312, 1000);
diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.h b/src/overlays/actors/ovl_En_Zob/z_en_zob.h
index e0bd7bf79..6e6c8e7a8 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h
@@ -9,10 +9,10 @@ typedef void (*EnZobActionFunc)(struct EnZob*, PlayState*);
#define ENZOB_GET_F(thisx) ((thisx)->params & 0xF)
-enum {
+typedef enum {
/* 1 */ ENZOB_F_1 = 1,
- /* 2 */ ENZOB_F_2,
-};
+ /* 2 */ ENZOB_F_2
+} EnZobParam;
typedef struct EnZob {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c
index 826664a9a..d032b6579 100644
--- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c
+++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c
@@ -30,7 +30,7 @@ typedef enum {
/* 2 */ ENZOD_ANIM_ARMS_FOLDED,
/* 3 */ ENZOD_ANIM_PLAYING_LENTO,
/* 4 */ ENZOD_ANIM_PLAYING_ANDANTINO,
- /* 5 */ ENZOD_ANIM_MAX,
+ /* 5 */ ENZOD_ANIM_MAX
} EnZodAnimation;
typedef enum {
@@ -42,7 +42,7 @@ typedef enum {
/* 6 */ ENZOD_INSTRUMENT_DRUM_3,
/* 7 */ ENZOD_INSTRUMENT_DRUM_4,
/* 8 */ ENZOD_INSTRUMENT_DRUM_5,
- /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM,
+ /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM
} EnZodInstrument;
const ActorInit En_Zod_InitVars = {
@@ -628,7 +628,7 @@ void EnZod_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->stateFlags & TIJO_STATE_2) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->fogNear, 1000);
diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.h b/src/overlays/actors/ovl_En_Zod/z_en_zod.h
index 9e6f3f4da..12278bb97 100644
--- a/src/overlays/actors/ovl_En_Zod/z_en_zod.h
+++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.h
@@ -33,9 +33,9 @@ typedef struct EnZod {
} EnZod; // size = 0x2A0
typedef enum {
- /* 1 */ ENZOD_TYPE_1 = 1,
- /* 2 */ ENZOD_TYPE_2,
- /* 0xF */ ENZOD_TYPE_0xF = 0xF,
-} EnZodTypes;
+ /* 0x1 */ ENZOD_TYPE_1 = 1,
+ /* 0x2 */ ENZOD_TYPE_2,
+ /* 0xF */ ENZOD_TYPE_0xF = 0xF
+} EnZodType;
#endif // Z_EN_ZOD_H
diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c
index ccbb1f752..96de52b88 100644
--- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c
+++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c
@@ -394,9 +394,9 @@ void func_80B93D2C(EnZog* this, PlayState* play) {
void func_80B93DE8(Vec3f* arg0, PlayState* play, s32 arg2) {
Vec3f sp2C;
- sp2C.x = randPlusMinusPoint5Scaled(30.0f) + arg0->x;
+ sp2C.x = Rand_CenteredFloat(30.0f) + arg0->x;
sp2C.y = arg0->y + 3.0f;
- sp2C.z = randPlusMinusPoint5Scaled(30.0f) + arg0->z;
+ sp2C.z = Rand_CenteredFloat(30.0f) + arg0->z;
EffectSsKirakira_SpawnDispersed(play, &sp2C, &D_80B9598C, &D_80B95998, &D_80B959A4, &D_80B959A8, 1000, arg2);
}
@@ -865,9 +865,9 @@ void func_80B94E34(EnZog* this, PlayState* play) {
Vec3f sp38;
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80B959AC, &sp38);
- sp38.x += randPlusMinusPoint5Scaled(30.0f);
+ sp38.x += Rand_CenteredFloat(30.0f);
sp38.y += 20.0f;
- sp38.z += randPlusMinusPoint5Scaled(30.0f);
+ sp38.z += Rand_CenteredFloat(30.0f);
if (WaterBox_GetSurface1(play, &play->colCtx, sp38.x, sp38.z, &sp38.y, &sp44) &&
(this->actor.world.pos.y < sp38.y)) {
EffectSsGSplash_Spawn(play, &sp38, NULL, NULL, 1,
@@ -1049,11 +1049,11 @@ void EnZog_Draw(Actor* thisx, PlayState* play) {
if (this->unk_30A & 8) {
if (this->unk_322 > 128) {
gfx = POLY_XLU_DISP++;
- func_8012C2B4(gfx);
+ Gfx_SetupDL71(gfx);
Scene_SetRenderModeXlu(play, 2, 2);
} else {
gfx = POLY_XLU_DISP++;
- func_8012C304(gfx);
+ Gfx_SetupDL72(gfx);
Scene_SetRenderModeXlu(play, 1, 2);
}
@@ -1068,7 +1068,7 @@ void EnZog_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
NULL, func_80B95598, &this->actor, POLY_XLU_DISP);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Scene_SetRenderModeXlu(play, 0, 1);
gfx = POLY_OPA_DISP;
diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c
index 21201346a..0bfc986dc 100644
--- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c
+++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c
@@ -697,8 +697,9 @@ void func_80B32F04(Actor* thisx, PlayState* play) {
this->actor.scale.z * (((sp7C + 1.0f) * 0.1f) + 9.0f), MTXMODE_APPLY);
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_XLU_DISP;
- gfx = func_8012C868(gfx);
+ gfx = Gfx_SetupDL20_NoCD(gfx);
gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080);
gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
@@ -725,13 +726,13 @@ void func_80B331C8(Actor* thisx, PlayState* play) {
Matrix_Scale(this->unk_1E0, this->unk_1E0, this->unk_1E0, MTXMODE_APPLY);
if (this->unk_1ED >= 254) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250);
} else {
- func_8012C304(POLY_XLU_DISP++);
+ Gfx_SetupDL72(POLY_XLU_DISP++);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
@@ -862,7 +863,7 @@ void func_80B33818(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2]));
diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
index 18a421272..f8895af3f 100644
--- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
+++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
@@ -10,7 +10,7 @@ typedef void (*EnZoraeggActionFunc)(struct EnZoraegg*, PlayState*);
#define ENZORAEGG_GET_1F(thisx) ((thisx)->params & 0x1F)
#define ENZORAEGG_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
-enum {
+typedef enum {
/* 0x00 */ ENZORAEGG_1F_00,
/* 0x01 */ ENZORAEGG_1F_01,
/* 0x02 */ ENZORAEGG_1F_02,
@@ -36,8 +36,8 @@ enum {
/* 0x16 */ ENZORAEGG_1F_16,
/* 0x17 */ ENZORAEGG_1F_17,
/* 0x18 */ ENZORAEGG_1F_18,
- /* 0x19 */ ENZORAEGG_1F_19,
-};
+ /* 0x19 */ ENZORAEGG_1F_19
+} EnZoraeggParam;
typedef struct EnZoraegg {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
index 039c2a3e6..72c2f9b82 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
@@ -414,86 +414,85 @@ void func_80BBB8AC(EnZos* this, PlayState* play) {
}
}
- if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- switch (play->msgCtx.currentTextId) {
- case 0x1237:
- player->exchangeItemId = 0;
+ if ((Message_GetState(&play->msgCtx) != TEXT_STATE_5) || !Message_ShouldAdvance(play)) {
+ return;
+ }
- case 0x1238:
- case 0x123A:
- case 0x123B:
- case 0x123C:
- case 0x123E:
- case 0x123F:
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ switch (play->msgCtx.currentTextId) {
+ case 0x1237:
+ player->exchangeItemId = PLAYER_IA_NONE;
+ // fallthrough
+ case 0x1238:
+ case 0x123A:
+ case 0x123B:
+ case 0x123C:
+ case 0x123E:
+ case 0x123F:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1244:
- this->unk_2B6 &= ~0x10;
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ case 0x1244:
+ this->unk_2B6 &= ~0x10;
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1232:
- case 0x1241:
- player->exchangeItemId = 0;
+ case 0x1232:
+ case 0x1241:
+ player->exchangeItemId = PLAYER_IA_NONE;
+ // fallthrough
+ case 0x1239:
+ case 0x1246:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1239:
- case 0x1246:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ case 0x1233:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1233:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP);
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ case 0x1245:
+ case 0x1248:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_FOOT_TAP, ANIMMODE_LOOP);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1245:
- case 0x1248:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_FOOT_TAP, ANIMMODE_LOOP);
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ case 0x1231:
+ Message_ContinueTextbox(play, 0xFF);
+ this->actionFunc = func_80BBB718;
+ break;
- case 0x1231:
- Message_ContinueTextbox(play, 0xFF);
- this->actionFunc = func_80BBB718;
- break;
+ case 0x1243:
+ case 0x1249:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BBBDE0;
+ this->unk_2B6 |= 1;
+ break;
- case 0x1243:
- case 0x1249:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
- Message_CloseTextbox(play);
- this->actionFunc = func_80BBBDE0;
- this->unk_2B6 |= 1;
- break;
+ case 0x1234:
+ case 0x123D:
+ case 0x1242:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
+ Actor_ProcessTalkRequest(&this->actor, &play->state);
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BBBDE0;
+ this->unk_2B6 |= 1;
+ break;
- case 0x1234:
- case 0x123D:
- case 0x1242:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
- Actor_ProcessTalkRequest(&this->actor, &play->state);
- Message_CloseTextbox(play);
- this->actionFunc = func_80BBBDE0;
- this->unk_2B6 |= 1;
- break;
+ case 0x1236:
+ EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BBBDE0;
+ this->unk_2B6 |= 1;
+ break;
- case 0x1236:
- EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
- Message_CloseTextbox(play);
- this->actionFunc = func_80BBBDE0;
- this->unk_2B6 |= 1;
- break;
-
- default:
- //! FAKE:
- if (1) {}
-
- Message_CloseTextbox(play);
- this->actionFunc = func_80BBBDE0;
- this->unk_2B6 |= 1;
- break;
- }
+ default:
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BBBDE0;
+ this->unk_2B6 |= 1;
+ break;
}
}
@@ -738,7 +737,7 @@ void EnZos_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_2B6 & 0x40) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_2BC, 1000);
diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.h b/src/overlays/actors/ovl_En_Zos/z_en_zos.h
index 669430a0c..f761a9bc5 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h
@@ -10,10 +10,10 @@ typedef void (*EnZosActionFunc)(struct EnZos*, PlayState*);
#define ENZOS_GET_F(thisx) ((thisx)->params & 0xF)
-enum {
+typedef enum {
/* 1 */ ENZOS_F_1 = 1,
- /* 2 */ ENZOS_F_2,
-};
+ /* 2 */ ENZOS_F_2
+} EnZosParam;
typedef struct EnZos {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c
index f382cdf80..98adea93a 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c
@@ -111,8 +111,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
for (i = 0; i < ARRAY_COUNT(this->unk_2D8); i++) {
this->unk_2D8[i] = NULL;
}
- if (ENZOT_GET_FC00(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)];
+ if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)];
this->unk_2D4 = 0;
func_80B965D0(this, play);
} else {
@@ -124,8 +124,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
case 3:
case 4:
this->actionFunc = func_80B97B5C;
- if (ENZOT_GET_FC00(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)];
+ if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)];
} else {
this->path = NULL;
}
@@ -134,8 +134,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
case 5:
this->unk_2F2 |= 4;
this->actionFunc = func_80B97FD0;
- if (ENZOT_GET_FC00(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)];
+ if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)];
} else {
this->path = NULL;
}
@@ -167,8 +167,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
case 10:
this->actionFunc = func_80B992C0;
func_80B96BEC(this, 1, ANIMMODE_LOOP);
- if (ENZOT_GET_FC00(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)];
+ if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)];
} else {
this->path = NULL;
}
@@ -211,8 +211,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
case 22:
this->actionFunc = func_80B980FC;
- if (ENZOT_GET_FC00(&this->actor) != 0x3F) {
- this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)];
+ if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) {
+ this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)];
} else {
this->path = NULL;
}
@@ -757,8 +757,6 @@ void func_80B97E0C(EnZot* this, PlayState* play) {
}
void func_80B97E4C(EnZot* this, PlayState* play) {
- if (1) {}
-
if (this->unk_2F2 & 0x40) {
func_80B96BEC(this, 0, ANIMMODE_LOOP);
}
@@ -768,33 +766,38 @@ void func_80B97E4C(EnZot* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
}
- if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- switch (play->msgCtx.currentTextId) {
- case 0x128C:
- this->unk_2F2 &= ~4;
- func_80B96BEC(this, 6, ANIMMODE_ONCE);
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ if ((Message_GetState(&play->msgCtx) != TEXT_STATE_5) || !Message_ShouldAdvance(play)) {
+ return;
+ }
- case 0x128D:
- case 0x128E:
- case 0x128F:
- Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
- break;
+ switch (play->msgCtx.currentTextId) {
+ case 0x128C:
+ this->unk_2F2 &= ~4;
+ func_80B96BEC(this, 6, ANIMMODE_ONCE);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x1290:
- Message_CloseTextbox(play);
- this->actionFunc = func_80B97D6C;
- this->unk_2F2 |= 4;
- func_80B96BEC(this, 3, ANIMMODE_LOOP);
- SET_WEEKEVENTREG(WEEKEVENTREG_38_08);
- break;
+ case 0x128D:
+ case 0x128E:
+ case 0x128F:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
- case 0x128B:
- Message_CloseTextbox(play);
- this->actionFunc = func_80B97FD0;
- break;
- }
+ case 0x1290:
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80B97D6C;
+ this->unk_2F2 |= 4;
+ func_80B96BEC(this, 3, ANIMMODE_LOOP);
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_08);
+ break;
+
+ case 0x128B:
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80B97FD0;
+ break;
+
+ default:
+ break;
}
}
@@ -1272,8 +1275,7 @@ void func_80B99160(EnZot* this, PlayState* play) {
}
void func_80B991E4(EnZot* this, PlayState* play) {
- if (1) {
- do { } while (0); }
+ if (1) {}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x800, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -1398,7 +1400,7 @@ void EnZot_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk_2EC]));
diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.h b/src/overlays/actors/ovl_En_Zot/z_en_zot.h
index 1bab43ae3..e2c43baa3 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h
@@ -8,7 +8,9 @@ struct EnZot;
typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*);
#define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F)
-#define ENZOT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+#define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA)
+
+#define ENZOT_PATH_INDEX_NONE 0x3F
typedef struct EnZot {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c
index c6dca4bd7..fdf50a820 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c
@@ -563,7 +563,7 @@ void EnZov_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
phi_a1 = 0;
curFrame = this->skelAnime.curFrame;
phi_v1 = this->unk_2EC;
diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c
index 446470dbe..334b8fc05 100644
--- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c
+++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c
@@ -182,26 +182,27 @@ void func_80BDC830(EnZowStruct* ptr, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
u8 flag = false;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 15; i++, ptr++) {
- if (ptr->unk_00 == 1) {
- if (!flag) {
- gDPPipeSync(POLY_XLU_DISP++);
- gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL);
- gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
- if (1) {}
- flag = true;
- }
-
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F);
-
- Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
- Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL);
+ if (ptr->unk_00 != 1) {
+ continue;
}
+
+ if (!flag) {
+ gDPPipeSync(POLY_XLU_DISP++);
+ gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL);
+ gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
+ flag = true;
+ }
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F);
+
+ Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
+ Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL);
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -213,26 +214,27 @@ void func_80BDC9DC(EnZowStruct* ptr, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
u8 flag = false;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 15; i++, ptr++) {
- if (ptr->unk_00 == 3) {
- if (!flag) {
- gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL);
- gDPPipeSync(POLY_XLU_DISP++);
- gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0);
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
- if (1) {}
- flag = true;
- }
-
- Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
- Matrix_ReplaceRotation(&play->billboardMtxF);
- Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL);
+ if (ptr->unk_00 != 3) {
+ continue;
}
+
+ if (!flag) {
+ gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL);
+ gDPPipeSync(POLY_XLU_DISP++);
+ gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
+ flag = true;
+ }
+
+ Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL);
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -244,27 +246,28 @@ void func_80BDCB84(EnZowStruct* ptr, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
u8 flag = false;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < 15; i++, ptr++) {
- if (ptr->unk_00 == 2) {
- if (!flag) {
- gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL);
- gDPPipeSync(POLY_XLU_DISP++);
- gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0);
- if (1) {}
- flag = true;
- }
-
- gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F);
-
- Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
- Matrix_ReplaceRotation(&play->billboardMtxF);
- Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL);
+ if (ptr->unk_00 != 2) {
+ continue;
}
+
+ if (!flag) {
+ gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL);
+ gDPPipeSync(POLY_XLU_DISP++);
+ gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0);
+ flag = true;
+ }
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F);
+
+ Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL);
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -629,7 +632,7 @@ void EnZow_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
if (this->unk_2CE >= 255) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp54[this->unk_2C4]));
diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
index c41f45579..661d24636 100644
--- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
+++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
@@ -1,3 +1,9 @@
+/*
+ * File: z_item_b_heart.c
+ * Overlay: ovl_Item_B_Heart
+ * Description: Heart Container
+ */
+
#include "z_item_b_heart.h"
#include "objects/object_gi_hearts/object_gi_hearts.h"
@@ -10,7 +16,8 @@ void ItemBHeart_Destroy(Actor* thisx, PlayState* play);
void ItemBHeart_Update(Actor* thisx, PlayState* play);
void ItemBHeart_Draw(Actor* thisx, PlayState* play);
-/*
+void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play);
+
const ActorInit Item_B_Heart_InitVars = {
ACTOR_ITEM_B_HEART,
ACTORCAT_BOSS,
@@ -20,16 +27,94 @@ const ActorInit Item_B_Heart_InitVars = {
(ActorFunc)ItemBHeart_Init,
(ActorFunc)ItemBHeart_Destroy,
(ActorFunc)ItemBHeart_Update,
- (ActorFunc)ItemBHeart_Draw
+ (ActorFunc)ItemBHeart_Draw,
};
-*/
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Init.s")
+static InitChainEntry sInitChain[] = {
+ ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Destroy.s")
+void ItemBHeart_Init(Actor* thisx, PlayState* play) {
+ ItemBHeart* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Update.s")
+ if (Flags_GetCollectible(play, 0x1F)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.8f);
+ if (this->actor.params == BHEART_PARAM_SMALL) {
+ this->baseScale = BHEART_SCALE_SMALL;
+ } else {
+ this->baseScale = BHEART_SCALE_NORMAL;
+ }
+ this->actor.world.pos.y += 20.0f * this->baseScale;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/func_808BCF54.s")
+void ItemBHeart_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Draw.s")
+/**
+ * Adjusts size and handles collection (if of proper baseScale)
+ */
+void ItemBHeart_Update(Actor* thisx, PlayState* play) {
+ ItemBHeart* this = THIS;
+
+ ItemBHeart_UpdateModel(this, play);
+
+ if (!(this->baseScale < BHEART_SCALE_MIN_COLLECTIBLE)) {
+ if (Actor_HasParent(&this->actor, play)) {
+ Flags_SetCollectible(play, 0x1F);
+ Actor_Kill(&this->actor);
+ return;
+ }
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_CONTAINER, 30.0f, 80.0f);
+ }
+}
+
+/**
+ * Rotate continuously while approaching 40% of object's unit scale.
+ */
+void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play) {
+ this->actor.shape.rot.y += 0x400;
+ Math_ApproachF(&this->variableScale, 0.4f, 0.1f, 0.01f);
+ Actor_SetScale(&this->actor, this->variableScale * this->baseScale);
+}
+
+/**
+ * Draw translucently when in front of a boss warp portal
+ */
+void ItemBHeart_Draw(Actor* thisx, PlayState* play) {
+ ItemBHeart* this = THIS;
+ Actor* actorIt;
+ u8 drawTranslucent = false;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ actorIt = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
+
+ while (actorIt != NULL) {
+ if ((actorIt->id == ACTOR_DOOR_WARP1) && (actorIt->projectedPos.z > this->actor.projectedPos.z)) {
+ drawTranslucent = true;
+ break;
+ }
+ actorIt = actorIt->next;
+ }
+
+ if (drawTranslucent || (this->actor.world.rot.y != 0)) {
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, &gGiHeartBorderDL);
+ gSPDisplayList(POLY_XLU_DISP++, &gGiHeartContainerDL);
+ } else {
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, &gGiHeartBorderDL);
+ gSPDisplayList(POLY_OPA_DISP++, &gGiHeartContainerDL);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h
index 4e3126e25..90577dcfd 100644
--- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h
+++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h
@@ -3,12 +3,20 @@
#include "global.h"
-struct ItemBHeart;
+typedef enum {
+ /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale.
+ /* 35 */ BHEART_PARAM_SMALL = 35 // Spawn Parameter for Small Scale.
+} ItemBHeartParam;
+
+#define BHEART_SCALE_SMALL (0.1f) // Scale value for Small Mode
+#define BHEART_SCALE_NORMAL (1.0f) // Scale value for Normal Mode
+#define BHEART_SCALE_MIN_COLLECTIBLE (0.5f) // baseScale <50% will disable collection
typedef struct ItemBHeart {
/* 0x000 */ Actor actor;
- /* 0x144 */ UNK_TYPE1 unk_144[0x24];
- /* 0x168 */ f32 unk_168;
+ /* 0x144 */ UNK_TYPE1 unk_144[0x20];
+ /* 0x164 */ f32 variableScale;
+ /* 0x168 */ f32 baseScale;
} ItemBHeart; // size = 0x16C
#endif // Z_ITEM_B_HEART_H
diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
index 4880a326e..61b172ea7 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
@@ -609,7 +609,7 @@ void MirRay_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Scale(1.0f, 1.0f, this->reflectIntensity, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h
index cd48cfed1..f27254cec 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h
@@ -19,8 +19,8 @@ typedef enum {
/* 0x7 */ MIRRAY_SPIRIT_TOPROOM_COBRA1,
/* 0x8 */ MIRRAY_SPIRIT_TOPROOM_COBRA2,
/* 0x9 */ MIRRAY_GANONSCASTLE_SPIRITTRIAL_DOWNLIGHT,
- /* 0xA */ MIRRAY_MAX,
-} MirRayBeamLocations;
+ /* 0xA */ MIRRAY_MAX
+} MirRayBeamLocation;
typedef struct MirRay {
/* 0x000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
index 8f6fcbfe9..ae8c81f26 100644
--- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
+++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
@@ -361,7 +361,7 @@ void MirRay3_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Scale(1.0f, 1.0f, this->unk_214, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c
index c32fb582d..ca4efd4bb 100644
--- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c
+++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c
@@ -274,7 +274,8 @@ void ObjAqua_Draw(Actor* thisx, PlayState* play) {
s32 actionFuncTemp = this->actionFunc == func_80ACBDFC;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
framesTemp = ((play->gameplayFrames & 0x7FFFFFFF) * -0xA) & 0x1FF;
if (actionFuncTemp) {
framesTemp >>= 1;
diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
index 93adab401..f41b8057c 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
@@ -95,20 +95,20 @@ s32 func_809A4F00(ObjArmos* this, s32 arg1) {
}
if (temp_v0 == OBJARMOS_ROT_7_4) {
- return arg1 == 0 || arg1 == 1;
+ return (arg1 == 0) || (arg1 == 1);
}
if (temp_v0 == OBJARMOS_ROT_7_5) {
- return arg1 == 2 || arg1 == 3;
+ return (arg1 == 2) || (arg1 == 3);
}
if (temp_v0 == OBJARMOS_ROT_7_6) {
if (this->unk_26E != 0) {
- return arg1 == 0 || arg1 == 1;
+ return (arg1 == 0) || (arg1 == 1);
}
if (this->unk_270 != 0) {
- return arg1 == 2 || arg1 == 3;
+ return (arg1 == 2) || (arg1 == 3);
}
return true;
@@ -141,22 +141,22 @@ s32 func_809A500C(ObjArmos* this, s32 arg1) {
if (temp_v0 == OBJARMOS_ROT_7_4) {
temp = D_809A5BB0[arg1] + this->unk_26E;
- return temp <= temp_v1 && -temp_v1 <= temp;
+ return (temp <= temp_v1) && (-temp_v1 <= temp);
}
if (temp_v0 == OBJARMOS_ROT_7_5) {
temp2 = D_809A5BB8[arg1] + this->unk_270;
- return temp2 <= temp_v1 && -temp_v1 <= temp2;
+ return (temp2 <= temp_v1) && (-temp_v1 <= temp2);
}
if (temp_v0 == OBJARMOS_ROT_7_6) {
if ((arg1 == 0) || (arg1 == 1)) {
temp = D_809A5BB0[arg1] + this->unk_26E;
- return temp <= temp_v1 && -temp_v1 <= temp;
+ return (temp <= temp_v1) && (-temp_v1 <= temp);
}
temp2 = D_809A5BB8[arg1] + this->unk_270;
- return temp2 <= temp_v1 && -temp_v1 <= temp2;
+ return (temp2 <= temp_v1) && (-temp_v1 <= temp2);
}
return false;
@@ -350,7 +350,7 @@ void func_809A5960(ObjArmos* this, PlayState* play) {
(Math_CosS(this->dyna.actor.shape.rot.y) * -9.0f) + this->dyna.actor.world.pos.z,
&this->dyna.actor.shape.rot);
Matrix_Scale(0.014f, 0.014f, 0.014f, MTXMODE_APPLY);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
@@ -366,7 +366,7 @@ void func_809A5A3C(ObjArmos* this, PlayState* play) {
if (this->dyna.actor.floorPoly != NULL) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0,
COMBINED);
diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
index 177cc8e66..4ac83cc9d 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
@@ -12,15 +12,15 @@ typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*);
#define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7)
#define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF)
-enum {
+typedef enum {
/* 0 */ OBJARMOS_ROT_7_0,
/* 1 */ OBJARMOS_ROT_7_1,
/* 2 */ OBJARMOS_ROT_7_2,
/* 3 */ OBJARMOS_ROT_7_3,
/* 4 */ OBJARMOS_ROT_7_4,
/* 5 */ OBJARMOS_ROT_7_5,
- /* 6 */ OBJARMOS_ROT_7_6,
-};
+ /* 6 */ OBJARMOS_ROT_7_6
+} ObjArmosParam;
typedef struct ObjArmos {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
index 7cc5dfb17..003b94932 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -939,7 +939,7 @@ void func_80938E00(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
index 7699b3427..1a22de390 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
@@ -16,11 +16,11 @@ typedef void (*ObjBeanUnkFunc)(struct ObjBean*);
#define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3)
-enum {
- /* 0x0 */ ENOBJBEAN_GET_C000_0,
- /* 0x1 */ ENOBJBEAN_GET_C000_1,
- /* 0x2 */ ENOBJBEAN_GET_C000_2,
-};
+typedef enum {
+ /* 0 */ ENOBJBEAN_GET_C000_0,
+ /* 1 */ ENOBJBEAN_GET_C000_1,
+ /* 2 */ ENOBJBEAN_GET_C000_2
+} ObjBeanParam;
typedef struct ObjBean {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c
index fb7f1466c..0a50c85c5 100644
--- a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c
+++ b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c
@@ -220,13 +220,16 @@ void func_80A359B4(Actor* thisx, PlayState* play) {
Matrix_RotateXS(thisx->world.rot.x, MTXMODE_APPLY);
Matrix_RotateYS(-thisx->world.rot.y, MTXMODE_APPLY);
Matrix_Translate(0.0f, -2600.0f, 0.0f, MTXMODE_APPLY);
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_000698);
gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0008D0);
gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_000960);
gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0007A8);
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -234,20 +237,26 @@ void func_80A35B18(Actor* thisx, PlayState* play) {
Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, MTXMODE_NEW);
Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY);
Matrix_RotateYS(thisx->shape.rot.y, MTXMODE_APPLY);
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_000570);
+
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80A35BD4(Actor* thisx, PlayState* play) {
Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y - 4.0f, thisx->world.pos.z, MTXMODE_NEW);
Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY);
+
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_f52_obj_DL_000840);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
index 85468c59c..61805fd49 100644
--- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
+++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
@@ -159,13 +159,13 @@ void func_80AE8DE4(ObjBigicicle* this, PlayState* play) {
f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f);
for (i = 0; i < 10; i++) {
- sp98.x = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.x;
+ sp98.x = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.x;
sp98.y = ((Rand_ZeroFloat(20.0f) - 35.0f) * temp_f20) + this->actor.world.pos.y;
- sp98.z = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.z;
+ sp98.z = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.z;
- sp8C.x = randPlusMinusPoint5Scaled(13.0f);
+ sp8C.x = Rand_CenteredFloat(13.0f);
sp8C.y = Rand_ZeroFloat(2.0f);
- sp8C.z = randPlusMinusPoint5Scaled(13.0f);
+ sp8C.z = Rand_CenteredFloat(13.0f);
EffectSsHahen_Spawn(play, &sp98, &sp8C, &D_80AE987C, HAHEN_XLU, (Rand_ZeroFloat(20.0f) + 30.0f) * temp_f20,
OBJECT_BIGICICLE, 40, object_bigicicle_DL_0009B0);
@@ -222,8 +222,8 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play) {
if (this->unk_14A > 0) {
this->unk_14A--;
- this->actor.shape.rot.x = BINANG_ADD((s32)(randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A), 0x4000);
- this->actor.shape.rot.z = randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A;
+ this->actor.shape.rot.x = BINANG_ADD((s32)(Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A), 0x4000);
+ this->actor.shape.rot.z = Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A;
} else {
this->actor.shape.rot.x = 0x4000;
this->actor.shape.rot.z = 0;
@@ -271,9 +271,9 @@ void func_80AE939C(ObjBigicicle* this, PlayState* play) {
f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f);
for (i = 0; i < 20; i++) {
- sp8C.x = randPlusMinusPoint5Scaled(15.0f);
+ sp8C.x = Rand_CenteredFloat(15.0f);
sp8C.y = Rand_ZeroFloat(7.0f) + 3.0f;
- sp8C.z = randPlusMinusPoint5Scaled(15.0f);
+ sp8C.z = Rand_CenteredFloat(15.0f);
sp98.x = this->actor.world.pos.x + (sp8C.x * 5.0f * temp_f20);
sp98.y = this->actor.world.pos.y + (sp8C.y * 7.0f * temp_f20);
diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c
index 43f137326..6c81e8de6 100644
--- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c
+++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c
@@ -66,7 +66,7 @@ void ObjBoat_Init(Actor* thisx, PlayState* play) {
if (thisx->params < 0) {
this->dyna.actor.update = ObjBoat_UpdateCutscene;
} else {
- path = &play->setupPathList[OBJBOAT_GET_PATH(thisx)];
+ path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(thisx)];
this->maxPointIndex = path->count - 1;
this->points = Lib_SegmentedToVirtual(path->points);
this->direction = 1;
@@ -157,10 +157,10 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) {
if (this->cueId != cue->id) {
this->dyna.actor.shape.rot.x = cue->rot.x;
if (cue->id != 1) {
- Path* path = &play->setupPathList[OBJBOAT_GET_PATH(&this->dyna.actor)];
+ Path* path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(&this->dyna.actor)];
if (cue->id == 3) {
- path = &play->setupPathList[path->unk1];
+ path = &play->setupPathList[path->additionalPathIndex];
}
this->maxPointIndex = path->count;
diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
index bfc7c7c2b..00cb936d7 100644
--- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
+++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define OBJBOAT_GET_PATH(thisx) (((thisx)->params >> 7) & 0x1F)
+#define OBJBOAT_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJBOAT_GET_4000(thisx) ((thisx)->params & 0x4000)
struct ObjBoat;
diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
index 84b2abc63..c8eed614b 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
@@ -77,11 +77,11 @@ static ColliderCylinderInit sCylinderInit2 = {
};
typedef struct {
- /* 0x00 */ ColliderCylinderInit* collider;
- /* 0x04 */ ActorShadowFunc unk_04;
- /* 0x08 */ ActorFunc unk_08;
- /* 0x0C */ s32 (*unk_0C)(Actor*);
-} ObjBombiwaStruct2;
+ /* 0x0 */ ColliderCylinderInit* collider;
+ /* 0x4 */ ActorShadowFunc unk_04;
+ /* 0x8 */ ActorFunc unk_08;
+ /* 0xC */ s32 (*unk_0C)(Actor*);
+} ObjBombiwaStruct2; // size = 0x10
static ObjBombiwaStruct2 D_8093A998[] = {
{ &sCylinderInit1, ActorShadow_DrawCircle, func_8093A418, func_809393B0 },
@@ -465,7 +465,7 @@ void func_8093A418(Actor* thisx, PlayState* play) {
sp28 = (2300.0f - this->actor.projectedPos.z) * 2.55f;
this->actor.shape.shadowAlpha = sp28 * (32.0f / 51);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (s32)sp28);
@@ -489,20 +489,20 @@ void func_8093A608(Actor* thisx, PlayState* play) {
if (this->actionFunc == func_80939EF4) {
if ((this->actor.projectedPos.z <= 2200.0f) ||
((this->unk_203 & 1) && (this->actor.projectedPos.z < 2300.0f))) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x9B, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_004560);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004688);
} else if (this->actor.projectedPos.z < 2300.0f) {
sp38 = (2300.0f - this->actor.projectedPos.z) * 2.55f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -510,7 +510,7 @@ void func_8093A608(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004560);
}
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) {
ptr = &this->unk_190[i];
diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
index facd8de41..d1f19032f 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
@@ -25,7 +25,7 @@ void ObjChan_Destroy(Actor* thisx, PlayState* play);
void ObjChan_Update(Actor* thisx, PlayState* play);
void ObjChan_Draw(Actor* thisx, PlayState* play);
-void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play);
+void ObjChan_ChandelierAction(ObjChan* this, PlayState* play);
void ObjChan_PotAction(ObjChan* this, PlayState* play);
ActorInit Obj_Chan_InitVars = {
@@ -64,7 +64,7 @@ static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-void ObjChan_InitChandelier(ObjChan* this2, PlayState* play);
+void ObjChan_InitChandelier(ObjChan* this, PlayState* play);
void ObjChan_InitPot(ObjChan* this, PlayState* play);
void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play);
void ObjChan_DrawPot(Actor* thisx, PlayState* play);
@@ -99,10 +99,14 @@ void ObjChan_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = 0;
ObjChan_InitChandelier(this, play);
break;
+
case OBJCHAN_SUBTYPE_POT:
this->actor.draw = ObjChan_DrawPot;
ObjChan_InitPot(this, play);
break;
+
+ default:
+ break;
}
}
@@ -119,7 +123,7 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) {
sp20 = Math_SinS(this->unk1D4) * this->unk1D0;
temp_f6 = (Math_CosS(this->unk1D4) * (400 * M_PI / 0x8000) * this->unk1D0) + arg1;
if (temp_f6 != 0.0f) {
- this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * (400 * M_PI / 0x8000), temp_f6));
+ this->unk1D4 = RAD_TO_BINANG(Math_FAtan2F(sp20 * (400 * M_PI / 0x8000), temp_f6));
} else if (sp20 >= 0.0f) {
this->unk1D4 = 0x4000;
} else {
@@ -150,46 +154,44 @@ void ObjChan_CalculatePotPosition(Vec3f* childPosOut, Vec3s* childRotOut, Vec3f*
childRotOut->y += childAngle;
}
-//! TODO: Possibly takes actor and recasts
-void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
- ObjChan* this = this2;
+void ObjChan_InitChandelier(ObjChan* this, PlayState* play) {
+ Actor* thisx = &this->actor;
s32 i;
- ObjChan* temp_v0;
+ ObjChan* pot;
Vec3f childPos;
Vec3s childRot;
CollisionPoly* sp94;
s32 sp90;
Vec3f sp84;
- Math_Vec3f_Copy(&this->unk1C0, &this->actor.world.pos);
+ Math_Vec3f_Copy(&this->unk1C0, &thisx->world.pos);
- Math_Vec3f_Copy(&sp84, &this->actor.world.pos);
+ Math_Vec3f_Copy(&sp84, &thisx->world.pos);
sp84.y += 1600.0f;
- if (BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp84, &this->unk1C0, &sp94, false, false, true,
- true, &sp90)) {
- this->unk1CC = this->actor.world.pos.y - this->unk1C0.y;
+ if (BgCheck_EntityLineTest1(&play->colCtx, &thisx->world.pos, &sp84, &this->unk1C0, &sp94, false, false, true, true,
+ &sp90)) {
+ this->unk1CC = thisx->world.pos.y - this->unk1C0.y;
} else {
- Actor_Kill(&this->actor);
+ Actor_Kill(thisx);
return;
}
for (i = 0; i < 5; i++) {
- ObjChan_CalculatePotPosition(&childPos, &childRot, &this->actor.world.pos, &this->actor.shape.rot,
+ ObjChan_CalculatePotPosition(&childPos, &childRot, &thisx->world.pos, &thisx->shape.rot,
(s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation);
- temp_v0 = (ObjChan*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y,
- childPos.z, childRot.x, childRot.y, childRot.z,
- (this->actor.params & 0xFFF) | 0x1000, this->actor.csId,
- this->actor.halfDaysBits, &this->actor);
- if (temp_v0 != NULL) {
- this->pots[i] = temp_v0;
- temp_v0->myPotIndex = i;
- temp_v0->actor.csId = this->actor.csId;
+ pot = (ObjChan*)Actor_SpawnAsChildAndCutscene(
+ &play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, childPos.z, childRot.x, childRot.y,
+ childRot.z, (thisx->params & 0xFFF) | 0x1000, thisx->csId, thisx->halfDaysBits, thisx);
+ if (pot != NULL) {
+ this->pots[i] = pot;
+ pot->myPotIndex = i;
+ pot->actor.csId = thisx->csId;
} else {
- Actor_Kill(&this->actor);
+ Actor_Kill(thisx);
}
}
- if (Flags_GetSwitch(play, this->actor.params & 0x7F)) {
+ if (Flags_GetSwitch(play, thisx->params & 0x7F)) {
this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY;
this->stateFlags |= OBJCHAN_STATE_ON_FIRE;
@@ -211,9 +213,9 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
}
//! TODO: More descriptive name than Action?
-void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
- ObjChan* this = this2;
- ObjChan* temp;
+void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) {
+ Actor* thisx = &this->actor;
+ ObjChan* pot;
s32 i;
Vec3f sp60;
Vec3s sp58;
@@ -230,7 +232,7 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
this->unk1D0 = 0.0f;
}
}
- this->actor.shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0);
+ thisx->shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0);
if ((this->stateFlags & OBJCHAN_STATE_START_CUTSCENE) &&
SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
this->stateFlags |= OBJCHAN_STATE_CUTSCENE;
@@ -240,34 +242,34 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
this->stateFlags &= ~OBJCHAN_STATE_CUTSCENE;
CutsceneManager_Stop(this->csIdList[0]);
}
- Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
- Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
- Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY);
+ Matrix_RotateYS(thisx->shape.rot.y, MTXMODE_NEW);
+ Matrix_RotateXS(thisx->shape.rot.x, MTXMODE_APPLY);
+ Matrix_RotateZS(thisx->shape.rot.z, MTXMODE_APPLY);
Matrix_RotateYS(this->rotation, MTXMODE_APPLY);
- Matrix_MultVecY(this->unk1CC, &this->actor.world.pos);
- Math_Vec3f_Sum(&this->actor.world.pos, &this->unk1C0, &this->actor.world.pos);
+ Matrix_MultVecY(this->unk1CC, &thisx->world.pos);
+ Math_Vec3f_Sum(&thisx->world.pos, &this->unk1C0, &thisx->world.pos);
Collider_UpdateCylinder(&this->actor, &this->collider);
for (i = 0; i < 5; i++) {
- temp = this->pots[i];
- if (temp != NULL) {
- ObjChan_CalculatePotPosition(&sp60, &sp58, &this->actor.world.pos, &this->actor.shape.rot,
+ pot = this->pots[i];
+ if (pot != NULL) {
+ ObjChan_CalculatePotPosition(&sp60, &sp58, &thisx->world.pos, &thisx->shape.rot,
(s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation);
- Math_Vec3f_Copy(&temp->actor.world.pos, &sp60);
- Math_Vec3s_Copy(&temp->actor.shape.rot, &this->actor.shape.rot);
- temp->actor.shape.rot.y = this->rotation;
- Math_Vec3f_ToVec3s(&temp->collider.dim.pos, &temp->actor.world.pos);
+ Math_Vec3f_Copy(&pot->actor.world.pos, &sp60);
+ Math_Vec3s_Copy(&pot->actor.shape.rot, &thisx->shape.rot);
+ pot->actor.shape.rot.y = this->rotation;
+ Math_Vec3f_ToVec3s(&pot->collider.dim.pos, &pot->actor.world.pos);
}
}
if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) {
- Flags_SetSwitch(play, this->actor.params & 0x7F);
+ Flags_SetSwitch(play, thisx->params & 0x7F);
}
- if (Flags_GetSwitch(play, this->actor.params & 0x7F)) {
+ if (Flags_GetSwitch(play, thisx->params & 0x7F)) {
if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) {
this->rotationSpeed = 0;
this->flameSize = 0.0f;
for (i = 0; i < 5; i++) {
- temp = this->pots[i];
- if (temp != NULL) {
+ pot = this->pots[i];
+ if (pot != NULL) {
this->pots[i]->stateFlags |= OBJCHAN_STATE_FIRE_DELAY;
this->pots[i]->fireDelayFrames = 20 + i * 5;
this->pots[i]->flameSize = 0.0f;
@@ -338,6 +340,7 @@ void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play) {
for (temp_s2 = 0, temp_s1 = 0; temp_s2 != 18; temp_s2++, temp_s1 += 0x4E20) {
f32 sin = Math_SinS(temp_s1);
f32 cos = Math_CosS(temp_s1);
+
spDC.x = sin * 8.0f;
spDC.y = Rand_ZeroOne() * 12.0f + 2.0f;
spDC.z = cos * 8.0f;
@@ -374,14 +377,15 @@ void ObjChan_Draw(Actor* thisx, PlayState* play) {
Gfx* xlu;
OPEN_DISPS(play->state.gfxCtx);
+
Matrix_RotateYS(this->rotation, MTXMODE_APPLY);
- opa = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19);
+ opa = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
gSPMatrix(&opa[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(&opa[1], object_obj_chan_DL_000AF0);
POLY_OPA_DISP = &opa[2];
- xlu = func_8012C2B4(POLY_XLU_DISP);
+ xlu = Gfx_SetupDL71(POLY_XLU_DISP);
gSPMatrix(&xlu[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(&xlu[1], object_obj_chan_DL_000A10);
POLY_XLU_DISP = &xlu[2];
@@ -401,10 +405,12 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) {
Gfx* dl;
OPEN_DISPS(play->state.gfxCtx);
- dl = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19);
+
+ dl = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25);
gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(&dl[1], object_obj_chan_DL_002358);
POLY_OPA_DISP = &dl[2];
+
CLOSE_DISPS(play->state.gfxCtx);
if (this->stateFlags & OBJCHAN_STATE_ON_FIRE) {
@@ -415,6 +421,7 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) {
void ObjChan_DrawFire(ObjChan* this, PlayState* play) {
u32 sp4C;
Gfx* dl;
+
OPEN_DISPS(play->state.gfxCtx);
sp4C = play->gameplayFrames;
@@ -425,7 +432,7 @@ void ObjChan_DrawFire(ObjChan* this, PlayState* play) {
sObjChanFlameSize[OBJCHAN_SUBTYPE(&this->actor)].y * this->flameSize, 1.0f, MTXMODE_APPLY);
Matrix_Translate(0.0f, sObjChanFlameYOffset[OBJCHAN_SUBTYPE(&this->actor)], 0.0f, MTXMODE_APPLY);
- dl = func_8012C2B4(POLY_XLU_DISP);
+ dl = Gfx_SetupDL71(POLY_XLU_DISP);
gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD);
gSPSegment(&dl[1], 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, -sp4C * 20, 32, 128));
gDPSetPrimColor(&dl[2], 128, 128, 255, 255, 0, 255);
diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c
index 79007175d..4d2bee782 100644
--- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c
+++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c
@@ -199,7 +199,7 @@ void ObjChikuwa_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_2A0 < this->unk_29C) {
for (i = 0; i < this->unk_29C; i++) {
diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
index 412bade05..1f3f7f902 100644
--- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
+++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
@@ -556,7 +556,7 @@ void ObjComb_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (118.0f * this->actor.scale.y),
this->actor.world.pos.z, MTXMODE_NEW);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c
index a33bf2a43..9d468d834 100644
--- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c
+++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c
@@ -68,7 +68,7 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) {
if (this->speed < 0.01f) {
this->actionFunc = ObjDanpeilift_DoNothing;
} else {
- path = &play->setupPathList[OBJDANPEILIFT_GET_PATH(thisx)];
+ path = &play->setupPathList[OBJDANPEILIFT_GET_PATH_INDEX(thisx)];
this->curPoint = OBJDANPEILIFT_GET_STARTING_POINT(thisx);
this->endPoint = path->count - 1;
this->direction = 1;
diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
index 9c0d023c7..8ad582dd4 100644
--- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
+++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
@@ -10,7 +10,7 @@ typedef void (*ObjDanpeiliftActionFunc)(struct ObjDanpeilift*, PlayState*);
#define OBJDANPEILIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1)
#define OBJDANPEILIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F)
-#define OBJDANPEILIFT_GET_PATH(thisx) ((thisx)->params & 0x7F)
+#define OBJDANPEILIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F)
#define OBJDANPEILIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1)
#define OBJDANPEILIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f)
#define OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1)
diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
index 0dba9a21f..c1b46fce7 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
@@ -167,8 +167,8 @@ void func_80B12A88(Actor* thisx) {
}
}
-void func_80B12B38(ObjDhouse* this2, PlayState* play) {
- ObjDhouse* this = this2;
+void func_80B12B38(ObjDhouse* this, PlayState* play) {
+ Actor* thisx = &this->dyna.actor;
s32 i;
f32 temp_f0;
CollisionPoly* sp90;
@@ -201,7 +201,7 @@ void func_80B12B38(ObjDhouse* this2, PlayState* play) {
phi_s3 = false;
if (ptr->unk_0C.y < 0.0f) {
func_80B12A50(ptr, ptr3, &sp80);
- temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, &this->dyna.actor, &sp80);
+ temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, thisx, &sp80);
if (((sp80.y - 35.0f) < temp_f0) && (temp_f0 > (BGCHECK_Y_MIN + 1.0f))) {
phi_s3 = true;
}
@@ -505,7 +505,7 @@ void func_80B13C08(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_dhouse_DL_004928);
diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c
index 5a9ef2d05..774632cb4 100644
--- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c
+++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c
@@ -31,7 +31,8 @@ ActorInit Obj_Dinner_InitVars = {
void ObjDinner_Init(Actor* thisx, PlayState* play) {
ObjDinner* this = THIS;
- if ((gSaveContext.save.isNight != true) || ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01))) {
+ if ((gSaveContext.save.isNight != true) ||
+ ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM))) {
Actor_Kill(&this->actor);
}
Actor_SetScale(&this->actor, 0.1f);
@@ -45,7 +46,8 @@ void ObjDinner_Update(Actor* thisx, PlayState* play) {
void ObjDinner_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_obj_dinner_DL_0011E0);
diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c
index f3c271c69..8a11c507b 100644
--- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c
+++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c
@@ -321,7 +321,8 @@ void ObjDora_Draw(Actor* thisx, PlayState* play) {
f32 gongForceX;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->actionFunc == ObjDora_MoveGong) {
gongForceX = this->gongForce.x;
diff --git a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c
index 723dfcf3e..0bd55b296 100644
--- a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c
+++ b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c
@@ -104,7 +104,7 @@ void func_80A34A44(ObjEntotu* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_f53_obj_DL_000158);
@@ -136,7 +136,7 @@ void func_80A34B28(ObjEntotu* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20));
diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
index ac9184923..c7fbab2d6 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
@@ -284,6 +284,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) {
this->jointTable, this->morphTable, GOLD_DEKU_FLOWER_LIMB_MAX);
this->collider.dim.height = 20;
break;
+
+ default:
+ break;
}
type = DEKU_FLOWER_TYPE(&this->dyna.actor);
@@ -310,6 +313,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) {
this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f;
this->dyna.actor.targetMode = 3;
break;
+
+ default:
+ break;
}
}
}
@@ -321,7 +327,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) {
if (floorBgId == BGCHECK_SCENE) {
floorPoly = this->dyna.actor.floorPoly;
- if (floorPoly != NULL && this->burrowFlag & 1) {
+ if ((floorPoly != NULL) && (this->burrowFlag & 1)) {
func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId));
}
}
@@ -341,7 +347,7 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->dList);
CLOSE_DISPS(play->state.gfxCtx);
@@ -355,6 +361,6 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) {
void ObjEtcetera_DrawAnimated(Actor* thisx, PlayState* play) {
ObjEtcetera* this = THIS;
- func_8012C5B0(play->state.gfxCtx);
+ Gfx_SetupDL37_Opa(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->dyna.actor);
}
diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
index 1805e151a..454e3f674 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
@@ -12,7 +12,7 @@ typedef enum {
/* 1 */ DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE,
/* 2 */ DEKU_FLOWER_TYPE_GOLD,
/* 3 */ DEKU_FLOWER_TYPE_GOLD_WITH_INITIAL_BOUNCE,
- /* 4 */ DEKU_FLOWER_TYPE_MAX,
+ /* 4 */ DEKU_FLOWER_TYPE_MAX
} DekuFlowerType;
struct ObjEtcetera;
diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
index f9f86501d..e672780de 100644
--- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
+++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
@@ -55,8 +55,8 @@ static ColliderCylinderInit sCylinderInit = {
};
typedef struct {
- /* 0x00 */ f32 unk_00;
- /* 0x04 */ f32 unk_04;
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ f32 unk_04;
} ObjFireshieldStruct; // size = 0x8
ObjFireshieldStruct D_80A4D84C[] = {
@@ -315,8 +315,8 @@ void ObjFireshield_Destroy(Actor* thisx, PlayState* play) {
}
void ObjFireshield_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
ObjFireshield* this = THIS;
- ObjFireshield* this2 = THIS;
s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor);
s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor);
s32 temp_a0;
@@ -342,12 +342,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) {
this->collider.base.atFlags &= ~AT_HIT;
} else if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- func_800B8D98(play, &this->actor, 5.0f, this->actor.yawTowardsPlayer, 1.0f);
+ func_800B8D98(play, thisx, 5.0f, thisx->yawTowardsPlayer, 1.0f);
}
func_80A4CE28(this, play);
- this->actor.world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this2->unk_198)) + this->actor.home.pos.y;
+ thisx->world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this->unk_198)) + thisx->home.pos.y;
this->unk_1A6 = this->unk_198 * 255.0f;
@@ -357,13 +357,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) {
this->collider.dim.height = this->unk_198 * 80.0f;
if (sp44) {
- this->collider.dim.yShift =
- (s32)(this->actor.home.pos.y - this->actor.world.pos.y) - this->collider.dim.height;
+ this->collider.dim.yShift = (s32)(thisx->home.pos.y - thisx->world.pos.y) - this->collider.dim.height;
} else {
- this->collider.dim.yShift = this->actor.home.pos.y - this->actor.world.pos.y;
+ this->collider.dim.yShift = thisx->home.pos.y - thisx->world.pos.y;
}
- func_800B9010(&this->actor, NA_SE_EV_BURNING - SFX_FLAG);
+ func_800B9010(thisx, NA_SE_EV_BURNING - SFX_FLAG);
if (player->transformation == PLAYER_FORM_GORON) {
this->collider.info.toucher.damage = 0;
@@ -373,7 +372,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) {
this->collider.info.toucher.effect = 1;
}
- Collider_UpdateCylinder(&this->actor, &this->collider);
+ Collider_UpdateCylinder(thisx, &this->collider);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
@@ -384,7 +383,7 @@ void ObjFireshield_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 220, 0, this->unk_1A6);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
index cc818c883..aca30fe92 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
@@ -22,7 +22,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play);
void func_80A1CBF8(ObjFlowerpot* this);
void func_80A1CC0C(ObjFlowerpot* this, PlayState* play);
void func_80A1CD10(ObjFlowerpot* this);
-void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play);
+void func_80A1CEF4(ObjFlowerpot* this, PlayState* play);
u32 D_80A1D830;
MtxF D_80A1D838[8];
@@ -589,8 +589,8 @@ void func_80A1CD10(ObjFlowerpot* this) {
}
}
-void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
- ObjFlowerpot* this = this2;
+void func_80A1CEF4(ObjFlowerpot* this, PlayState* play) {
+ Actor* thisx = &this->actor;
s32 sp28 = this->collider.elements[0].info.toucherFlags & TOUCH_HIT;
if (sp28) {
@@ -603,7 +603,7 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
func_80A1C62C(this, play);
- if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 ||
+ if ((thisx->bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 ||
(this->unk_1E8 <= 0)) {
if (!(this->unk_1EA & 2)) {
func_80A1B914(this, play);
@@ -613,11 +613,11 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
}
func_80A1BA44(this, play);
func_80A1B994(this, play);
- Actor_Kill(&this->actor);
+ Actor_Kill(thisx);
return;
}
- if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ if (thisx->bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
if (!(this->unk_1EA & 2)) {
func_80A1B914(this, play);
func_80A1C328(this, play);
@@ -626,22 +626,22 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
}
func_80A1BD80(this, play);
func_80A1B994(this, play);
- SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
- Actor_Kill(&this->actor);
+ SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
+ Actor_Kill(thisx);
return;
}
- Actor_MoveWithGravity(&this->actor);
+ Actor_MoveWithGravity(thisx);
if (!(this->unk_1EA & 2)) {
- D_80A1D3F8 += (s16)(this->actor.shape.rot.x * -0.06f);
+ D_80A1D3F8 += (s16)(thisx->shape.rot.x * -0.06f);
} else {
Math_StepToS(&D_80A1D3F8, 0, 80);
Math_StepToS(&D_80A1D3FC, 0, 20);
}
- this->actor.shape.rot.x += D_80A1D3F8;
- this->actor.shape.rot.y += D_80A1D3FC;
+ thisx->shape.rot.x += D_80A1D3F8;
+ thisx->shape.rot.y += D_80A1D3FC;
func_80A1C5E8(this, play);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
@@ -668,7 +668,7 @@ void ObjFlowerpot_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_flowerpot_DL_0012E0);
diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
index c3d4d1398..409cbd837 100644
--- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
+++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
@@ -34,7 +34,7 @@ void ObjFunen_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - 0x8000), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
index 73aa848a2..85e628359 100644
--- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
+++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
@@ -184,11 +184,13 @@ void ObjGhaka_Update(Actor* thisx, PlayState* play) {
void ObjGhaka_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_ghaka_DL_001A20);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_ghaka_DL_001980);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
index b1924c63b..a17f853df 100644
--- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
+++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
@@ -4,6 +4,7 @@
* Description: "Master" instance of grass for unit spawned by Obj_Grass_Unit
*/
+#include "prevent_bss_reordering.h"
#include "z_obj_grass.h"
#include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -439,7 +440,7 @@ void func_809AA54C(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, gObjGrass_D_809AA9F0);
@@ -484,7 +485,7 @@ void func_809AA798(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, gObjGrass_D_809AAA68);
diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c
index e46c5da44..795d740f1 100644
--- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c
+++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c
@@ -208,31 +208,31 @@ void func_809AB474(ObjGrassCarry* this) {
}
void func_809AB4A8(ObjGrassCarry* this, PlayState* play) {
- ObjGrassCarry* this2 = this;
+ Actor* thisx = &this->actor;
- if (Actor_HasParent(&this->actor, play)) {
+ if (Actor_HasParent(thisx, play)) {
func_809AB5FC(this);
if (this->unk_194 != NULL) {
this->unk_194->unk_0F |= 4;
}
- this->actor.draw = func_809ABB7C;
- this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
- this->actor.shape.shadowAlpha = 60;
- this->actor.shape.shadowScale = 1.0f;
+ thisx->draw = func_809ABB7C;
+ thisx->shape.shadowDraw = ActorShadow_DrawCircle;
+ thisx->shape.shadowAlpha = 60;
+ thisx->shape.shadowScale = 1.0f;
this->unk_190->unk_3292 ^= 1;
- this->actor.room = -1;
- SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT);
+ thisx->room = -1;
+ SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT);
} else if (this->unk_190->unk_3294 != NULL) {
Player* player = GET_PLAYER(play);
this->unk_194 = this->unk_190->unk_3294;
- Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_194->unk_00);
- this->actor.shape.rot.y = this->actor.world.rot.y = this->unk_194->unk_0C;
- this->unk_198 = this2->unk_194->unk_0E;
- this->actor.xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor);
- this->actor.playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor);
- this->actor.xyzDistToPlayerSq = SQ(this->actor.xzDistToPlayer) + SQ(this->actor.playerHeightRel);
- this->actor.yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor);
+ Math_Vec3f_Copy(&thisx->world.pos, &this->unk_194->unk_00);
+ thisx->shape.rot.y = thisx->world.rot.y = this->unk_194->unk_0C;
+ this->unk_198 = this->unk_194->unk_0E;
+ thisx->xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor);
+ thisx->playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor);
+ thisx->xyzDistToPlayerSq = SQ(thisx->xzDistToPlayer) + SQ(thisx->playerHeightRel);
+ thisx->yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor);
Actor_OfferCarry(&this->actor, play);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
index 8b851285a..40db98b1f 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
@@ -349,7 +349,7 @@ void ObjHakaisi_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_194 == 0) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -429,7 +429,7 @@ void func_80B1544C(Actor* thisx, PlayState* play) {
void func_80B154A0(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (OBJHAKAISI_GET_FF(thisx) == 4) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
index aef42693b..f9d1f0252 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
@@ -267,7 +267,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) {
if ((thisx->projectedPos.z <= 2150.0f) || ((this->unk_1A2 & 1) && (thisx->projectedPos.z < 2250.0f))) {
thisx->shape.shadowAlpha = 160;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -277,7 +277,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) {
f32 sp20 = (2250.0f - thisx->projectedPos.z) * 2.55f;
thisx->shape.shadowAlpha = sp20 * 0.627451f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c
index a2007ad9b..b390644c7 100644
--- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c
+++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c
@@ -90,7 +90,8 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) {
ObjHariko* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Push();
Matrix_RotateXS(this->headRotation.x, MTXMODE_APPLY);
@@ -101,5 +102,6 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_OPA_DISP++, gHarikoFaceDL);
Matrix_Pop();
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
index 7b0351e78..d69c8d0fd 100644
--- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
+++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
@@ -199,7 +199,8 @@ void ObjHgdoor_Update(Actor* thisx, PlayState* play) {
void ObjHgdoor_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (OBJHGDOOR_IS_RIGHT_DOOR(thisx)) {
diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
index 26d89f00d..40e8b9323 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
@@ -145,7 +145,7 @@ void ObjHsblock_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, 255);
gSPDisplayList(POLY_OPA_DISP++, sDisplayLists[OBJHSBLOCK_GET_3(thisx)]);
diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
index 692fa8448..b04dff8a0 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
@@ -639,21 +639,21 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) {
if ((this->actionFunc == func_80A54C04) || (this->actionFunc == func_80A54CEC)) {
if (this->actor.projectedPos.z <= 4300.0f) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0xFF, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_002F60);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_003110);
} else if (this->actor.projectedPos.z < 4500.0f) {
sp38 = (4500.0f - this->actor.projectedPos.z) * 1.275f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -665,7 +665,7 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) {
EnHugebombiwaStruct* ptr;
Gfx* gfx = POLY_OPA_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) {
ptr = &this->unk_190[i];
@@ -697,9 +697,10 @@ void func_80A55B34(Actor* thisx, PlayState* play) {
}
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_OPA_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) {
ptr = &this->unk_190[i];
diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
index 41cdd8369..7559c4db7 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
@@ -29,16 +29,16 @@ AnimatedMaterial* D_80B9DED0;
AnimatedMaterial* D_80B9DED4;
typedef struct {
- /* 0x00 */ u8 unk_00;
- /* 0x01 */ u8 unk_01;
- /* 0x02 */ u8 unk_02;
+ /* 0x0 */ u8 unk_00;
+ /* 0x1 */ u8 unk_01;
+ /* 0x2 */ u8 unk_02;
} ObjHansuiBssStruct; // size = 0x3
ObjHansuiBssStruct D_80B9DED8;
typedef struct {
- /* 0x00 */ u8 unk_00;
- /* 0x01 */ u8 unk_01;
+ /* 0x0 */ u8 unk_00;
+ /* 0x1 */ u8 unk_01;
} ObjHansuiStruct; // size = 0x2
ObjHansuiStruct D_80B9DC70[] = {
@@ -130,8 +130,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) {
this->unk_18C = 0;
Math_Vec3f_Copy(&sp40, &player->actor.world.pos);
- sp40.x += randPlusMinusPoint5Scaled(10.0f);
- sp40.z += randPlusMinusPoint5Scaled(10.0f);
+ sp40.x += Rand_CenteredFloat(10.0f);
+ sp40.z += Rand_CenteredFloat(10.0f);
sp40.y += Rand_ZeroFloat(2.0f);
EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 2.0f * Rand_ZeroOne(), 1);
@@ -144,8 +144,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) {
Math_Vec3f_Copy(&sp40, &player->actor.world.pos);
this->unk_18C = 0;
- sp40.x += randPlusMinusPoint5Scaled(10.0f);
- sp40.z += randPlusMinusPoint5Scaled(10.0f);
+ sp40.x += Rand_CenteredFloat(10.0f);
+ sp40.z += Rand_CenteredFloat(10.0f);
sp40.y += Rand_ZeroFloat(45.0f);
EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 1, 1);
@@ -184,8 +184,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) {
Math_ApproachF(&this->unk_1A0, 3.0f, 1.0f, 1.0f);
Math_ApproachF(&this->unk_19C, this->unk_1A0, 1.0f, 0.1f);
}
- player->unk_B84 = this->unk_1A4;
- player->unk_B80 = this->unk_19C;
+ player->pushedYaw = this->unk_1A4;
+ player->pushedSpeed = this->unk_19C;
}
} else {
if (this->unk_172 & 8) {
diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
index c06abbe7d..1f0450b28 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
@@ -12,15 +12,15 @@ typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*);
#define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
-enum {
+typedef enum {
/* 0 */ OBJHUNSUI_F000_0,
/* 1 */ OBJHUNSUI_F000_1,
/* 2 */ OBJHUNSUI_F000_2,
/* 3 */ OBJHUNSUI_F000_3,
/* 4 */ OBJHUNSUI_F000_4,
/* 5 */ OBJHUNSUI_F000_5,
- /* 6 */ OBJHUNSUI_F000_6,
-};
+ /* 6 */ OBJHUNSUI_F000_6
+} ObjHunsuiParam;
typedef struct ObjHunsui {
/* 0x000 */ DynaPolyActor dyna;
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
index 0ef50dc98..d1601e69d 100644
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
+++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
@@ -156,9 +156,9 @@ void func_80931828(ObjIcePoly* this, PlayState* play) {
temp = spA0.y - sp90;
for (i = 0; i < 30; i++) {
- sp94.x = randPlusMinusPoint5Scaled(12.0f);
+ sp94.x = Rand_CenteredFloat(12.0f);
sp94.y = Rand_ZeroFloat(15.0f);
- sp94.z = randPlusMinusPoint5Scaled(12.0f);
+ sp94.z = Rand_CenteredFloat(12.0f);
spA0.x = (this->colliders1[0].dim.radius * (sp94.x * (1.0f / 12))) + this->actor.world.pos.x;
spA0.z = (this->colliders1[0].dim.radius * (sp94.z * (1.0f / 12))) + this->actor.world.pos.z;
@@ -347,7 +347,7 @@ void ObjIcePoly_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800B8118(&this->actor, play, 0);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
index a1e0d64bc..0ae8abe18 100644
--- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
+++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
@@ -239,12 +239,12 @@ void func_80A237A4(ObjIceblock* this) {
((this->unk_244 - ((600.0f * this->dyna.actor.scale.y) - 90.0f)) + (sp20 * ptr->unk_08)) + ptr->unk_00;
}
-void func_80A23938(ObjIceblock* this2) {
- ObjIceblock* this = this2;
+void func_80A23938(ObjIceblock* this) {
+ Actor* thisx = &this->dyna.actor;
if (this->unk_1B0 & 0x80) {
- Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0, 400);
- Math_ScaledStepToS(&this->dyna.actor.shape.rot.z, 0, 400);
+ Math_ScaledStepToS(&thisx->shape.rot.x, 0, 400);
+ Math_ScaledStepToS(&thisx->shape.rot.z, 0, 400);
} else {
ObjIceBlockUnkStruct4* ptr = &this->unk_27C;
f32 phi_f0;
@@ -252,7 +252,7 @@ void func_80A23938(ObjIceblock* this2) {
if (this->unk_1B0 & 0x20) {
phi_f0 = 0.3f;
- ptr->unk_14 = this->dyna.actor.yawTowardsPlayer;
+ ptr->unk_14 = thisx->yawTowardsPlayer;
} else {
phi_f0 = 0.08f;
}
@@ -264,16 +264,15 @@ void func_80A23938(ObjIceblock* this2) {
temp = ptr->unk_16 - ptr->unk_14;
- ptr->unk_18 +=
- (s16)(temp * -0.04f * this->dyna.actor.xzDistToPlayer * this->dyna.actor.scale.x * (1.0f / 600.0f));
+ ptr->unk_18 += (s16)(temp * -0.04f * thisx->xzDistToPlayer * thisx->scale.x * (1.0f / 600.0f));
ptr->unk_18 = func_80A23090(ptr->unk_18, 50, 800);
ptr->unk_16 += ptr->unk_18;
- this->dyna.actor.shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C;
- this->dyna.actor.shape.rot.x = CLAMP(this->dyna.actor.shape.rot.x, -2000, 2000);
+ thisx->shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C;
+ thisx->shape.rot.x = CLAMP(thisx->shape.rot.x, -2000, 2000);
- this->dyna.actor.shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C;
- this->dyna.actor.shape.rot.z = CLAMP(this->dyna.actor.shape.rot.z, -2000, 2000);
+ thisx->shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C;
+ thisx->shape.rot.z = CLAMP(thisx->shape.rot.z, -2000, 2000);
}
}
@@ -671,13 +670,14 @@ void func_80A24B74(ObjIceblock* this, PlayState* play) {
s32 pad;
Vec3f sp20;
- if (this->dyna.actor.flags & ACTOR_FLAG_40) {
- if (1) {}
- sp20.x = this->dyna.actor.world.pos.x;
- sp20.y = this->unk_244;
- sp20.z = this->dyna.actor.world.pos.z;
- EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0);
+ if (!(this->dyna.actor.flags & ACTOR_FLAG_40)) {
+ return;
}
+
+ sp20.x = this->dyna.actor.world.pos.x;
+ sp20.y = this->unk_244;
+ sp20.z = this->dyna.actor.world.pos.z;
+ EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0);
}
void func_80A24BDC(ObjIceblock* this, PlayState* play, f32 arg2, f32 arg3, s32 arg4) {
@@ -1527,7 +1527,7 @@ void func_80A26BF8(ObjIceblock* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
sp70.z = 0;
for (i = 0; i < ARRAY_COUNT(this->unk_1B4); i++) {
diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c
index af05f0ba3..608dde82a 100644
--- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c
+++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c
@@ -13,9 +13,9 @@
#define THIS ((ObjJgameLight*)thisx)
typedef enum {
- /* 0x0 */ OBJJGAMELIGHT_NONE,
- /* 0x1 */ OBJJGAMELIGHT_CORRECT,
- /* 0x2 */ OBJJGAMELIGHT_INCORRECT,
+ /* 0 */ OBJJGAMELIGHT_NONE,
+ /* 1 */ OBJJGAMELIGHT_CORRECT,
+ /* 2 */ OBJJGAMELIGHT_INCORRECT
} ObjJgameLightSignal;
void ObjJgameLight_Init(Actor* thisx, PlayState* play);
@@ -93,7 +93,7 @@ void ObjJgameLight_Destroy(Actor* thisx, PlayState* play) {
void func_80C15474(ObjJgameLight* this, PlayState* play) {
u8 temp_a1;
- if ((this->actor.colChkInfo.health & OBJLUPYGAMELIFT_IGNITE_FIRE) && (this->isOn == false)) {
+ if ((this->actor.colChkInfo.health & OBJLUPYGAMELIFT_IGNITE_FIRE) && !this->isOn) {
if (this->lightRadius < 160) {
this->lightRadius += 40;
} else {
@@ -172,11 +172,11 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, &gObjectSyokudaiTypeSwitchCausesFlameDL);
if (this->alpha > 0) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (this->alpha > 255) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, 255);
} else {
@@ -192,7 +192,7 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) {
if (this->flameScaleProportion != 0.0f) {
f32 scale;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
scale = (this->flameScaleProportion * 27.0f) / 10000.0f;
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (this->flameScroll * -20) & 0x1FF,
diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
index 26191e397..048aa9bcc 100644
--- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
+++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
@@ -28,7 +28,7 @@
typedef enum {
/* -1 */ OBJKENDOKANBAN_DIR_DOWN = -1,
/* 0 */ OBJKENDOKANBAN_DIR_UNDETERMINED,
- /* 1 */ OBJKENDOKANBAN_DIR_UP,
+ /* 1 */ OBJKENDOKANBAN_DIR_UP
} ObjKendoKanbanDirection;
void ObjKendoKanban_Init(Actor* thisx, PlayState* play);
@@ -499,7 +499,7 @@ void ObjKendoKanban_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->boardFragments == OBJKENDOKANBAN_PART_FULL) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
index eb14dff6a..4d3bdc348 100644
--- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
+++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
@@ -65,7 +65,7 @@ s32 ObjKibako2_ContainsSkulltula(ObjKibako2* this, PlayState* play) {
if ((u16)actorSpawnParam & 3) {
flag = ((actorSpawnParam & 0x3FC) >> 2) & 0xFF;
}
- return !(flag >= 0 && Flags_GetTreasure(play, flag));
+ return !((flag >= 0) && Flags_GetTreasure(play, flag));
}
void ObjKibako2_Break(ObjKibako2* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c
index b52a66d84..5bf35d48d 100644
--- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c
+++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c
@@ -73,7 +73,7 @@ void ObjKinoko_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gfx = POLY_XLU_DISP;
gDPSetPrimColor(&gfx[0], 0, 0, 169, 63, 186, (u8)thisx->speed);
diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
index 31e6905ec..ee8536caa 100644
--- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
+++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
@@ -122,7 +122,7 @@ void ObjKzsaku_Update(Actor* thisx, PlayState* play) {
void ObjKzsaku_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_kzsaku_DL_000040);
diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
index c54378a74..6a6937e7e 100644
--- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
+++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
@@ -55,11 +55,11 @@ static ColliderCylinderInit sCylinderInit = {
};
typedef struct {
- /* 0x00 */ f32 scale;
- /* 0x04 */ s16 radius;
- /* 0x06 */ s16 height;
- /* 0x08 */ s16 yShift;
- /* 0x0C */ s32 params;
+ /* 0x0 */ f32 scale;
+ /* 0x4 */ s16 radius;
+ /* 0x6 */ s16 height;
+ /* 0x8 */ s16 yShift;
+ /* 0xC */ s32 params;
} LightblockTypeVars; // size = 0x10
static LightblockTypeVars sLightblockTypeVars[] = {
@@ -193,18 +193,20 @@ void ObjLightblock_Draw(Actor* thisx, PlayState* play) {
ObjLightblock* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
+
if (this->alpha < 255) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->alpha);
gSPDisplayList(POLY_XLU_DISP++, object_lightblock_DL_000178);
} else {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, object_lightblock_DL_000178);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
index 34479a72a..408668ecb 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
@@ -370,7 +370,7 @@ void ObjLightSwitch_DrawOpa(ObjLightswitch* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6),
((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6));
gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0);
@@ -406,7 +406,7 @@ void ObjLightSwitch_DrawXlu(ObjLightswitch* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6),
((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6));
gSPSegment(POLY_XLU_DISP++, 0x09, D_801AEF88);
diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c
index cb957b839..7cace2621 100644
--- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c
+++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c
@@ -65,7 +65,7 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.home.rot.y = 0;
this->dyna.actor.home.rot.z = 0;
- path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH(thisx)];
+ path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx)];
this->pointIndex = OBJLUPYGAMELIFT_GET_7(thisx);
this->count = path->count;
if (this->pointIndex >= this->count) {
diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h
index e25f9cd6d..a1928c473 100644
--- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h
+++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h
@@ -3,7 +3,7 @@
#include "global.h"
-#define OBJLUPYGAMELIFT_GET_PATH(thisx) ((thisx)->params & 0x7F)
+#define OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F)
#define OBJLUPYGAMELIFT_GET_7(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJLUPYGAMELIFT_GET_C(thisx) (((thisx)->params >> 0xC) & 1)
diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
index bb7d30f69..bcef92843 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
@@ -61,7 +61,7 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) {
Path* path;
s32 childPointIndex;
- path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(&this->actor)];
+ path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATH_INDEX(&this->actor)];
this->pathPoints = Lib_SegmentedToVirtual(path->points);
this->pathCount = path->count;
childPointIndex = ObjMakeoshihiki_GetChildSpawnPointIndex(this, play);
diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
index 47fbe831b..fbe8c1283 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
@@ -5,7 +5,7 @@
struct ObjMakeoshihiki;
-#define OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(thisx) (((thisx)->params >> 7) & 0x7F)
+#define OBJMAKEOSHIHIKI_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x7F)
#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(thisx) ((thisx)->home.rot.z & 0x7F)
#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(thisx) ((thisx)->params & 0x7F)
diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c
index 8ff6e8455..75ff18b6b 100644
--- a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c
+++ b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c
@@ -58,7 +58,7 @@ void ObjMilkBin_Init(Actor* thisx, PlayState* play) {
this->disableDraw = 0;
this->type = thisx->params;
- if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
this->disableDraw |= 1;
}
}
@@ -74,14 +74,14 @@ void ObjMilkBin_Update(Actor* thisx, PlayState* play2) {
ObjMilkBin* this = THIS;
if (this->type == OBJ_MILK_BIN_TYPE_1) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
if (((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == 1)) || (gSaveContext.save.day >= 3)) {
Actor_Kill(&this->actor);
return;
}
}
} else if (this->type == OBJ_MILK_BIN_TYPE_2) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
this->disableDraw &= ~1;
} else {
this->disableDraw |= 1;
diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c
index e1ee3cee5..dab7489ee 100644
--- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c
+++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c
@@ -146,13 +146,15 @@ void ObjMoonStone_Draw(Actor* thisx, PlayState* play) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGiMoonsTearItemDL);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gGiMoonsTearGlowDL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c
index b0ac87b4e..d08f2d638 100644
--- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c
+++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c
@@ -64,7 +64,7 @@ void func_80C06B70(ObjMuPict* this, PlayState* play) {
s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (this->actor.csId < 0) {
+ if (this->actor.csId <= CS_ID_NONE) {
func_80C06DC8(this, play);
func_80C06CC4(this);
} else {
diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
index 95c43a4bf..f63201966 100644
--- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
+++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
@@ -73,7 +73,8 @@ typedef enum {
} ObjMureChildState;
s32 func_808D78D0(ObjMure* this, PlayState* play) {
- if (this->type == OBJMURE_TYPE_FISH || this->type == OBJMURE_TYPE_BUGS || this->type == OBJMURE_TYPE_BUTTERFLY) {
+ if ((this->type == OBJMURE_TYPE_FISH) || (this->type == OBJMURE_TYPE_BUGS) ||
+ (this->type == OBJMURE_TYPE_BUTTERFLY)) {
Actor_ProcessInitChain(&this->actor, sInitChain);
} else {
return false;
@@ -135,6 +136,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) {
switch (this->childrenStates[i]) {
case OBJMURE_CHILD_STATE_DEAD:
break;
+
case OBJMURE_CHILD_STATE_2:
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = Actor_SpawnAsChildAndCutscene(
@@ -148,6 +150,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) {
this->children[i]->room = this->actor.room;
}
break;
+
default:
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = Actor_SpawnAsChildAndCutscene(
@@ -190,9 +193,13 @@ void ObjMure_SpawnActors(ObjMure* this, PlayState* play) {
case 0:
ObjMure_SpawnActors0(&this->actor, play);
break;
+
case 1:
ObjMure_SpawnActors1(this, play);
break;
+
+ default:
+ break;
}
}
@@ -205,12 +212,14 @@ void ObjMure_KillActorsImpl(ObjMure* this, PlayState* play) {
case OBJMURE_CHILD_STATE_DEAD:
this->children[i] = NULL;
break;
+
case OBJMURE_CHILD_STATE_2:
if (this->children[i] != NULL) {
Actor_Kill(this->children[i]);
this->children[i] = NULL;
}
break;
+
default:
if (this->children[i] != NULL) {
if (Actor_HasParent(this->children[i], play)) {
@@ -244,7 +253,7 @@ void ObjMure_CheckChildren(ObjMure* this, PlayState* play) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD;
this->children[i] = NULL;
}
- } else if (this->childrenStates[i] == OBJMURE_CHILD_STATE_2 && this->children[i]->update == NULL) {
+ } else if ((this->childrenStates[i] == OBJMURE_CHILD_STATE_2) && (this->children[i]->update == NULL)) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD;
this->children[i] = NULL;
}
@@ -367,7 +376,7 @@ void ObjMure_GroupBehavior1(ObjMure* this, PlayState* play) {
maxChildren = ObjMure_GetMaxChildSpawns(this);
for (i = 0; i < maxChildren; i++) {
if (this->children[i] != NULL) {
- if (this->children[i]->child != NULL && this->children[i]->child->update == NULL) {
+ if ((this->children[i]->child != NULL) && (this->children[i]->child->update == NULL)) {
this->children[i]->child = NULL;
}
}
@@ -380,7 +389,7 @@ static ObjMureActionFunc sTypeGroupBehaviorFunc[] = {
void ObjMure_ActiveState(ObjMure* this, PlayState* play) {
ObjMure_CheckChildren(this, play);
- if (sZClip[this->type] + 40.0f <= fabsf(this->actor.projectedPos.z)) {
+ if ((sZClip[this->type] + 40.0f) <= fabsf(this->actor.projectedPos.z)) {
this->actionFunc = ObjMure_CulledState;
this->actor.flags &= ~ACTOR_FLAG_10;
ObjMure_KillActors(this, play);
diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
index c8f657c13..10f12c64a 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
@@ -108,7 +108,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) {
}
void func_8098F364(ObjMure3* this, PlayState* play) {
- s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)];
+ s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)];
s32 i;
EnItem00** collectible;
@@ -126,7 +126,7 @@ void func_8098F364(ObjMure3* this, PlayState* play) {
}
void func_8098F438(ObjMure3* this, PlayState* play) {
- s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)];
+ s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)];
s32 i;
for (i = 0; i < count; i++) {
@@ -134,7 +134,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) {
if ((*collectible != NULL) && !((this->unk164 >> i) & 1)) {
if ((*collectible)->unk1A4 != 0) {
- Flags_SetSwitch(play, OBJMURE3_PARAMS_7F(&this->actor));
+ Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&this->actor));
}
if ((*collectible)->actor.update == NULL) {
this->unk164 |= (1 << i);
@@ -147,7 +147,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) {
void ObjMure3_Init(Actor* thisx, PlayState* play) {
ObjMure3* this = THIS;
- if (Flags_GetSwitch(play, OBJMURE3_PARAMS_7F(&this->actor))) {
+ if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) {
Actor_Kill(&this->actor);
return;
}
@@ -175,7 +175,7 @@ void func_8098F5E4(ObjMure3* this, PlayState* play) {
if (Math3D_XZLengthSquared(this->actor.projectedPos.x, this->actor.projectedPos.z) < SQ(1150.0f)) {
this->actor.flags |= ACTOR_FLAG_10;
- sSpawnFuncs[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)](this, play);
+ sSpawnFuncs[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)](this, play);
func_8098F66C(this);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
index 8715e4308..336a092b4 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
@@ -3,8 +3,8 @@
#include "global.h"
-#define OBJMURE3_PARAMS_7F(thisx) ((thisx)->params & 0x7F)
-#define OBJMURE3_PARAMS_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7)
+#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F)
+#define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7)
struct ObjMure3;
diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
index d5dfed84d..fb219bfee 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
@@ -4,7 +4,6 @@
* Description: Sakon's Hideout Objects (Sun's Mask, doors, etc)
*/
-#include "prevent_bss_reordering.h"
#include "z_obj_nozoki.h"
#include "objects/object_secom_obj/object_secom_obj.h"
@@ -130,7 +129,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) {
}
s32 func_80BA26A8(ObjNozoki* this) {
- if (this->csId < 0) {
+ if (this->csId <= CS_ID_NONE) {
return true;
}
diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
index eab144cbd..168168f41 100644
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
+++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
@@ -74,7 +74,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) {
this->unk16C = 1;
this->unk170 = Lib_SegmentedToVirtual(path->points);
func_80AC94C0(this, this->unk168);
- if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) &&
+ if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) &&
(Flags_GetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) {
func_80AC96B4(this);
} else {
@@ -137,7 +137,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
this->unk168 += this->unk16C;
thisx->speed *= 0.4f;
if (((this->unk168 >= this->unk164) && (this->unk16C > 0)) || ((this->unk168 <= 0) && (this->unk16C < 0))) {
- if (paramsC == OBJOCARINALIFT_PARAMSC_0) {
+ if (paramsC == OBJOCARINALIFT_PARAM_0) {
this->unk16C = -this->unk16C;
this->timer = 10;
func_80AC9A68(this);
@@ -155,11 +155,11 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
func_80AC99C0(this);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
sp34 = false;
- } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) {
+ } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) {
func_80AC9AB8(this);
}
}
- } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) {
+ } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) {
func_80AC9AB8(this);
}
if (sp34) {
@@ -176,7 +176,7 @@ void func_80AC99D4(ObjOcarinalift* this, PlayState* play) {
if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_80AC94C0(this, this->unk168);
DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
- if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAMSC_1) &&
+ if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAM_1) &&
(this->unk168 == OBJOCARINALIFT_GET_1F(&this->dyna.actor))) {
func_80AC9AB8(this);
} else {
@@ -218,7 +218,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) {
if (func_800B886C(&this->dyna.actor, play)) {
if (play->msgCtx.ocarinaMode == 4) {
if (play->msgCtx.lastPlayedSong == 0) {
- if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) {
+ if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) {
Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor));
}
CutsceneManager_Queue(this->dyna.actor.csId);
diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h
index 3789383c2..abb1e440b 100644
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h
+++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h
@@ -24,9 +24,9 @@ typedef struct ObjOcarinalift {
/* 0x176 */ s16 cutsceneTimer;
} ObjOcarinalift; // size = 0x178
-typedef enum ObjOcarinaliftParams {
- /* 0x0 */ OBJOCARINALIFT_PARAMSC_0,
- /* 0x1 */ OBJOCARINALIFT_PARAMSC_1
-} ObjOcarinaliftParams;
+typedef enum ObjOcarinaliftParam {
+ /* 0 */ OBJOCARINALIFT_PARAM_0,
+ /* 1 */ OBJOCARINALIFT_PARAM_1
+} ObjOcarinaliftParam;
#endif // Z_OBJ_OCARINALIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
index c3e180f50..736d80d10 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
@@ -591,7 +591,7 @@ void ObjOshihiki_Draw(Actor* thisx, PlayState* play) {
}
this->stateFlags &= ~PUSHBLOCK_MOVE_UNDER;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
AnimatedMat_DrawStep(play, this->texture, this->textureStep);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
index d2f61e2cf..4740b907a 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
@@ -12,7 +12,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*);
#define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F)
#define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
-enum {
+typedef enum {
/* 0 */ OBJOSHIHIKI_F_0,
/* 1 */ OBJOSHIHIKI_F_1,
/* 2 */ OBJOSHIHIKI_F_2,
@@ -21,8 +21,8 @@ enum {
/* 5 */ OBJOSHIHIKI_F_5,
/* 6 */ OBJOSHIHIKI_F_6,
/* 7 */ OBJOSHIHIKI_F_7,
- /* 8 */ OBJOSHIHIKI_F_8,
-};
+ /* 8 */ OBJOSHIHIKI_F_8
+} ObjOshihikiParam;
#define OBJOSHIHIKI_FF00_0 0
#define OBJOSHIHIKI_FF00_80 0x80
diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
index dbd0dfe31..649343554 100644
--- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
+++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
@@ -255,12 +255,12 @@ void func_80A851C8(Actor* thisx, PlayState* play) {
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(animMat));
}
if (opaDList != NULL) {
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, opaDList);
}
if (xluDList != NULL) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, xluDList);
}
@@ -285,7 +285,8 @@ void func_80A85304(Actor* thisx, PlayState* play) {
}
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
for (i = 0; i < ARRAY_COUNT(sp6C); i++) {
index = sp6C[i];
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(info->animMat[index]));
@@ -293,5 +294,6 @@ void func_80A85304(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, info->xluDLists[index]);
};
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
index 0b5021ccb..8a124b0ab 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
@@ -44,7 +44,7 @@ typedef struct {
/* 0x0 */ s16 unk_00;
/* 0x4 */ CollisionHeader* unk_04;
/* 0x8 */ Gfx* unk_08;
-} ObjPzlblockStruct;
+} ObjPzlblockStruct; // size = 0xC
ObjPzlblockStruct D_809A4060[] = {
{ GAMEPLAY_DANGEON_KEEP, &gameplay_dangeon_keep_Colheader_01D488, gameplay_dangeon_keep_DL_01C228 },
@@ -114,20 +114,20 @@ s32 func_809A34E0(ObjPzlblock* this, s32 arg1) {
}
if (temp_v0 == 4) {
- return arg1 == 0 || arg1 == 1;
+ return (arg1 == 0) || (arg1 == 1);
}
if (temp_v0 == 5) {
- return arg1 == 2 || arg1 == 3;
+ return (arg1 == 2) || (arg1 == 3);
}
if (temp_v0 == 6) {
if (this->unk_176 != 0) {
- return arg1 == 0 || arg1 == 1;
+ return (arg1 == 0) || (arg1 == 1);
}
if (this->unk_178 != 0) {
- return arg1 == 2 || arg1 == 3;
+ return (arg1 == 2) || (arg1 == 3);
}
return true;
}
@@ -364,7 +364,7 @@ void func_809A3F0C(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sp28->r, sp28->g, sp28->b, 255);
diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
index 3c8a7ecc0..1a63e89cb 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
@@ -86,7 +86,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) {
if (this->speed < 0.01f) {
this->actionFunc = ObjRaillift_DoNothing;
} else {
- path = &play->setupPathList[OBJRAILLIFT_GET_PATH(thisx)];
+ path = &play->setupPathList[OBJRAILLIFT_GET_PATH_INDEX(thisx)];
this->curPoint = OBJRAILLIFT_GET_STARTING_POINT(thisx);
this->endPoint = path->count - 1;
this->direction = 1;
@@ -259,12 +259,14 @@ void ObjRaillift_Draw(Actor* thisx, PlayState* play) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TwoTexScrollEnvColor(play->state.gfxCtx, 0, play->gameplayFrames, 0, 32, 32, 1, 0, 0, 32, 32, 0, 0,
0, 160));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_raillift_DL_004BF0);
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
index b921b0e5a..dc197432f 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
@@ -10,7 +10,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*);
#define OBJRAILLIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1)
#define OBJRAILLIFT_HAS_FLAG(thisx) (((thisx)->params >> 0xD) & 1)
#define OBJRAILLIFT_GET_FLAG(thisx) ((thisx)->home.rot.x & 0x7F)
-#define OBJRAILLIFT_GET_PATH(thisx) ((thisx)->params & 0x7F)
+#define OBJRAILLIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F)
#define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F)
#define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f)
#define OBJRAILLIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1)
diff --git a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h
index df3fe1dee..e059b6baa 100644
--- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h
+++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h
@@ -10,7 +10,7 @@
typedef enum {
/* 0 */ OBJROTLIFT_TYPE_PLATFORMS,
- /* 1 */ OBJROTLIFT_TYPE_SPIKES,
+ /* 1 */ OBJROTLIFT_TYPE_SPIKES
} ObjRotliftType;
struct ObjRotlift;
diff --git a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c
index 6f93935b2..bd567ca2d 100644
--- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c
+++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c
@@ -85,7 +85,7 @@ void ObjShutter_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gBankShutterDL);
diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
index fa04972ef..28ce8cda8 100644
--- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
+++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
@@ -684,7 +684,7 @@ void ObjSkateblock_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
AnimatedMat_DrawStep(play, D_80A22A18, 0);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c
index dd02f6c1b..a34050cc2 100644
--- a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c
+++ b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c
@@ -115,7 +115,7 @@ void func_80A3D9C4(ObjSmork* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20));
diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
index c94d67860..92ac9ad85 100644
--- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
+++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
@@ -73,10 +73,10 @@ static ColliderJntSphInit sJntSphInit = {
};
typedef struct {
- /* 0x00 */ s16 unk_00;
- /* 0x02 */ s16 unk_02;
- /* 0x04 */ ObjSnowballActionFunc unk_04;
-} ObjSnowballStruct2;
+ /* 0x0 */ s16 unk_00;
+ /* 0x2 */ s16 unk_02;
+ /* 0x4 */ ObjSnowballActionFunc unk_04;
+} ObjSnowballStruct2; // size = 0x8
static ObjSnowballStruct2 D_80B04F84[] = {
{ -1, 0, func_80B02D58 },
@@ -549,7 +549,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) {
this->unk_20A = 0;
}
- if (this->actor.csId < 0) {
+ if (this->actor.csId <= CS_ID_NONE) {
func_80B03FF8(this, play);
if (this->unk_20A == 0) {
func_80B04608(this, play);
@@ -818,7 +818,7 @@ void func_80B04D34(Actor* thisx, PlayState* play) {
if ((ptr->unk_28 != NULL) && (ptr->unk_2C > 0)) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0,
0, COMBINED);
diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
index 907df33fc..c366a6982 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
@@ -234,7 +234,7 @@ typedef struct {
/* 0x1C */ f32 unk_1C;
/* 0x20 */ f32 unk_20;
/* 0x24 */ f32 unk_24;
-} ObjSpidertentStruct;
+} ObjSpidertentStruct; // size = 0x28
ObjSpidertentStruct D_80B31350[] = {
{
@@ -272,7 +272,7 @@ typedef struct {
/* 0x0F */ s8 unk_0F;
/* 0x10 */ Color_RGBA8 unk_10;
/* 0x14 */ Color_RGBA8 unk_14;
-} ObjSpidertentStruct2;
+} ObjSpidertentStruct2; // size = 0x18
ObjSpidertentStruct2 D_80B313A0[] = {
{
@@ -812,7 +812,7 @@ void ObjSpidertent_Draw(Actor* thisx, PlayState* play) {
gfx = POLY_XLU_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(gfx++, 0, 0xFF, this->unk_3C2, this->unk_3C3, this->unk_3C4, temp_f18);
gSPDisplayList(gfx++, D_80B31350[params].unk_00);
diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
index 4541baa2a..4ff089a72 100644
--- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
@@ -659,7 +659,7 @@ void ObjSpinyroll_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
temp_f26 = Math_CosS(this->dyna.actor.shape.rot.y) * 120.0f;
temp_f28 = Math_SinS(this->dyna.actor.shape.rot.y) * -120.0f;
diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
index 2c03f8689..1cab193db 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -397,7 +397,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.flags |= 0x80;
}
if (type == OBJSWITCH_TYPE_EYE) {
- if (sIsSegmentTableInit == false) {
+ if (!sIsSegmentTableInit) {
s32 i;
s32 j;
@@ -509,7 +509,7 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) {
if (OBJ_SWITCH_GET_TYPE(&this->dyna.actor) == OBJSWITCH_TYPE_FLOOR_RUSTY) {
if (this->colliderTris.base.acFlags & AC_HIT) {
- this->colliderTris.base.acFlags &= ~AT_HIT;
+ this->colliderTris.base.acFlags &= ~AC_HIT;
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base);
@@ -968,12 +968,14 @@ void ObjSwitch_DrawFloorSwitch(ObjSwitch* this, PlayState* play) {
Gfx* opa;
OPEN_DISPS(play->state.gfxCtx);
+
opa = POLY_OPA_DISP;
- gSPDisplayList(opa++, &sSetupDL[6 * 25]);
+ gSPDisplayList(opa++, gSetupDLs[SETUPDL_25]);
gSPMatrix(opa++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(opa++, 0, 0x80, this->color.r, this->color.g, this->color.b, 255);
gSPDisplayList(opa++, gFloorSwitch1DL);
POLY_OPA_DISP = opa;
+
CLOSE_DISPS(play->state.gfxCtx);
} else {
Gfx_DrawDListOpa(play, sFloorSwitchDL[OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor)]);
@@ -990,7 +992,7 @@ void ObjSwitch_DrawVisibleEyeSwitch(ObjSwitch* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_OPA_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]);
gSPDisplayList(POLY_OPA_DISP++, sEyeSwitchDL[subType]);
@@ -1004,7 +1006,7 @@ void ObjSwitch_DrawInvisibleEyeSwitch(ObjSwitch* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_XLU_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]);
gSPDisplayList(POLY_XLU_DISP++, sEyeSwitchDL[subType]);
@@ -1027,8 +1029,8 @@ void ObjSwitch_DrawCrystalSwitch(ObjSwitch* this, PlayState* play) {
func_800B8118(&this->dyna.actor, play, 0);
AnimatedMat_DrawStep(play, sCrystalSwitchAnimatedMat, this->crystalAnimTimer);
- func_8012C28C(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gCrystalSwitchBaseDL);
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 902caa42b..1b1ca74a0 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -293,7 +293,8 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) {
f32 flameScale;
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, sDLists[OBJ_SYOKUDAI_GET_TYPE(thisx)]);
if (this->snuffTimer != OBJ_SYOKUDAI_SNUFF_OUT) {
@@ -307,7 +308,7 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) {
flameScale = (f32)this->snuffTimer / OBJ_SYOKUDAI_SNUFF_DEFAULT;
}
flameScale *= 0.0027f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0,
(this->flameTexScroll * -OBJ_SYOKUDAI_SNUFF_DEFAULT) & 0x1FF, 0x20, 0x80));
@@ -320,5 +321,6 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
index aeaddd2ee..6eac0ddbc 100644
--- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
+++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
@@ -141,10 +141,10 @@ void func_80B9B9C8(ObjTaru* this, PlayState* play) {
for (i = 0; i < 4; i++) {
for (j = phi_fp; j < phi_s5; j++) {
- temp_fs0 = randPlusMinusPoint5Scaled(10.0f) + -105.0f + (j * 30.0f);
- temp_fs1 = randPlusMinusPoint5Scaled(4.0f);
+ temp_fs0 = Rand_CenteredFloat(10.0f) + -105.0f + (j * 30.0f);
+ temp_fs1 = Rand_CenteredFloat(4.0f);
spD8.x = temp_fs0 * cos;
- spD8.y = randPlusMinusPoint5Scaled(10.0f) + 15.0f + (i * 30.0f);
+ spD8.y = Rand_CenteredFloat(10.0f) + 15.0f + (i * 30.0f);
spD8.z = temp_fs0 * sin;
spCC.x = (spD8.x * 0.05f) + (temp_fs1 * sin);
spCC.y = Rand_ZeroFloat(5.0f) + 2.0f;
diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
index c6ed2cc2c..cecb80832 100644
--- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
+++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
@@ -131,12 +131,12 @@ void ObjToge_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
- if (OBJTOGE_GET_PATH(thisx) == 0xFF) {
+ if (OBJTOGE_GET_PATH_INDEX(thisx) == OBJTOGE_PATH_INDEX_NONE) {
Actor_Kill(thisx);
return;
}
- path = &play->setupPathList[OBJTOGE_GET_PATH(thisx)];
+ path = &play->setupPathList[OBJTOGE_GET_PATH_INDEX(thisx)];
if (path->count != 2) {
Actor_Kill(thisx);
return;
diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h
index 8259e62c8..54cf02bf4 100644
--- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h
+++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h
@@ -7,11 +7,13 @@ struct ObjToge;
typedef void (*ObjTogeActionFunc)(struct ObjToge*, PlayState*);
-#define OBJTOGE_GET_PATH(thisx) ((thisx)->params & 0xFF)
+#define OBJTOGE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF)
#define OBJTOGE_GET_700(thisx) (((thisx)->params >> 8) & 7)
#define OBJTOGE_GET_3800(thisx) (((thisx)->params >> 0xB) & 7)
#define OBJTOGE_GET_4000(thisx) (((thisx)->params >> 0xE) & 1)
+#define OBJTOGE_PATH_INDEX_NONE 0xFF
+
typedef struct ObjToge {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c
index d5aeffd8f..a198f4a0f 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c
+++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c
@@ -140,7 +140,7 @@ void ObjTokeiStep_InitTimers(ObjTokeiStep* this) {
}
s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) {
- ObjTokeiStep* this2 = this;
+ Actor* thisx = &this->dyna.actor;
s32 i;
ObjTokeiStepPanel* panel;
f32 finalPosY;
@@ -179,8 +179,8 @@ s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) {
panel->pos.y += finalPosY;
}
if (panel->numBounces == 1) {
- ObjTokeiStep_SpawnDust(this2, panel, play);
- ObjTokeiStep_RequestQuakeAndRumble(this2, play);
+ ObjTokeiStep_SpawnDust(this, panel, play);
+ ObjTokeiStep_RequestQuakeAndRumble(this, play);
}
}
}
@@ -279,8 +279,9 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) {
Gfx* gfx;
OPEN_DISPS(play->state.gfxCtx);
+
gfx = POLY_OPA_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 0x19]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
for (i = 0; i < ARRAY_COUNT(this->panels); i++) {
panel = &this->panels[i];
@@ -289,5 +290,6 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) {
gSPDisplayList(gfx++, gClocktowerPanelDL);
}
POLY_OPA_DISP = gfx;
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c
index 3dc8b3297..21fe5f572 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c
+++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c
@@ -72,7 +72,7 @@ void ObjTokeiTurret_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_OPA_DISP;
- gSPDisplayList(gfx++, &sSetupDL[6 * 25]);
+ gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]);
gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(gfx++, gClockTownTurretPlatformTopDL);
POLY_OPA_DISP = gfx;
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h
index 620228f53..4ebde38ad 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h
+++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h
@@ -7,7 +7,7 @@
typedef enum {
/* 0 */ TURRET_TIER_BASE,
- /* 1 */ TURRET_TIER_TOP,
+ /* 1 */ TURRET_TIER_TOP
} TurretTierType;
struct ObjTokeiTurret;
diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
index 3b933157b..61fa2376f 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
@@ -124,7 +124,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) {
if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) ||
((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) {
ObjTokeidai_SetupTowerOpening(this);
- } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) {
+ } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) {
this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle;
this->actor.world.pos.y += this->actor.scale.y * 1900.0f;
this->actor.shape.yOffset = 1500.0f;
@@ -141,7 +141,7 @@ void ObjTokeidai_TowerClock_Init(ObjTokeidai* this, PlayState* play) {
if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) ||
((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) {
ObjTokeidai_SetupTowerOpening(this);
- } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) {
+ } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) {
this->actor.world.pos.y += (this->actor.scale.y * 5191.0f) - 50.0f;
this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f;
this->actor.world.pos.z += -Math_CosS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f;
@@ -178,8 +178,8 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) {
if (this->actor.child == NULL) {
type = OBJ_TOKEIDAI_TYPE(&this->actor);
- if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN ||
- type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) {
+ if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) ||
+ (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) {
this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0);
}
@@ -192,7 +192,7 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) {
this->actor.child->home.rot.x = 0x12C;
}
}
- } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) {
+ } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) {
this->spotlightIntensity = 0;
this->actor.world.pos.y += this->actor.scale.y * -2160.0f;
this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 5400.0f;
@@ -274,6 +274,9 @@ void ObjTokeidai_Init(Actor* thisx, PlayState* play) {
this->xluDList = gClockTowerEmptyDL;
this->actionFunc = ObjTokeidai_StaircaseToRooftop_Idle;
break;
+
+ default:
+ break;
}
}
@@ -284,7 +287,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
s32 currentClockMinute = GET_CURRENT_CLOCK_MINUTE(this);
if (currentClockMinute != this->clockMinute) {
- if (this->minuteRingOrExteriorGearRotationTimer == 8 && playSfx) {
+ if ((this->minuteRingOrExteriorGearRotationTimer == 8) && playSfx) {
Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND);
}
@@ -306,8 +309,8 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
this->minuteRingOrExteriorGearRotationTimer++;
- if ((currentClockMinute == 15 && this->minuteRingOrExteriorGearRotation < 0) ||
- (currentClockMinute != 15 &&
+ if (((currentClockMinute == 15) && (this->minuteRingOrExteriorGearRotation < 0)) ||
+ ((currentClockMinute != 15) &&
this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute))) {
this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute);
this->clockMinute = currentClockMinute;
@@ -318,7 +321,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
}
void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) {
- if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || this->actor.world.pos.y < 0.0f) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.world.pos.y < 0.0f)) {
this->actionFunc = ObjTokeidai_DoNothing;
} else {
this->actor.shape.rot.x += 0x50;
@@ -513,6 +516,9 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl
case 2:
Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_2);
break;
+
+ default:
+ break;
}
this->boundCount++;
@@ -609,7 +615,7 @@ void ObjTokeidai_DoNothing(ObjTokeidai* this, PlayState* play) {
}
void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) {
- if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || CURRENT_DAY >= 4) ||
+ if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
this->actor.draw = ObjTokeidai_Draw;
} else {
@@ -621,7 +627,7 @@ s32 ObjTokeidai_IsPostFirstCycleFinalHours(ObjTokeidai* this, PlayState* play) {
if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
return false;
}
- if (CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) {
+ if ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
ObjTokeidai_SetupTowerOpening(this);
return true;
}
@@ -650,8 +656,8 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) {
this->clockFaceRotationTimer++;
- if ((currentClockHour == 12 && this->clockFaceRotation < 0) ||
- (currentClockHour != 12 && this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour))) {
+ if (((currentClockHour == 12) && (this->clockFaceRotation < 0)) ||
+ ((currentClockHour != 12) && (this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour)))) {
this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour);
this->clockHour = currentClockHour;
this->clockFaceRotationalVelocity = 0;
@@ -682,7 +688,7 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) {
}
void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) {
- if (CURRENT_DAY == 3 && this->clockHour < 6 && gSaveContext.save.time < CLOCK_TIME(6, 0)) {
+ if ((CURRENT_DAY == 3) && (this->clockHour < 6) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
this->actor.draw = ObjTokeidai_Clock_Draw;
ObjTokeidai_SetupTowerOpening(this);
SET_WEEKEVENTREG(WEEKEVENTREG_08_40);
@@ -695,8 +701,8 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) {
this->actor.draw = ObjTokeidai_Clock_Draw;
} else {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) &&
- OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD &&
- CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
+ (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD) &&
+ (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) {
this->actor.draw = NULL;
}
this->clockTime = gSaveContext.save.time;
@@ -706,7 +712,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) {
}
}
- if (CURRENT_DAY != 3 || gSaveContext.save.time >= CLOCK_TIME(6, 0)) {
+ if ((CURRENT_DAY != 3) || (gSaveContext.save.time >= CLOCK_TIME(6, 0))) {
ObjTokeidai_RotateOnMinuteChange(this, true);
}
ObjTokeidai_RotateOnHourChange(this, play);
@@ -750,8 +756,8 @@ void ObjTokeidai_Counterweight_Idle(ObjTokeidai* this, PlayState* play) {
if (this->actor.child == NULL) {
type = OBJ_TOKEIDAI_TYPE(&this->actor);
- if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN ||
- type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) {
+ if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) ||
+ (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) {
this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0);
}
@@ -791,13 +797,13 @@ void ObjTokeidai_Draw(Actor* thisx, PlayState* play) {
if (this->opaDList != NULL) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->opaDList);
}
if (this->xluDList != NULL) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, this->xluDList);
}
@@ -809,7 +815,7 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(0.0f, this->yTranslation, 0.0f, MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, -1791.0f, MTXMODE_APPLY);
Matrix_RotateXS(-this->xRotation, MTXMODE_APPLY);
@@ -862,12 +868,12 @@ void ObjTokeidai_Counterweight_Draw(Actor* thisx, PlayState* play) {
// Draws the counterweight
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->opaDList);
// Draws the spotlight
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 255, 255, 235, 180, (s32)(this->spotlightIntensity * 2.55f));
gSPDisplayList(POLY_XLU_DISP++, this->xluDList);
@@ -887,7 +893,7 @@ void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, PlayState* play) {
Matrix_Translate(0.0f, 0.0f, 1791.0f, MTXMODE_APPLY);
Matrix_RotateZS(this->minuteRingOrExteriorGearRotation, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, gClockTowerExteriorGearDL);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h
index e670d19e0..43f424ceb 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h
@@ -16,7 +16,7 @@ typedef enum {
/* 8 */ OBJ_TOKEIDAI_TYPE_TOWER_WALLS_TERMINA_FIELD = 8,
/* 9 */ OBJ_TOKEIDAI_TYPE_WALL_CLOCK,
/* 10 */ OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK,
- /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP,
+ /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP
} ObjTokeidaiType;
struct ObjTokeidai;
diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c
index 07561b8cd..b2b5e0314 100644
--- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c
+++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c
@@ -36,7 +36,7 @@ void func_80A33B00(ObjToudai* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_f53_obj_DL_0024E8);
@@ -67,7 +67,7 @@ void func_80A33BB4(ObjToudai* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x80, 1, 0, sp56, 0x20, 0x20));
diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c
index 996bc3810..3fff091b6 100644
--- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c
+++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c
@@ -100,7 +100,7 @@ void ObjTree_Init(Actor* thisx, PlayState* play) {
} else {
Actor_SetScale(&this->dyna.actor, 0.1f);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- CollisionHeader_GetVirtual(&object_tree_Colheader_001B2C, &colHeader);
+ CollisionHeader_GetVirtual(&gTreeTopCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
}
@@ -185,13 +185,13 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_tree_DL_000680);
+ gSPDisplayList(POLY_OPA_DISP++, gTreeBodyDL);
Matrix_RotateZYX(xRot, 0, zRot, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_tree_DL_0007C8);
+ gSPDisplayList(POLY_OPA_DISP++, gTreeLeavesDL);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
index 5f0e6c411..9b8baa861 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
@@ -63,8 +63,7 @@ typedef struct {
/* 0x14 */ ObjTsuboUnkFunc breakPot1;
/* 0x18 */ ObjTsuboUnkFunc breakPot2;
/* 0x1C */ ObjTsuboUnkFunc breakPot3;
-
-} ObjTsuboData;
+} ObjTsuboData; // size = 0x20
ObjTsuboData sPotTypeData[4] = {
{ GAMEPLAY_DANGEON_KEEP, 0.197f, gameplay_dangeon_keep_DL_017EA0, gameplay_dangeon_keep_DL_018090, 12, 32,
diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
index a924c9e06..a6085ef51 100644
--- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
+++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
@@ -5,6 +5,7 @@
*/
#include "z_obj_um.h"
+#include "z64horse.h"
#include "overlays/actors/ovl_En_In/z_en_in.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -14,7 +15,7 @@
/**
* weekEventReg flags checked by this actor:
- * - WEEKEVENTREG_22_01: Aliens defeated
+ * - WEEKEVENTREG_DEFENDED_AGAINST_THEM: Aliens defeated
* If false: The actor doesn't spawn
* - WEEKEVENTREG_31_40
* If true: Cremia doesn't explain again she'll deliever milk to town
@@ -22,7 +23,7 @@
* If true: Triggers cutscene on Romani's Ranch
* - WEEKEVENTREG_34_80
* If true: Doesn't spawn on Romani's Ranch
- * - WEEKEVENTREG_52_01
+ * - WEEKEVENTREG_ESCORTED_CREMIA
* If true: Doesn't spawn on Romani's Ranch or Milk Road
* - WEEKEVENTREG_52_02
* If true: Doesn't spawn on Romani's Ranch or Milk Road
@@ -36,7 +37,7 @@
* Player accepts the ride and is with Cremia during the Milk Run
* - WEEKEVENTREG_34_80: Cremia does Milk Run alone
* Player didn't interact or didn't accept the ride
- * - WEEKEVENTREG_52_01: Won Milk Run minigame
+ * - WEEKEVENTREG_ESCORTED_CREMIA: Won Milk Run minigame
* At least one pot is safe. Turns off the "Lose Milk Run minigame"
* - WEEKEVENTREG_52_02: Lose Milk Run minigame
* Every pot was broken by bandits. Turns off the "Win Milk Run minigame"
@@ -46,7 +47,7 @@
* weekEventReg flags unset by this actor:
* - WEEKEVENTREG_31_80
* Turned off when the Milk Run finishes
- * - WEEKEVENTREG_52_01
+ * - WEEKEVENTREG_ESCORTED_CREMIA
* Turned off if Player lose the Milk Run
* - WEEKEVENTREG_52_02
* Turned off if Player wins the Milk Run
@@ -303,7 +304,7 @@ s32 func_80B781DC(ObjUm* this, EnHorse* bandit1, EnHorse* bandit2, PlayState* pl
if (bandit1->unk_550 == D_80B7C164[i].unk_00) {
if (bandit2->unk_550 != D_80B7C164[i].unk_04) {
if (D_80B7C164[i].unk_00 != 3) {
- if (D_80B7C164[i].unk_04 != 3 ||
+ if ((D_80B7C164[i].unk_04 != 3) ||
((mask = Player_GetMask(play)), PLAYER_MASK_CIRCUS_LEADER != mask)) {
phi_s3 = D_80B7C164[i].unk_04;
phi_s4 = D_80B7C164[i].unk_08;
@@ -454,13 +455,13 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi
}
if (this->potsLife[1] != 1) {
- if ((potIndex == -1) || (potIndex == 0 && Rand_ZeroOne() < 0.3f)) {
+ if ((potIndex == -1) || ((potIndex == 0) && (Rand_ZeroOne() < 0.3f))) {
potIndex = 1;
}
}
if (this->potsLife[2] != 1) {
- if ((potIndex == -1) || (potIndex != -1 && Rand_ZeroOne() < 0.3f)) {
+ if ((potIndex == -1) || ((potIndex != -1) && (Rand_ZeroOne() < 0.3f))) {
potIndex = 2;
}
}
@@ -496,8 +497,6 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi
phi_v1_5 = Math_Vec3f_Yaw(&bandit1->actor.prevPos, &bandit1->actor.world.pos);
}
- if (1) {}
-
phi_v1_5 -= bandit1->actor.shape.rot.y;
if (phi_v1_5 > 0x190) {
bandit1->actor.shape.rot.y += 0x190;
@@ -683,7 +682,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
this->initialPathIndex = OBJ_UM_GET_PATH_INDEX(thisx);
// if (!AliensDefeated)
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -703,7 +702,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
// Waiting for player
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_80) || (gSaveContext.save.time >= CLOCK_TIME(19, 0)) ||
- (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) ||
+ (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) ||
CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
Actor_Kill(&this->dyna.actor);
return;
@@ -714,7 +713,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
ObjUm_SetupAction(this, ObjUm_RanchWait);
}
} else if (this->type == OBJ_UM_TYPE_PRE_MILK_RUN) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -740,7 +739,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
this->unk_354 = 0;
ObjUm_RotatePlayer(this, play, 0);
} else if (this->type == OBJ_UM_TYPE_POST_MILK_RUN) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -835,7 +834,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) {
SET_WEEKEVENTREG(WEEKEVENTREG_31_80);
play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11);
if (player->stateFlags1 & PLAYER_STATE1_800000) {
- D_801BDAA0 = 1;
+ D_801BDAA0 = true;
}
play->transitionType = TRANS_TYPE_64;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
@@ -844,7 +843,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) {
} else {
Actor_ContinueText(play, &this->dyna.actor, 0x33B5);
func_8019F230();
- func_80151BB4(play, 6);
+ Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA);
phi_v1 = false;
}
break;
@@ -878,6 +877,9 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) {
Actor_ContinueText(play, &this->dyna.actor, 0x33BC);
phi_v1 = false;
break;
+
+ default:
+ break;
}
return phi_v1;
@@ -899,6 +901,9 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) {
ret = true;
}
break;
+
+ default:
+ break;
}
return ret;
}
@@ -1030,7 +1035,7 @@ typedef enum ObjUmPathState {
/* 1 */ OBJUM_PATH_STATE_1,
/* 2 */ OBJUM_PATH_STATE_FINISH,
/* 3 */ OBJUM_PATH_STATE_3,
- /* 4 */ OBJUM_PATH_STATE_4,
+ /* 4 */ OBJUM_PATH_STATE_4
} ObjUmPathState;
ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) {
@@ -1093,9 +1098,7 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) {
if (this->donkey != NULL) {
this->dyna.actor.world.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp50);
- func_800F415C(&this->donkey->actor, &sp50, 0x190);
-
- if (1) {}
+ Horse_RotateToPoint(&this->donkey->actor, &sp50, 0x190);
yawDiff = this->donkey->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
if (fabsf(yawDiff) < 2730.0f) {
@@ -1299,13 +1302,13 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) {
CLEAR_WEEKEVENTREG(WEEKEVENTREG_31_80);
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
if (!this->areAllPotsBroken) {
play->nextEntrance = ENTRANCE(MILK_ROAD, 6);
play->transitionType = TRANS_TYPE_64;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
- SET_WEEKEVENTREG(WEEKEVENTREG_52_01);
+ SET_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA);
CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_02);
} else {
play->nextEntrance = ENTRANCE(ROMANI_RANCH, 8);
@@ -1313,7 +1316,7 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) {
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
SET_WEEKEVENTREG(WEEKEVENTREG_52_02);
- CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA);
}
}
break;
@@ -1335,7 +1338,7 @@ void func_80B7A614(ObjUm* this, PlayState* play) {
this->flags |= OBJ_UM_FLAG_PLAYING_MINIGAME;
ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_GALLOP);
- if (ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3 && this->unk_4DC == 0) {
+ if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3) && (this->unk_4DC == 0)) {
this->unk_4DC = 1;
} else if (this->unk_4DC > 0) {
if (this->unk_4DC == 1) {
@@ -1470,7 +1473,7 @@ void func_80B7A860(ObjUm* this, PlayState* play) {
case 0x33BF:
this->unk_4D8++;
- if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && this->unk_4D8 >= 6) {
+ if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && (this->unk_4D8 >= 6)) {
this->unk_4CC = 0;
this->mouthTexIndex = 0;
} else {
@@ -1631,9 +1634,9 @@ void ObjUm_DefaultAnim(ObjUm* this, PlayState* play) {
}
typedef struct {
- /* 0x00 */ AnimationHeader* anim;
- /* 0x04 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving
-} struct_80B7C25C; // size = 0x08
+ /* 0x0 */ AnimationHeader* anim;
+ /* 0x4 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving
+} struct_80B7C25C; // size = 0x8
struct_80B7C25C sUmAnims[] = {
{ &gUmTrotAnim, true }, // OBJ_UM_ANIM_TROT
@@ -1700,7 +1703,7 @@ void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex) {
}
}
- if (this->wheelRot / 0x199A != this->unk_420) {
+ if ((this->wheelRot / 0x199A) != this->unk_420) {
this->unk_420 = this->wheelRot / 0x199A;
//! FAKE
if (sUmAnims[0].doesMove) {}
@@ -1767,18 +1770,23 @@ void ObjUm_Update(Actor* thisx, PlayState* play) {
case 1:
this->eyeTexIndex = 3;
break;
+
case 2:
this->eyeTexIndex = 4;
break;
+
case 3:
this->eyeTexIndex = 5;
break;
+
case 4:
this->eyeTexIndex = 2;
break;
+
case 5:
this->eyeTexIndex = 0;
break;
+
default:
this->unk_4CC = 0;
this->eyeTexIndex = 0;
@@ -1912,6 +1920,7 @@ void ObjUm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
sp80.x = 0;
sp80.z = 0;
sp88.x = 6800.0f;
+
OPEN_DISPS(gfxCtx);
for (i = 0; i < ARRAY_COUNT(this->potsLife); i++) {
@@ -1997,7 +2006,7 @@ void func_80B7BEA4(Vec3f* cartBedPos, s16 arg1, Vec3f* arg2, u8 alpha, PlayState
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
+ POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha);
gSPMatrix(POLY_OPA_DISP++, sp100, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSquareShadowDL);
diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c
index 46a6b994d..23e6eb0ac 100644
--- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c
+++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c
@@ -80,7 +80,7 @@ s32 func_80C07CD0(void) {
}
}
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) {
return false;
}
return true;
diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
index 92bd96549..b6ed8d0df 100644
--- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
+++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
@@ -9,10 +9,10 @@ typedef void (*ObjUsiyaneActionFunc)(struct ObjUsiyane*, PlayState*);
#define OBJUSIYANE_GET_F(thisx) ((thisx)->params & 0xF)
-enum {
+typedef enum {
/* 0 */ OBJUSIYANE_F_0,
- /* 1 */ OBJUSIYANE_F_1,
-};
+ /* 1 */ OBJUSIYANE_F_1
+} ObjUsiyaneParam;
typedef struct {
/* 0x00 */ Vec3f unk_00;
diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
index 257e9eb79..793838c8b 100644
--- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
@@ -435,7 +435,7 @@ void func_80A3D2C0(Actor* thisx, PlayState* play) {
sp3C.y = this->dyna.actor.shape.rot.y;
sp3C.z = this->dyna.actor.shape.rot.z + 0x4000;
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 60.0f, this->dyna.actor.world.pos.z,
MTXMODE_NEW);
Matrix_RotateYS(sp3C.y, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
index 075ad18db..cc47113a5 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
@@ -97,7 +97,7 @@ s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play) {
}
s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play) {
- if ((this->dyna.actor.csId < 0) || CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ if ((this->dyna.actor.csId <= CS_ID_NONE) || CutsceneManager_IsNext(this->dyna.actor.csId)) {
CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene);
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON);
@@ -168,7 +168,8 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) {
Gfx_DrawDListOpa(play, sOwlStatueDLs[this->modelIndex]);
if (this->dyna.actor.home.rot.x != 0) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 34.0f,
this->dyna.actor.world.pos.z, MTXMODE_NEW);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
@@ -186,6 +187,7 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateZF(BINANG_TO_RAD_ALT2(~((play->gameplayFrames * 1200) & 0xFFFF)), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
index bccdce645..a1b32bbe9 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
@@ -13,8 +13,8 @@ typedef struct ObjY2shutter {
} ObjY2shutter; // size = 0x160
typedef enum {
- /* 0x0 */ SHUTTER_BARRED,
- /* 0x1 */ SHUTTER_GRATED,
+ /* 0 */ SHUTTER_BARRED,
+ /* 1 */ SHUTTER_GRATED
} ShutterType;
#define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1)
diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
index db78f579b..2661b9cc5 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -517,6 +517,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) {
}
OPEN_DISPS(play->state.gfxCtx);
+
spB4 = false;
if (this->actor.params == 3) {
@@ -550,7 +551,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255);
gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2);
gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG);
@@ -632,7 +633,7 @@ void func_808DD970(Actor* thisx, PlayState* play2) {
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust5Tex));
gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2);
gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG);
@@ -647,8 +648,6 @@ f32 func_808DDE74(void) {
return Rand_ZeroOne() - 0.5f;
}
-#ifdef NON_MATCHING
-// s2/s3 swapped
void func_808DDE9C(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
ObjectKankyo* this = THIS;
@@ -666,7 +665,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) {
if (end) {
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 25);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
}
for (i = 0; i < end; i++) {
@@ -674,32 +673,30 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) {
temp_f22 = this->unk_14C[0].unk_04 + ((Rand_ZeroOne() - 0.7f) * this->unk_144);
temp_f2 = this->unk_14C[0].unk_08 + ((Rand_ZeroOne() - 0.7f) * this->unk_144);
- if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) {
- continue;
+ if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) {
+ Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW);
+
+ gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
+
+ Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY);
+ Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY);
+
+ if (this->unk_114C == 0) {
+ Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY);
+ } else {
+ Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY);
+ }
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0);
}
-
- Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW);
-
- gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
-
- Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY);
- Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY);
-
- if (this->unk_114C == 0) {
- Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY);
- } else {
- Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY);
- }
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0);
}
phi_s5 = false;
if (player->actor.floorHeight < play->view.eye.y) {
for (i = 0; i < end; i++) {
if (!phi_s5) {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 100);
@@ -710,21 +707,17 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) {
temp_f22 = player->actor.floorHeight + 2.0f;
temp_f2 = this->unk_14C[1].unk_08 + (func_808DDE74() * 220.0f);
- if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) {
- continue;
+ if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) {
+ Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW);
+ temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f;
+ Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL);
}
-
- Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW);
- temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f;
- Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY);
-
- gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL);
}
}
CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Object_Kankyo/func_808DDE9C.s")
-#endif
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 731fe6b77..99bcf4191 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -160,7 +160,7 @@ void OceffSpot_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, &sSunSongEffectCylinderMaterialDL);
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 96d76f807..d3486bb0c 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
@@ -178,7 +178,7 @@ void OceffStorm_Draw2(Actor* thisx, PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++);
- POLY_XLU_DISP = func_8012C3A4(POLY_XLU_DISP);
+ POLY_XLU_DISP = Gfx_SetupDL64(POLY_XLU_DISP);
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
@@ -201,7 +201,7 @@ void OceffStorm_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 200, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 0, 128);
diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
index 87a67191c..8bd3ecd65 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
@@ -19,6 +19,6 @@ typedef struct OceffStorm {
typedef enum {
/* 1 */ OCEFF_STORM_ACTION_PARAM_1 = 1
-} OceffStormActionParams;
+} OceffStormActionParam;
#endif // Z_OCEFF_STORM_H
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 42bf6c703..c73e67a1d 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
@@ -99,7 +99,7 @@ void OceffWipe_Draw(Actor* thisx, PlayState* play) {
vtxPtr[i * 2 + 1].v.cn[3] = alphaTable[sAlphaIndices[i] & 0xF];
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
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 3d8004c5c..641d49f49 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
@@ -72,7 +72,7 @@ void OceffWipe2_Draw(Actor* thisx, PlayState* play) {
vtxPtr = sEponaSongFrustumVtx;
if (this->timer < 32) {
- z = Math_SinS(this->timer << 9) * 1220.0f;
+ z = Math_SinS(this->timer * 0x200) * 1220.0f;
} else {
z = 1220.0f;
}
@@ -89,7 +89,7 @@ void OceffWipe2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
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 52031ce00..f7156878c 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
@@ -90,7 +90,7 @@ void OceffWipe3_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
Matrix_ReplaceRotation(&play->billboardMtxF);
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 3554bc78a..d82c117e9 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
@@ -88,7 +88,7 @@ void OceffWipe4_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
index f869b95ac..3dcb06d5d 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
@@ -107,7 +107,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
MTXMODE_NEW);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
index 87dbe2752..244870f9d 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
@@ -86,7 +86,7 @@ void OceffWipe6_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
index f269a89a5..fb8011c60 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
@@ -88,7 +88,7 @@ void OceffWipe7_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
MTXMODE_NEW);
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
index f237bed47..69f56ef2d 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -145,13 +145,14 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
s32 pad;
Vec3f spawnPos;
+ //! FAKE:
+ if (1) {}
+
if (this->collider.base.acFlags & AC_HIT) {
play_sound(NA_SE_SY_CORRECT_CHIME);
- if (1) {}
if (INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE) {
Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_ETCETERA, 700.0f, -800.0f, 7261.0f, 0, 0, 0,
ITEM_ETC_ARROW_FIRE);
- if (1) {}
gSaveContext.cutsceneTrigger = 1;
} else {
spawnPos.x = 700.0f;
@@ -168,19 +169,19 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
return;
}
- if (!(this->actor.xzDistToPlayer > 120.0f)) {
- if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) {
- cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f));
- cylinderPos.y =
- (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f));
- cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f));
-
- this->hitboxPos = cylinderPos;
-
- Collider_SetCylinderPosition(&this->collider, &cylinderPos);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- }
+ if ((this->actor.xzDistToPlayer > 120.0f) || (gSaveContext.save.time < CLOCK_TIME(6, 30)) ||
+ (gSaveContext.save.time >= CLOCK_TIME(7, 30))) {
+ return;
}
+
+ cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f));
+ cylinderPos.y = (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f));
+ cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f));
+
+ this->hitboxPos = cylinderPos;
+
+ Collider_SetCylinderPosition(&this->collider, &cylinderPos);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
void ShotSun_Update(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 1f92e8825..810fec670 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -3,1303 +3,20200 @@
* Overlay: ovl_player_actor
* Description: Player
*/
-
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "z64horse.h"
#include "z64quake.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
-#define THIS ((Player*)thisx)
+#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h"
+#include "overlays/actors/ovl_Door_Spiral/z_door_spiral.h"
+#include "overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
+#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
+#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
+#include "overlays/actors/ovl_En_Boom/z_en_boom.h"
+#include "overlays/actors/ovl_En_Box/z_en_box.h"
+#include "overlays/actors/ovl_En_Door/z_en_door.h"
+#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
+#include "overlays/actors/ovl_En_Ishi/z_en_ishi.h"
+#include "overlays/actors/ovl_En_Test3/z_en_test3.h"
+#include "overlays/actors/ovl_En_Test7/z_en_test7.h"
+#include "overlays/actors/ovl_En_Torch2/z_en_torch2.h"
-extern UNK_TYPE D_06008860;
-extern UNK_TYPE D_0600BDD8;
-extern UNK_TYPE D_060178D0;
+#include "overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h"
+
+#include "objects/gameplay_keep/gameplay_keep.h"
+
+#include "objects/object_link_boy/object_link_boy.h"
+#include "objects/object_link_goron/object_link_goron.h"
+#include "objects/object_link_zora/object_link_zora.h"
+#include "objects/object_link_nuts/object_link_nuts.h"
+#include "objects/object_link_child/object_link_child.h"
+
+#define THIS ((Player*)thisx)
void Player_Init(Actor* thisx, PlayState* play);
void Player_Destroy(Actor* thisx, PlayState* play);
void Player_Update(Actor* thisx, PlayState* play);
void Player_Draw(Actor* thisx, PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DA90.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DABC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAD4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB3C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB90.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DBC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC28.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC64.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DCA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DD2C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE14.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE88.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF2C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF48.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF8C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E00C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E078.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E094.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E12C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E188.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E224.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E438.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E4A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E514.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E55C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E634.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E67C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E784.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E794.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E820.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E920.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E9C8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA80.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAC8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EC9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECCC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED94.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEA4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF54.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EFE4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F02C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F09C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F0E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F164.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F1AC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F43C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F470.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F524.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F594.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5FC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F62C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F7F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F938.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FA5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FB68.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FBE8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC78.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FCC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FD0C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FDC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FE0C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808302CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808304BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808305BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808306F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808308DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808309CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830A58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830AE8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B88.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830CE8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830D40.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830DF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830E30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830F9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830FD4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831010.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831094.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831124.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831194.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083133C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831454.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831494.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083172C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831760.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808317C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831814.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808318C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831944.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831990.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831F34.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832090.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083213C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083216C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808323C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832444.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083249C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808324EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832558.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832578.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832660.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832754.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832888.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832CAC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F78.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833058.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808331FC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808332A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808333CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808334D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335B0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833728.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083375C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833864.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833998.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833A64.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833AA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833B18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340AC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834104.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834140.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808341F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808344C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834534.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083456C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345C8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834600.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834CD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834D50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DB8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835324.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808353DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835428.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808354A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808355D8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083562C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BC8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835C64.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835CD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D2C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835DF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835EAC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083604C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836258.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808365DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836888.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083692C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836988.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808369F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A98.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836AD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836B3C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836C70.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836D8C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836DC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836EA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836F10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808370D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837134.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837730.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083784C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808378FC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083798C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808379C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837B60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C78.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837CEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837DEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083827C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083868C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838760.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808387A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838830.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808388B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808389BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A90.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808391D8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839518.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808395F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808396B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839770.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839800.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839860.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839978.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839B18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839CD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E3C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E74.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839ED0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839F98.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A04C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A0CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A114.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A274.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A4A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A548.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A580.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A658.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A6C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A794.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A844.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A878.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A98C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD8C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADB8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AE38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AECC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF8C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B030.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B090.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B0E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B1A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B23C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B29C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B2E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B32C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B3B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B73C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B798.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B850.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B8D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B930.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BB4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BF54.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C62C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C6E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C85C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C8E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CBC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CCB4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CF68.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D168.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D23C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D6DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D738.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D78C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D860.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DCC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DD1C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DEE4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DF38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DFC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E14C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E234.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E28C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E2F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E354.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E404.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E514.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E758.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E7F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E8E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E958.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E9C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EA44.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EBD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EE60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F144.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F190.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F230.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F27C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F358.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F57C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F828.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F8A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FBC4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FCF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FD80.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE38.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE90.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FEF4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FF30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FFEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840094.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808400CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808401F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840770.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840980.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808409A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840A30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840CD4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840DEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840EC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F34.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F90.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808411D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841358.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841408.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808414E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841528.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841624.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841744.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084182C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841A50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Init.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80842510.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808425B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808426F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808430E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843178.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843EC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808442D8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808445C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808446F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844784.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844D80.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844EF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Update.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808463C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80846460.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Draw.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Destroy.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847190.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084748C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808475B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808477D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847880.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847994.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808479F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A94.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847BF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847E2C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847ED4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847F1C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847FF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848048.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848094.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808481CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848250.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848294.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808482E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848570.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848640.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848780.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808487B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848808.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084894C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848A0C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848AB0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848B6C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848BF4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848E4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849054.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808490B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808491B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084923C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808492C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084933C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849570.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849620.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808496AC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808497A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849A9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849DD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849FE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A26C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A5C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A794.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A884.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A8E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AB4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AC84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AEEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AF9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B0EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B288.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B3B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B4A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B5C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BAA4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BBF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BC64.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BE40.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BF28.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BFDC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C124.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C16C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C6EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C94C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CA24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CB58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CCEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CE84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D18C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D4EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D770.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D820.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E034.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E25C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E334.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E434.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E4E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E58C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E65C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E724.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E980.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084ED9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EE50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EF9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F1B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F3DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F4E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FC0C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FD7C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE48.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE7C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808505D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850734.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850854.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808508C8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850B18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BA8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D68.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808513EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851588.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808516B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808519FC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851B58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851BD4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851C40.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851D30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EAC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EC8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851F18.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808521E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852290.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085255C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808525C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085269C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852B28.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852C04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852FD4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808530E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853194.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808534C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853754.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853850.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853A5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853CC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853D68.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854010.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808540A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854118.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085421C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085437C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085439C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854430.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854614.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808546D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854800.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808548B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854C70.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854CD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854EFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808550D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855218.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808553F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855818.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855A7C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855AF4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855B9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855C28.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855E08.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855F9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856000.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856074.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856110.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808561B0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808566C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085687C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856888.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856918.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808573A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857640.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808576BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808577E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857950.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857A44.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857AEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857BE8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858C84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858CC8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858D48.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DB4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DDC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E40.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E80.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EC0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F1C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F3C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F7C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FBC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FE8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859028.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859168.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808591BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859210.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859248.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085929C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859300.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859414.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808594D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808595B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085968C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859708.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085978C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859890.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859990.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808599DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A44.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AD0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B28.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B54.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859BA8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859C60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CFC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D44.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D70.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859EBC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859F4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FCC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FF4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A04C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A120.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A144.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A19C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A1D4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A24C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A2AC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A330.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A364.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A40C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A4A4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A530.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A5DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A66C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A6C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A710.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A768.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A7C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A8C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A940.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA60.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AACC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AB58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ABA8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AC9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AD5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ADA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B08C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B134.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B170.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B1F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B28C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B384.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B3E0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B460.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B74C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B820.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B854.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B930.s")
+s32 Player_GrabPlayer(PlayState* play, Player* this);
+s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode);
+void func_8085B384(Player* this, PlayState* play);
+s32 Player_InflictDamage(PlayState* play, s32 damage);
+void Player_TalkWithPlayer(PlayState* play, Actor* actor);
+void func_8085B74C(PlayState* play);
+void func_8085B820(PlayState* play, s16 arg1);
+PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId);
+s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode);
+
+void Player_UpdateCommon(Player* this, PlayState* play, Input* input);
+s32 Player_StartFishing(PlayState* play);
+void func_8085B170(PlayState* play, Player* this);
+s32 func_8083A658(PlayState* play, Player* this);
+void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction);
+
+void func_80831990(PlayState* play, Player* this, ItemId item);
+
+s32 func_80848BF4(Player* this, PlayState* play);
+
+void func_80836988(Player* this, PlayState* play);
+
+void func_808484F0(Player* this);
+
+void func_80838A20(PlayState* play, Player* this);
+void func_80839978(PlayState* play, Player* this);
+void func_80839A10(PlayState* play, Player* this);
+
+typedef enum AnimSfxType {
+ /* 1 */ ANIMSFX_TYPE_GENERAL = 1,
+ /* 2 */ ANIMSFX_TYPE_FLOOR,
+ /* 3 */ ANIMSFX_TYPE_FLOOR_BY_AGE,
+ /* 4 */ ANIMSFX_TYPE_VOICE,
+ /* 5 */ ANIMSFX_TYPE_FLOOR_LAND, // does not use sfxId
+ /* 6 */ ANIMSFX_TYPE_6, // FLOOR_WALK_Something // does not use sfxId
+ /* 7 */ ANIMSFX_TYPE_FLOOR_JUMP, // does not use sfxId
+ /* 8 */ ANIMSFX_TYPE_8, // FLOOR_WALK_Something2 // does not use sfxId
+ /* 9 */ ANIMSFX_TYPE_9, // Uses NA_SE_PL_WALK_LADDER // does not use sfxId, unused
+ /* 10 */ ANIMSFX_TYPE_SURFACE
+} AnimSfxType;
+
+#define ANIMSFX_SHIFT_TYPE(type) ((type) << 11)
+
+#define ANIMSFX_CONTINUE (1)
+#define ANIMSFX_STOP (0)
+
+#define ANIMSFX_FLAGS(type, frame, cont) \
+ (((ANIMSFX_##cont) == ANIMSFX_STOP ? -1 : 1) * (ANIMSFX_SHIFT_TYPE(type) | ((frame)&0x7FF)))
+
+#define ANIMSFX(type, frame, sfxId, cont) \
+ { (sfxId), ANIMSFX_FLAGS(type, frame, cont) }
+
+#define ANIMSFX_GET_TYPE(data) ((data)&0x7800)
+#define ANIMSFX_GET_FRAME(data) ((data)&0x7FF)
+
+typedef struct AnimSfxEntry {
+ /* 0x0 */ u16 sfxId;
+ /* 0x2 */ s16 flags; // negative marks the end
+} AnimSfxEntry; // size = 0x4
+
+/* action funcs */
+void func_808496AC(Player* this, PlayState* play);
+void func_808497A0(Player* this, PlayState* play);
+void func_80849A9C(Player* this, PlayState* play);
+void func_80849DD0(Player* this, PlayState* play);
+void func_80849FE0(Player* this, PlayState* play);
+void func_8084A26C(Player* this, PlayState* play);
+void func_8084A5C0(Player* this, PlayState* play);
+void func_8084A794(Player* this, PlayState* play);
+void func_8084A884(Player* this, PlayState* play);
+void func_8084A8E8(Player* this, PlayState* play);
+void func_8084AB4C(Player* this, PlayState* play);
+void func_8084AC84(Player* this, PlayState* play);
+void func_8084AEEC(Player* this, PlayState* play);
+void func_8084AF9C(Player* this, PlayState* play);
+void func_8084B0EC(Player* this, PlayState* play);
+void func_8084B288(Player* this, PlayState* play);
+void func_8084B3B8(Player* this, PlayState* play);
+void func_8084B4A8(Player* this, PlayState* play);
+void func_8084B5C0(Player* this, PlayState* play);
+void func_8084BAA4(Player* this, PlayState* play);
+void func_8084BBF0(Player* this, PlayState* play);
+void func_8084BC64(Player* this, PlayState* play);
+void func_8084BE40(Player* this, PlayState* play);
+void func_8084BF28(Player* this, PlayState* play);
+void func_8084BFDC(Player* this, PlayState* play);
+void func_8084C16C(Player* this, PlayState* play);
+void func_8084C6EC(Player* this, PlayState* play);
+void func_8084C94C(Player* this, PlayState* play);
+void func_8084CA24(Player* this, PlayState* play);
+void func_8084CB58(Player* this, PlayState* play);
+void func_8084CCEC(Player* this, PlayState* play);
+void func_8084CE84(Player* this, PlayState* play);
+void func_8084D18C(Player* this, PlayState* play);
+void func_8084D4EC(Player* this, PlayState* play);
+void func_8084D770(Player* this, PlayState* play);
+void func_8084D820(Player* this, PlayState* play);
+void func_8084E034(Player* this, PlayState* play);
+void func_8084E25C(Player* this, PlayState* play);
+void func_8084E334(Player* this, PlayState* play);
+void func_8084E434(Player* this, PlayState* play);
+void func_8084E4E4(Player* this, PlayState* play);
+void func_8084E58C(Player* this, PlayState* play);
+void func_8084E65C(Player* this, PlayState* play);
+void func_8084E724(Player* this, PlayState* play);
+void func_8084E980(Player* this, PlayState* play);
+void func_8084ED9C(Player* this, PlayState* play);
+void func_8084EE50(Player* this, PlayState* play);
+void func_8084EF9C(Player* this, PlayState* play);
+void func_8084F1B8(Player* this, PlayState* play);
+void func_8084F3DC(Player* this, PlayState* play);
+void func_8084F4E8(Player* this, PlayState* play);
+void func_8084FC0C(Player* this, PlayState* play);
+void func_8084FE7C(Player* this, PlayState* play);
+void func_808505D0(Player* this, PlayState* play);
+void func_808508C8(Player* this, PlayState* play);
+void func_80850B18(Player* this, PlayState* play);
+void func_80850D68(Player* this, PlayState* play);
+void func_808513EC(Player* this, PlayState* play);
+void func_80851588(Player* this, PlayState* play);
+void func_808516B4(Player* this, PlayState* play);
+void func_808519FC(Player* this, PlayState* play);
+void func_80851B58(Player* this, PlayState* play);
+void func_80851BD4(Player* this, PlayState* play);
+void func_8085269C(Player* this, PlayState* play);
+void func_80852B28(Player* this, PlayState* play);
+void func_80852C04(Player* this, PlayState* play);
+void func_80852FD4(Player* this, PlayState* play);
+void func_80853194(Player* this, PlayState* play);
+void func_808534C0(Player* this, PlayState* play);
+void func_80853754(Player* this, PlayState* play);
+void func_80853850(Player* this, PlayState* play);
+void func_80853A5C(Player* this, PlayState* play);
+void func_80853CC0(Player* this, PlayState* play);
+void func_80853D68(Player* this, PlayState* play);
+void func_80854010(Player* this, PlayState* play);
+void func_808540A0(Player* this, PlayState* play);
+void func_80854118(Player* this, PlayState* play);
+void func_8085421C(Player* this, PlayState* play);
+void func_8085437C(Player* this, PlayState* play);
+void func_8085439C(Player* this, PlayState* play);
+void func_80854430(Player* this, PlayState* play);
+void func_80854614(Player* this, PlayState* play);
+void func_808546D0(Player* this, PlayState* play);
+void func_80854800(Player* this, PlayState* play);
+void func_808548B8(Player* this, PlayState* play);
+void func_80854C70(Player* this, PlayState* play);
+void func_808553F4(Player* this, PlayState* play);
+void func_80855818(Player* this, PlayState* play);
+void func_80855A7C(Player* this, PlayState* play);
+void func_80855AF4(Player* this, PlayState* play);
+void func_80855B9C(Player* this, PlayState* play);
+void func_80855C28(Player* this, PlayState* play);
+void func_80855E08(Player* this, PlayState* play);
+void func_808561B0(Player* this, PlayState* play);
+void func_80856918(Player* this, PlayState* play);
+void func_808573A4(Player* this, PlayState* play);
+void func_80857BE8(Player* this, PlayState* play);
+void func_8085B08C(Player* this, PlayState* play);
+
+s32 func_80839518(Player* this, PlayState* play);
+s32 func_808365DC(Player* this, PlayState* play);
+s32 func_8083D23C(Player* this, PlayState* play);
+s32 func_8083CCB4(Player* this, PlayState* play);
+s32 func_808391D8(Player* this, PlayState* play);
+s32 func_8083DFC4(Player* this, PlayState* play);
+s32 func_8083A114(Player* this, PlayState* play);
+s32 func_80848570(Player* this, PlayState* play);
+s32 func_8083A580(Player* this, PlayState* play);
+s32 func_8083D78C(Player* this, PlayState* play);
+s32 func_80839B18(Player* this, PlayState* play);
+s32 func_8083A274(Player* this, PlayState* play);
+s32 func_80834DFC(Player* this, PlayState* play);
+s32 func_80838A90(Player* this, PlayState* play);
+s32 func_8083A0CC(Player* this, PlayState* play);
+
+s32 func_80848780(Player* this, PlayState* play);
+s32 func_808487B8(Player* this, PlayState* play);
+s32 func_80848B6C(Player* this, PlayState* play);
+s32 func_808490B4(Player* this, PlayState* play);
+s32 func_808491B4(Player* this, PlayState* play);
+s32 func_80848808(Player* this, PlayState* play);
+s32 func_8084894C(Player* this, PlayState* play);
+s32 func_80848A0C(Player* this, PlayState* play);
+s32 func_80848AB0(Player* this, PlayState* play);
+s32 func_80848E4C(Player* this, PlayState* play);
+s32 func_80849054(Player* this, PlayState* play);
+s32 func_8084923C(Player* this, PlayState* play);
+s32 func_808492C4(Player* this, PlayState* play);
+s32 func_8084933C(Player* this, PlayState* play);
+s32 func_80849570(Player* this, PlayState* play);
+s32 func_80849620(Player* this, PlayState* play);
+
+/* Init Mode functions */
+void Player_InitMode_0(PlayState* play, Player* this);
+void Player_InitMode_1(PlayState* play, Player* this);
+void Player_InitMode_2(PlayState* play, Player* this);
+void Player_InitMode_3(PlayState* play, Player* this);
+void Player_InitMode_4(PlayState* play, Player* this);
+void Player_InitMode_5(PlayState* play, Player* this);
+void Player_InitMode_6(PlayState* play, Player* this);
+void Player_InitMode_7(PlayState* play, Player* this);
+void func_80841744(PlayState* play, Player* this);
+void func_80841744(PlayState* play, Player* this);
+void func_8083ADF0(PlayState* play, Player* this);
+void Player_InitMode_B(PlayState* play, Player* this);
+void Player_InitMode_Telescope(PlayState* play, Player* this);
+void Player_InitMode_D(PlayState* play, Player* this);
+void func_8083ADF0(PlayState* play, Player* this);
+void Player_InitMode_F(PlayState* play, Player* this);
+
+void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2);
+
+void func_80859EBC(PlayState* play, Player* this, s32 arg2);
+
+void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859AD0(PlayState* play, Player* this, void* arg2);
+void func_80859B28(PlayState* play, Player* this, void* arg2);
+void func_8085ADA0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859C60(PlayState* play, Player* this, void* arg2);
+void func_8085A710(PlayState* play, Player* this, void* anim);
+void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A6C0(PlayState* play, Player* this, void* anim);
+void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2);
+void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg);
+void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A364(PlayState* play, Player* this, void* arg2);
+void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A40C(PlayState* play, Player* this, void* arg2);
+void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A4A4(PlayState* play, Player* this, void* arg2);
+void func_8085A5DC(PlayState* play, Player* this, void* arg2);
+void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859AF8(PlayState* play, Player* this, void* arg2);
+void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859EBC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2);
+
+void func_8085A768(PlayState* play, Player* this, void* arg2);
+void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2);
+
+void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859CA0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A66C(PlayState* play, Player* this, void* arg2);
+void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_8085A530(PlayState* play, Player* this, void* arg2);
+void func_8085A768(PlayState* play, Player* this, void* arg2);
+void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2);
+void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2);
+
+// ItemActions
+void func_8082F594(PlayState* play, Player* this);
+void func_8082F5A4(PlayState* play, Player* this);
+void func_8082F8A0(PlayState* play, Player* this);
+void func_8082F5C0(PlayState* play, Player* this);
+void func_8082F7F4(PlayState* play, Player* this);
+void Player_SpawnExplosive(PlayState* play, Player* this);
+
+void func_80858DB4(PlayState* play, Player* this, void* anim);
+void func_80858DDC(PlayState* play, Player* this, void* anim);
+void func_80858E40(PlayState* play, Player* this, void* anim);
+void func_80858E60(PlayState* play, Player* this, void* anim);
+void func_80858E80(PlayState* play, Player* this, void* anim);
+void func_80858EA0(PlayState* play, Player* this, void* anim);
+void func_80858EFC(PlayState* play, Player* this, void* anim);
+void func_80858F1C(PlayState* play, Player* this, void* anim);
+void func_80858F3C(PlayState* play, Player* this, void* anim);
+void func_80858F5C(PlayState* play, Player* this, void* anim);
+void func_80858FBC(PlayState* play, Player* this, void* anim);
+void func_80859028(PlayState* play, Player* this, void* anim);
+void func_808591BC(PlayState* play, Player* this, void* anim);
+void func_80858DFC(PlayState* play, Player* this, void* anim);
+void func_80858EC0(PlayState* play, Player* this, void* anim);
+void func_80858F7C(PlayState* play, Player* this, void* anim);
+void func_80858F9C(PlayState* play, Player* this, void* anim);
+void func_80859168(PlayState* play, Player* this, void* anim);
+void func_80859210(PlayState* play, Player* this, void* arg2);
+
+typedef struct struct_8085C2A4 {
+ /* 0x0 */ PlayerAnimationHeader* unk_0;
+ /* 0x4 */ PlayerAnimationHeader* unk_4;
+ /* 0x8 */ PlayerAnimationHeader* unk_8;
+} struct_8085C2A4; // size = 0xC
+
+typedef struct BlureColors {
+ /* 0x0 */ u8 p1StartColor[4];
+ /* 0x4 */ u8 p2StartColor[4];
+ /* 0x8 */ u8 p1EndColor[4];
+ /* 0xC */ u8 p2EndColor[4];
+} BlureColors; // size = 0x10
+
+typedef void (*PlayerCueInterpreter)(PlayState*, Player*, CsCmdActorCue*);
+
+typedef struct struct_8085DA94 {
+ /* 0x0 */ s8 type;
+ /* 0x4 */ union {
+ void* ptr; // Do not use, required in the absence of designated initialisors
+ PlayerAnimationHeader* anim;
+ PlayerCueInterpreter func;
+ AnimSfxEntry* entry;
+ };
+} struct_8085DA94; // size = 0x8
+
+typedef struct struct_8085E368 {
+ /* 0x0 */ Vec3s base;
+ /* 0x6 */ Vec3s range;
+} struct_8085E368; // size = 0xC
+
+typedef struct struct_8085D910 {
+ /* 0x0 */ u8 unk_0;
+ /* 0x1 */ u8 unk_1;
+ /* 0x2 */ u8 unk_2;
+ /* 0x3 */ u8 unk_3;
+} struct_8085D910; // size = 0x4
+
+typedef struct struct_8085D848_unk_00 {
+ /* 0x0 */ s16 fogNear;
+ /* 0x2 */ u8 fogColor[3];
+ /* 0x5 */ u8 ambientColor[3];
+} struct_8085D848_unk_00; // size = 0x8
+
+typedef struct struct_8085D848_unk_18 {
+ /* 0x00 */ Vec3f pos;
+ /* 0x0C */ u8 color[3];
+ /* 0x10 */ s16 radius;
+} struct_8085D848_unk_18; // size = 0x14
+
+typedef struct struct_8085D848 {
+ /* 0x00 */ struct_8085D848_unk_00 unk_00[3];
+ /* 0x18 */ struct_8085D848_unk_18 light[3];
+} struct_8085D848; // size = 0x54
+
+typedef struct struct_8085D80C {
+ /* 0x0 */ s16 actorId;
+ /* 0x2 */ s16 params;
+} struct_8085D80C; // size = 0x4
+
+typedef struct struct_8085D798 {
+ /* 0x0 */ s16 actorId;
+ /* 0x2 */ s8 actorParams;
+ /* 0x3 */ u8 itemId;
+ /* 0x4 */ u8 itemAction;
+ /* 0x5 */ u8 textId;
+} struct_8085D798; // size = 0x6
+
+typedef struct struct_8085D714 {
+ /* 0x0 */ u8 unk_0;
+ /* 0x4 */ PlayerAnimationHeader* unk_4;
+} struct_8085D714; // size = 0x8
+
+typedef struct struct_8085D224 {
+ /* 0x0 */ PlayerAnimationHeader* anim;
+ /* 0x4 */ f32 unk_4;
+ /* 0x8 */ f32 unk_8;
+} struct_8085D224; // size = 0xC
+
+typedef struct FallImpactInfo {
+ /* 0x0 */ s8 damage;
+ /* 0x1 */ u8 sourceIntensity;
+ /* 0x2 */ u8 decayTimer;
+ /* 0x3 */ u8 decayStep;
+ /* 0x4 */ u16 sfxId;
+} FallImpactInfo; // size = 0x6
+
+typedef struct AttackAnimInfo {
+ /* 0x00 */ PlayerAnimationHeader* unk_0;
+ /* 0x04 */ PlayerAnimationHeader* unk_4;
+ /* 0x08 */ PlayerAnimationHeader* unk_8;
+ /* 0x0C */ u8 unk_C;
+ /* 0x0D */ u8 unk_D;
+} AttackAnimInfo; // size = 0x10
+
+typedef struct MeleeWeaponDamageInfo {
+ /* 0x0 */ s32 dmgFlags;
+ // Presumably these two fields are intended for Fierce Deity, but will also work for Deku if it can equip a sword
+ /* 0x4 */ u8 dmgTransformedNormal;
+ /* 0x5 */ u8 dmgTransformedStrong;
+ /* 0x6 */ u8 dmgHumanNormal;
+ /* 0x7 */ u8 dmgHumanStrong;
+} MeleeWeaponDamageInfo; // size = 0x8
+
+typedef struct struct_8085CC88 {
+ /* 0x0 */ PlayerAnimationHeader* anim;
+ /* 0x4 */ u8 frame;
+} struct_8085CC88; // size = 0x8
+
+typedef struct {
+ /* 0x0 */ u8 itemId;
+ /* 0x2 */ s16 actorId;
+} ExplosiveInfo; // size = 0x4
+
+typedef struct {
+ /* 0x0 */ Color_RGB8 ambientColor;
+ /* 0x3 */ Color_RGB8 diffuseColor;
+ /* 0x6 */ Color_RGB8 fogColor;
+ /* 0xA */ s16 fogNear;
+ /* 0xC */ s16 zFar;
+} PlayerEnvLighting; // size = 0xE
+
+typedef struct GetItemEntry {
+ /* 0x0 */ u8 itemId;
+ /* 0x1 */ u8 field; // various bit-packed data
+ /* 0x2 */ s8 gid; // defines the draw id and chest opening animation
+ /* 0x3 */ u8 textId;
+ /* 0x4 */ u16 objectId;
+} GetItemEntry; // size = 0x6
+
+typedef struct struct_8085D200 {
+ /* 0x0 */ PlayerAnimationHeader* unk_0;
+ /* 0x4 */ PlayerAnimationHeader* unk_4;
+ /* 0x8 */ u8 unk_8;
+ /* 0x9 */ u8 unk_9;
+} struct_8085D200; // size = 0xC
+
+f32 D_80862AFC; // distance of the analog stick to its center
+s16 D_80862B00; // analog stick angle/yaw
+s16 D_80862B02; // analog stick yaw + camera yaw
+s32 D_80862B04; // boolean, set to the return value of func_8083216C
+FloorType sPlayerCurrentFloorType;
+u32 sPlayerCurrentWallFlags;
+ConveyorSpeed sPlayerConveyorSpeedIndex;
+s16 sPlayerIsOnFloorConveyor;
+s16 D_80862B16; // SurfaceType_GetConveyorDirection << 0xA
+f32 D_80862B18; // D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight;
+FloorProperty sPlayerPrevFloorProperty;
+s32 D_80862B20; // ABS_ALT(this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000))
+s32 D_80862B24; // ABS_ALT(BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000)))
+s16 D_80862B28;
+s32 D_80862B2C; // D_80862B2C = player->currentMask;
+Vec3f D_80862B30;
+f32 D_80862B3C;
+FloorEffect D_80862B40; // SurfaceType_GetFloorEffect
+Input* sPlayerControlInput;
+s32 D_80862B48;
+s32 D_80862B4C;
+EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings
+s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags?
+
+s32 func_8082DA90(PlayState* play) {
+ return (play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF);
+}
+
+void Player_StopHorizontalMovement(Player* this) {
+ this->linearVelocity = 0.0f;
+ this->actor.speed = 0.0f;
+}
+
+void func_8082DAD4(Player* this) {
+ Player_StopHorizontalMovement(this);
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+}
+
+s32 func_8082DAFC(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return CHECK_FLAG_ALL(player->actor.flags, ACTOR_FLAG_TALK_REQUESTED);
+}
+
+void Player_AnimationPlayOnce(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_PlayOnce(play, &this->skelAnime, anim);
+}
+
+void Player_AnimationPlayLoop(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_PlayLoop(play, &this->skelAnime, anim);
+}
+
+void func_8082DB60(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f);
+}
+
+void func_8082DB90(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f);
+}
+
+void Player_AnimationPlayOnceReverse(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, -2.0f / 3.0f, Animation_GetLastFrame(anim), 0.0f,
+ ANIMMODE_ONCE, 0.0f);
+}
+
+void func_8082DC28(Player* this) {
+ this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0;
+}
+
+void func_8082DC38(Player* this) {
+ this->stateFlags2 &= ~PLAYER_STATE2_20000;
+ this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0;
+ this->meleeWeaponInfo[2].active = false;
+ this->meleeWeaponInfo[1].active = false;
+ this->meleeWeaponInfo[0].active = false;
+}
+
+void func_8082DC64(PlayState* play, Player* this) {
+ if ((this->subCamId != CAM_ID_NONE) && (play->cameraPtrs[this->subCamId] != NULL)) {
+ this->subCamId = CAM_ID_NONE;
+ }
+
+ this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800);
+}
+
+void func_8082DCA0(PlayState* play, Player* this) {
+ Actor* heldActor = this->heldActor;
+
+ if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) {
+ this->actor.child = NULL;
+ this->heldActor = NULL;
+ this->interactRangeActor = NULL;
+ heldActor->parent = NULL;
+ this->stateFlags1 &= ~PLAYER_STATE1_800;
+ }
+
+ if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) {
+ func_8082F8BC(play, this, PLAYER_IA_NONE);
+ this->heldItemId = ITEM_FE;
+ }
+}
+
+void func_8082DD2C(PlayState* play, Player* this) {
+ if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor == NULL)) {
+ if (this->interactRangeActor != NULL) {
+ if (this->getItemId == GI_NONE) {
+ this->stateFlags1 &= ~PLAYER_STATE1_800;
+ this->interactRangeActor = NULL;
+ }
+ } else {
+ this->stateFlags1 &= ~PLAYER_STATE1_800;
+ }
+ }
+
+ func_8082DC38(this);
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ func_8082DC64(play, this);
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+ this->stateFlags1 &=
+ ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000);
+ this->stateFlags2 &= ~(PLAYER_STATE2_10 | PLAYER_STATE2_80);
+ this->unk_ADD = 0;
+ this->unk_ADC = 0;
+ this->actor.shape.rot.x = 0;
+ this->actor.shape.rot.z = 0;
+ this->unk_ABC = 0.0f;
+ this->unk_AC0 = 0.0f;
+}
+
+s32 func_8082DE14(PlayState* play, Player* this) {
+ if (this->heldItemAction > PLAYER_IA_LAST_USED) {
+ func_80831990(play, this, ITEM_NONE);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void func_8082DE50(PlayState* play, Player* this) {
+ func_8082DD2C(play, this);
+ func_8082DCA0(play, this);
+}
+
+s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) {
+ s16 temp_v0 = this->unk_D64 - D_80862B00;
+
+ this->unk_AE8 += arg1 + (s16)(ABS_ALT(temp_v0) * fabsf(D_80862AFC) * (1.0f / 0x600F0));
+ if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) {
+ this->unk_AE8 += 5;
+ }
+
+ return this->unk_AE8 >= arg2;
+}
+
+void func_8082DF2C(PlayState* play) {
+ if (play->actorCtx.freezeFlashTimer == 0) {
+ play->actorCtx.freezeFlashTimer = 1;
+ }
+}
+
+u8 D_8085B9F0[PLAYER_LIMB_MAX] = {
+ false, // PLAYER_LIMB_NONE
+ false, // PLAYER_LIMB_ROOT
+ false, // PLAYER_LIMB_WAIST
+ false, // PLAYER_LIMB_LOWER_ROOT
+ false, // PLAYER_LIMB_R_THIGH
+ false, // PLAYER_LIMB_R_SHIN
+ false, // PLAYER_LIMB_R_FOOT
+ false, // PLAYER_LIMB_L_THIGH
+ false, // PLAYER_LIMB_L_SHIN
+ false, // PLAYER_LIMB_L_FOOT
+ true, // PLAYER_LIMB_UPPER_ROOT
+ true, // PLAYER_LIMB_HEAD
+ true, // PLAYER_LIMB_HAT
+ true, // PLAYER_LIMB_COLLAR
+ true, // PLAYER_LIMB_L_SHOULDER
+ true, // PLAYER_LIMB_L_FOREARM
+ true, // PLAYER_LIMB_L_HAND
+ true, // PLAYER_LIMB_R_SHOULDER
+ true, // PLAYER_LIMB_R_FOREARM
+ true, // PLAYER_LIMB_R_HAND
+ true, // PLAYER_LIMB_SHEATH
+ true, // PLAYER_LIMB_TORSO
+};
+u8 D_8085BA08[PLAYER_LIMB_MAX] = {
+ false, // PLAYER_LIMB_NONE
+ false, // PLAYER_LIMB_ROOT
+ false, // PLAYER_LIMB_WAIST
+ false, // PLAYER_LIMB_LOWER_ROOT
+ false, // PLAYER_LIMB_R_THIGH
+ false, // PLAYER_LIMB_R_SHIN
+ false, // PLAYER_LIMB_R_FOOT
+ false, // PLAYER_LIMB_L_THIGH
+ false, // PLAYER_LIMB_L_SHIN
+ false, // PLAYER_LIMB_L_FOOT
+ false, // PLAYER_LIMB_UPPER_ROOT
+ false, // PLAYER_LIMB_HEAD
+ false, // PLAYER_LIMB_HAT
+ false, // PLAYER_LIMB_COLLAR
+ true, // PLAYER_LIMB_L_SHOULDER
+ true, // PLAYER_LIMB_L_FOREARM
+ true, // PLAYER_LIMB_L_HAND
+ false, // PLAYER_LIMB_R_SHOULDER
+ false, // PLAYER_LIMB_R_FOREARM
+ false, // PLAYER_LIMB_R_HAND
+ false, // PLAYER_LIMB_SHEATH
+ false, // PLAYER_LIMB_TORSO
+};
+u8 D_8085BA20[PLAYER_LIMB_MAX] = {
+ false, // PLAYER_LIMB_NONE
+ false, // PLAYER_LIMB_ROOT
+ false, // PLAYER_LIMB_WAIST
+ false, // PLAYER_LIMB_LOWER_ROOT
+ false, // PLAYER_LIMB_R_THIGH
+ false, // PLAYER_LIMB_R_SHIN
+ false, // PLAYER_LIMB_R_FOOT
+ false, // PLAYER_LIMB_L_THIGH
+ false, // PLAYER_LIMB_L_SHIN
+ false, // PLAYER_LIMB_L_FOOT
+ false, // PLAYER_LIMB_UPPER_ROOT
+ false, // PLAYER_LIMB_HEAD
+ false, // PLAYER_LIMB_HAT
+ false, // PLAYER_LIMB_COLLAR
+ false, // PLAYER_LIMB_L_SHOULDER
+ false, // PLAYER_LIMB_L_FOREARM
+ false, // PLAYER_LIMB_L_HAND
+ true, // PLAYER_LIMB_R_SHOULDER
+ true, // PLAYER_LIMB_R_FOREARM
+ true, // PLAYER_LIMB_R_HAND
+ false, // PLAYER_LIMB_SHEATH
+ false, // PLAYER_LIMB_TORSO
+};
+
+void Player_RequestRumble(PlayState* play, Player* this, s32 sourceIntensity, s32 decayTimer, s32 decayStep,
+ s32 distSq) {
+ if (this == GET_PLAYER(play)) {
+ Rumble_Request(distSq, sourceIntensity, decayTimer, decayStep);
+ }
+}
+
+// TODO: less dumb name
+#define SFX_VOICE_BANK_SIZE 0x20
+
+PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = {
+ {
+ // unk_00;
+ 84.0f,
+ // shadowScale;
+ 90.0f,
+ // unk_08;
+ 1.5f,
+ // unk_0C;
+ 166.5f,
+ // unk_10;
+ 105.0f,
+ // unk_14;
+ 119.100006f,
+ // unk_18;
+ 88.5f,
+ // unk_1C;
+ 61.5f,
+ // unk_20;
+ 28.5f,
+ // unk_24;
+ 54.0f,
+ // unk_28;
+ 75.0f,
+ // unk_2C;
+ 84.0f,
+ // unk_30;
+ 102.0f,
+ // unk_34; // height?
+ 70.0f,
+ // unk_38;
+ 27.0f,
+ // unk_3C;
+ 24.75f,
+ // unk_40;
+ 105.0f,
+ // unk_44
+ { 9, 0x123F, 0x167 },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ },
+ {
+ { 9, 0x17EA, 0x167 },
+ { 9, 0x1E0D, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { 9, 0x1E0D, 0x17C },
+ },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { -0x638, 0x1256, 0x17C },
+ { -0x637, 0x17EA, 0x167 },
+ },
+ // voiceSfxIdOffset;
+ SFX_VOICE_BANK_SIZE * 0,
+ // surfaceSfxIdOffset;
+ 0x80,
+ // unk_98;
+ 33.0f,
+ // unk_9C;
+ 44.15145f,
+ // openChestAnim
+ &gPlayerAnim_link_demo_Tbox_open,
+ // unk_A4
+ &gPlayerAnim_link_demo_back_to_past,
+ // unk_A8
+ &gPlayerAnim_link_demo_return_to_past,
+ // unk_AC
+ &gPlayerAnim_link_normal_climb_startA,
+ // unk_B0
+ &gPlayerAnim_link_normal_climb_startB,
+ // unk_B4
+ {
+ &gPlayerAnim_link_normal_climb_upL,
+ &gPlayerAnim_link_normal_climb_upR,
+ &gPlayerAnim_link_normal_Fclimb_upL,
+ &gPlayerAnim_link_normal_Fclimb_upR,
+ },
+ // unk_C4
+ {
+ &gPlayerAnim_link_normal_Fclimb_sideL,
+ &gPlayerAnim_link_normal_Fclimb_sideR,
+ },
+ // unk_CC
+ {
+ &gPlayerAnim_link_normal_climb_endAL,
+ &gPlayerAnim_link_normal_climb_endAR,
+ },
+ // unk_D4
+ {
+ &gPlayerAnim_link_normal_climb_endBR,
+ &gPlayerAnim_link_normal_climb_endBL,
+ },
+ },
+ {
+ // unk_00;
+ 70.0f,
+ // shadowScale;
+ 90.0f,
+ // unk_08;
+ 0.74f,
+ // unk_0C;
+ 111.0f,
+ // unk_10;
+ 70.0f,
+ // unk_14;
+ 79.4f,
+ // unk_18;
+ 59.0f,
+ // unk_1C;
+ 41.0f,
+ // unk_20;
+ 19.0f,
+ // unk_24;
+ 36.0f,
+ // unk_28;
+ 50.0f,
+ // unk_2C;
+ 56.0f,
+ // unk_30;
+ 68.0f,
+ // unk_34; // height?
+ 70.0f,
+ // unk_38;
+ 19.5f,
+ // unk_3C;
+ 18.2f,
+ // unk_40;
+ 80.0f,
+ // unk_44
+ { 0x17, 0xF3B, 0xDF },
+ {
+ { 0x18, 0xF3B, 0xDF },
+ { 0x17, 0x14CF, 0xDF },
+ { 0x18, 0xF3B, 0xDF },
+ { 0x17, 0x14CF, 0xDF },
+ },
+ {
+ { 0x17, 0x14CF, 0xDF },
+ { 0x18, 0x1AF2, 0xDF },
+ { 0x17, 0x14CF, 0xDF },
+ { 0x18, 0x1AF2, 0xDF },
+ },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { -0x638, 0x1256, 0x17C },
+ { -0x637, 0x17EA, 0x167 },
+ },
+ // voiceSfxIdOffset;
+ SFX_VOICE_BANK_SIZE * 6,
+ // surfaceSfxIdOffset;
+ 0x150,
+ // unk_98;
+ -25.0f,
+ // unk_9C;
+ 42.0f,
+ // openChestAnim
+ &gPlayerAnim_pg_Tbox_open,
+ // unk_A4
+ &gPlayerAnim_link_demo_back_to_past,
+ // unk_A8
+ &gPlayerAnim_link_demo_return_to_past,
+ // unk_AC
+ &gPlayerAnim_pg_climb_startA,
+ // unk_B0
+ &gPlayerAnim_pg_climb_startB,
+ // unk_B4
+ {
+ &gPlayerAnim_pg_climb_upL,
+ &gPlayerAnim_pg_climb_upR,
+ &gPlayerAnim_pg_climb_upL,
+ &gPlayerAnim_pg_climb_upR,
+ },
+ // unk_C4
+ {
+ &gPlayerAnim_link_normal_Fclimb_sideL,
+ &gPlayerAnim_link_normal_Fclimb_sideR,
+ },
+ // unk_CC
+ {
+ &gPlayerAnim_pg_climb_endAL,
+ &gPlayerAnim_pg_climb_endAR,
+ },
+ // unk_D4
+ {
+ &gPlayerAnim_pg_climb_endBR,
+ &gPlayerAnim_pg_climb_endBL,
+ },
+ },
+ {
+ // unk_00;
+ 56.0f,
+ // shadowScale;
+ 90.0f,
+ // unk_08;
+ 1.0f,
+ // unk_0C;
+ 111.0f,
+ // unk_10;
+ 70.0f,
+ // unk_14;
+ 79.4f,
+ // unk_18;
+ 59.0f,
+ // unk_1C;
+ 41.0f,
+ // unk_20;
+ 19.0f,
+ // unk_24;
+ 36.0f,
+ // unk_28;
+ 50.0f,
+ // unk_2C;
+ 56.0f,
+ // unk_30;
+ 68.0f,
+ // unk_34; // height?
+ 70.0f,
+ // unk_38;
+ 18.0f,
+ // unk_3C;
+ 23.0f,
+ // unk_40;
+ 70.0f,
+ // unk_44
+ { 0x17, 0x1323, -0x6D },
+ {
+ { 0x17, 0x1323, -0x58 },
+ { 0x17, 0x18B7, -0x6D },
+ { 0x17, 0x1323, -0x58 },
+ { 0x17, 0x18B7, -0x6D },
+ },
+ {
+ { 0x17, 0x18B7, -0x6D },
+ { 0x18, 0x1EDA, -0x58 },
+ { 0x17, 0x18B7, -0x6D },
+ { 0x18, 0x1EDA, -0x58 },
+ },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { -0x638, 0x1256, 0x17C },
+ { -0x637, 0x17EA, 0x167 },
+ },
+ // voiceSfxIdOffset;
+ SFX_VOICE_BANK_SIZE * 5,
+ // surfaceSfxIdOffset;
+ 0x120,
+ // unk_98;
+ 22.0f,
+ // unk_9C;
+ 36.0f,
+ // openChestAnim
+ &gPlayerAnim_pz_Tbox_open,
+ // unk_A4
+ &gPlayerAnim_link_demo_back_to_past,
+ // unk_A8
+ &gPlayerAnim_link_demo_return_to_past,
+ // unk_AC
+ &gPlayerAnim_pz_climb_startA,
+ // unk_B0
+ &gPlayerAnim_pz_climb_startB,
+ // unk_B4
+ {
+ &gPlayerAnim_pz_climb_upL,
+ &gPlayerAnim_pz_climb_upR,
+ &gPlayerAnim_link_normal_Fclimb_upL,
+ &gPlayerAnim_link_normal_Fclimb_upR,
+ },
+ // unk_C4
+ {
+ &gPlayerAnim_link_normal_Fclimb_sideL,
+ &gPlayerAnim_link_normal_Fclimb_sideR,
+ },
+ // unk_CC
+ {
+ &gPlayerAnim_pz_climb_endAL,
+ &gPlayerAnim_pz_climb_endAR,
+ },
+ // unk_D4
+ {
+ &gPlayerAnim_pz_climb_endBR,
+ &gPlayerAnim_pz_climb_endBL,
+ },
+ },
+ {
+ // unk_00;
+ 35.0f,
+ // shadowScale;
+ 50.0f,
+ // unk_08;
+ 0.3f,
+ // unk_0C;
+ 71.0f,
+ // unk_10;
+ 50.0f,
+ // unk_14;
+ 49.0f,
+ // unk_18;
+ 39.0f,
+ // unk_1C;
+ 27.0f,
+ // unk_20;
+ 19.0f,
+ // unk_24;
+ 8.0f,
+ // unk_28;
+ 13.6f,
+ // unk_2C;
+ 24.0f,
+ // unk_30;
+ 24.0f,
+ // unk_34; // height?
+ 70.0f,
+ // unk_38;
+ 14.0f,
+ // unk_3C;
+ 12.0f,
+ // unk_40;
+ 55.0f,
+ // unk_44
+ { -0x18, 0xDED, 0x36C },
+ {
+ { -0x18, 0xD92, 0x35E },
+ { -0x18, 0x1371, 0x3A9 },
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ },
+ {
+ { -0x18, 0x1371, 0x3A9 },
+ { -0x18, 0x195F, 0x3A9 },
+ { 9, 0x17EA, 0x167 },
+ { 9, 0x1E0D, 0x17C },
+ },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { -0x638, 0x1256, 0x17C },
+ { -0x637, 0x17EA, 0x167 },
+ },
+ // voiceSfxIdOffset;
+ SFX_VOICE_BANK_SIZE * 4,
+ // surfaceSfxIdOffset;
+ 0xF0,
+ // unk_98;
+ -21.0f,
+ // unk_9C;
+ 33.0f,
+ // openChestAnim
+ &gPlayerAnim_pn_Tbox_open,
+ // unk_A4
+ &gPlayerAnim_link_demo_back_to_past,
+ // unk_A8
+ &gPlayerAnim_link_demo_return_to_past,
+ // unk_AC
+ &gPlayerAnim_clink_normal_climb_startA,
+ // unk_B0
+ &gPlayerAnim_clink_normal_climb_startB,
+ // unk_B4
+ {
+ &gPlayerAnim_clink_normal_climb_upL,
+ &gPlayerAnim_clink_normal_climb_upR,
+ &gPlayerAnim_link_normal_Fclimb_upL,
+ &gPlayerAnim_link_normal_Fclimb_upR,
+ },
+ // unk_C4
+ {
+ &gPlayerAnim_link_normal_Fclimb_sideL,
+ &gPlayerAnim_link_normal_Fclimb_sideR,
+ },
+ // unk_CC
+ {
+ &gPlayerAnim_clink_normal_climb_endAL,
+ &gPlayerAnim_clink_normal_climb_endAR,
+ },
+ // unk_D4
+ {
+ &gPlayerAnim_clink_normal_climb_endBR,
+ &gPlayerAnim_clink_normal_climb_endBL,
+ },
+ },
+ {
+ // unk_00;
+ 40.0f,
+ // shadowScale;
+ 60.0f,
+ // unk_08;
+ 11.0f / 17.0f,
+ // unk_0C;
+ 71.0f,
+ // unk_10;
+ 50.0f,
+ // unk_14;
+ 49.0f,
+ // unk_18;
+ 39.0f,
+ // unk_1C;
+ 27.0f,
+ // unk_20;
+ 19.0f,
+ // unk_24;
+ 22.0f,
+ // unk_28;
+ 32.4f,
+ // unk_2C;
+ 32.0f,
+ // unk_30;
+ 48.0f,
+ // unk_34; // height?
+ 11.0f / 17.0f * 70.0f,
+ // unk_38;
+ 14.0f,
+ // unk_3C;
+ 12.0f,
+ // unk_40;
+ 55.0f,
+ // unk_44
+ { -0x18, 0xDED, 0x36C },
+ {
+ { -0x18, 0xD92, 0x35E },
+ { -0x18, 0x1371, 0x3A9 },
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ },
+ {
+ { -0x18, 0x1371, 0x3A9 },
+ { -0x18, 0x195F, 0x3A9 },
+ { 9, 0x17EA, 0x167 },
+ { 9, 0x1E0D, 0x17C },
+ },
+ {
+ { 8, 0x1256, 0x17C },
+ { 9, 0x17EA, 0x167 },
+ { -0x638, 0x1256, 0x17C },
+ { -0x637, 0x17EA, 0x167 },
+ },
+ // voiceSfxIdOffset;
+ SFX_VOICE_BANK_SIZE * 1,
+ // surfaceSfxIdOffset;
+ 0,
+ // unk_98;
+ 22.0f,
+ // unk_9C;
+ 29.4343f,
+ // openChestAnim
+ &gPlayerAnim_clink_demo_Tbox_open,
+ // unk_A4
+ &gPlayerAnim_clink_demo_goto_future,
+ // unk_A8
+ &gPlayerAnim_clink_demo_return_to_future,
+ // unk_AC
+ &gPlayerAnim_clink_normal_climb_startA,
+ // unk_B0
+ &gPlayerAnim_clink_normal_climb_startB,
+ // unk_B4
+ {
+ &gPlayerAnim_clink_normal_climb_upL,
+ &gPlayerAnim_clink_normal_climb_upR,
+ &gPlayerAnim_link_normal_Fclimb_upL,
+ &gPlayerAnim_link_normal_Fclimb_upR,
+ },
+ // unk_C4
+ {
+ &gPlayerAnim_link_normal_Fclimb_sideL,
+ &gPlayerAnim_link_normal_Fclimb_sideR,
+ },
+ // unk_CC
+ {
+ &gPlayerAnim_clink_normal_climb_endAL,
+ &gPlayerAnim_clink_normal_climb_endAR,
+ },
+ // unk_D4
+ {
+ &gPlayerAnim_clink_normal_climb_endBR,
+ &gPlayerAnim_clink_normal_climb_endBL,
+ },
+ },
+};
+
+PlayerAnimationHeader* D_8085BE84[PLAYER_ANIMGROUP_MAX][PLAYER_ANIMTYPE_MAX] = {
+ // PLAYER_ANIMGROUP_0
+ {
+ &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward
+ &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield
+ &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield
+ &gPlayerAnim_link_fighter_wait_long, // Default idle standing, looking forward, two hand weapon
+ &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward
+ &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward
+ },
+ // PLAYER_ANIMGROUP_1
+ {
+ &gPlayerAnim_link_normal_walk_free,
+ &gPlayerAnim_link_normal_walk,
+ &gPlayerAnim_link_normal_walk,
+ &gPlayerAnim_link_fighter_walk_long,
+ &gPlayerAnim_link_normal_walk_free,
+ &gPlayerAnim_link_normal_walk_free,
+ },
+ // PLAYER_ANIMGROUP_2
+ {
+ &gPlayerAnim_link_normal_run_free, // Running with empty hands
+ &gPlayerAnim_link_fighter_run, // Running with Sword and Shield in hands
+ &gPlayerAnim_link_normal_run,
+ &gPlayerAnim_link_fighter_run_long, // Running with Two handed weapon
+ &gPlayerAnim_link_normal_run_free, // Running with empty hands
+ &gPlayerAnim_link_normal_run_free, // Running with empty hands
+ },
+ // PLAYER_ANIMGROUP_3
+ {
+ &gPlayerAnim_link_normal_damage_run_free,
+ &gPlayerAnim_link_fighter_damage_run,
+ &gPlayerAnim_link_normal_damage_run_free,
+ &gPlayerAnim_link_fighter_damage_run_long,
+ &gPlayerAnim_link_normal_damage_run_free,
+ &gPlayerAnim_link_normal_damage_run_free,
+ },
+ // PLAYER_ANIMGROUP_4
+ {
+ &gPlayerAnim_link_normal_waitL_free,
+ &gPlayerAnim_link_anchor_waitL,
+ &gPlayerAnim_link_anchor_waitL,
+ &gPlayerAnim_link_fighter_waitL_long,
+ &gPlayerAnim_link_normal_waitL_free,
+ &gPlayerAnim_link_normal_waitL_free,
+ },
+ // PLAYER_ANIMGROUP_5
+ {
+ &gPlayerAnim_link_normal_waitR_free,
+ &gPlayerAnim_link_anchor_waitR,
+ &gPlayerAnim_link_anchor_waitR,
+ &gPlayerAnim_link_fighter_waitR_long,
+ &gPlayerAnim_link_normal_waitR_free,
+ &gPlayerAnim_link_normal_waitR_free,
+ },
+ // PLAYER_ANIMGROUP_6
+ {
+ &gPlayerAnim_link_fighter_wait2waitR_long,
+ &gPlayerAnim_link_normal_wait2waitR,
+ &gPlayerAnim_link_normal_wait2waitR,
+ &gPlayerAnim_link_fighter_wait2waitR_long,
+ &gPlayerAnim_link_fighter_wait2waitR_long,
+ &gPlayerAnim_link_fighter_wait2waitR_long,
+ },
+ // PLAYER_ANIMGROUP_7
+ {
+ &gPlayerAnim_link_normal_normal2fighter_free,
+ &gPlayerAnim_link_fighter_normal2fighter,
+ &gPlayerAnim_link_fighter_normal2fighter,
+ &gPlayerAnim_link_normal_normal2fighter_free,
+ &gPlayerAnim_link_normal_normal2fighter_free,
+ &gPlayerAnim_link_normal_normal2fighter_free,
+ },
+ // PLAYER_ANIMGROUP_8
+ {
+ &gPlayerAnim_link_demo_doorA_link_free,
+ &gPlayerAnim_link_demo_doorA_link,
+ &gPlayerAnim_link_demo_doorA_link,
+ &gPlayerAnim_link_demo_doorA_link_free,
+ &gPlayerAnim_link_demo_doorA_link_free,
+ &gPlayerAnim_link_demo_doorA_link_free,
+ },
+ // PLAYER_ANIMGROUP_9
+ {
+ &gPlayerAnim_clink_demo_doorA_link,
+ &gPlayerAnim_clink_demo_doorA_link,
+ &gPlayerAnim_clink_demo_doorA_link,
+ &gPlayerAnim_clink_demo_doorA_link,
+ &gPlayerAnim_clink_demo_doorA_link,
+ &gPlayerAnim_clink_demo_doorA_link,
+ },
+ // PLAYER_ANIMGROUP_10
+ {
+ &gPlayerAnim_link_demo_doorB_link_free,
+ &gPlayerAnim_link_demo_doorB_link,
+ &gPlayerAnim_link_demo_doorB_link,
+ &gPlayerAnim_link_demo_doorB_link_free,
+ &gPlayerAnim_link_demo_doorB_link_free,
+ &gPlayerAnim_link_demo_doorB_link_free,
+ },
+ // PLAYER_ANIMGROUP_11
+ {
+ &gPlayerAnim_clink_demo_doorB_link,
+ &gPlayerAnim_clink_demo_doorB_link,
+ &gPlayerAnim_clink_demo_doorB_link,
+ &gPlayerAnim_clink_demo_doorB_link,
+ &gPlayerAnim_clink_demo_doorB_link,
+ &gPlayerAnim_clink_demo_doorB_link,
+ },
+ // PLAYER_ANIMGROUP_12
+ {
+ &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor
+ &gPlayerAnim_link_normal_carryB, //
+ &gPlayerAnim_link_normal_carryB, //
+ &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor
+ &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor
+ &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor
+ },
+ // PLAYER_ANIMGROUP_13
+ {
+ &gPlayerAnim_link_normal_landing_free,
+ &gPlayerAnim_link_normal_landing,
+ &gPlayerAnim_link_normal_landing,
+ &gPlayerAnim_link_normal_landing_free,
+ &gPlayerAnim_link_normal_landing_free,
+ &gPlayerAnim_link_normal_landing_free,
+ },
+ // PLAYER_ANIMGROUP_14
+ {
+ &gPlayerAnim_link_normal_short_landing_free,
+ &gPlayerAnim_link_normal_short_landing,
+ &gPlayerAnim_link_normal_short_landing,
+ &gPlayerAnim_link_normal_short_landing_free,
+ &gPlayerAnim_link_normal_short_landing_free,
+ &gPlayerAnim_link_normal_short_landing_free,
+ },
+ // PLAYER_ANIMGROUP_15
+ {
+ &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands
+ &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield
+ &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield
+ &gPlayerAnim_link_fighter_landing_roll_long, // Rolling with two hand weapon
+ &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands
+ &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands
+ },
+ // PLAYER_ANIMGROUP_16
+ {
+ &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk
+ &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield
+ &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield
+ &gPlayerAnim_link_normal_hip_down_long, // Rolling bonk two hand weapon
+ &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk
+ &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk
+ },
+ // PLAYER_ANIMGROUP_17
+ {
+ &gPlayerAnim_link_normal_walk_endL_free,
+ &gPlayerAnim_link_normal_walk_endL,
+ &gPlayerAnim_link_normal_walk_endL,
+ &gPlayerAnim_link_fighter_walk_endL_long,
+ &gPlayerAnim_link_normal_walk_endL_free,
+ &gPlayerAnim_link_normal_walk_endL_free,
+ },
+ // PLAYER_ANIMGROUP_18
+ {
+ &gPlayerAnim_link_normal_walk_endR_free,
+ &gPlayerAnim_link_normal_walk_endR,
+ &gPlayerAnim_link_normal_walk_endR,
+ &gPlayerAnim_link_fighter_walk_endR_long,
+ &gPlayerAnim_link_normal_walk_endR_free,
+ &gPlayerAnim_link_normal_walk_endR_free,
+ },
+ // PLAYER_ANIMGROUP_19
+ {
+ &gPlayerAnim_link_normal_defense_free,
+ &gPlayerAnim_link_normal_defense,
+ &gPlayerAnim_link_normal_defense,
+ &gPlayerAnim_link_normal_defense_free,
+ &gPlayerAnim_link_bow_defense,
+ &gPlayerAnim_link_normal_defense_free,
+ },
+ // PLAYER_ANIMGROUP_20
+ {
+ &gPlayerAnim_link_normal_defense_wait_free,
+ &gPlayerAnim_link_normal_defense_wait,
+ &gPlayerAnim_link_normal_defense_wait,
+ &gPlayerAnim_link_normal_defense_wait_free,
+ &gPlayerAnim_link_bow_defense_wait,
+ &gPlayerAnim_link_normal_defense_wait_free,
+ },
+ // PLAYER_ANIMGROUP_21
+ {
+ &gPlayerAnim_link_normal_defense_end_free,
+ &gPlayerAnim_link_normal_defense_end,
+ &gPlayerAnim_link_normal_defense_end,
+ &gPlayerAnim_link_normal_defense_end_free,
+ &gPlayerAnim_link_normal_defense_end_free,
+ &gPlayerAnim_link_normal_defense_end_free,
+ },
+ // PLAYER_ANIMGROUP_22
+ {
+ &gPlayerAnim_link_normal_side_walk_free,
+ &gPlayerAnim_link_normal_side_walk,
+ &gPlayerAnim_link_normal_side_walk,
+ &gPlayerAnim_link_fighter_side_walk_long,
+ &gPlayerAnim_link_normal_side_walk_free,
+ &gPlayerAnim_link_normal_side_walk_free,
+ },
+ // PLAYER_ANIMGROUP_23
+ {
+ &gPlayerAnim_link_normal_side_walkL_free, // Side walking
+ &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands
+ &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands
+ &gPlayerAnim_link_fighter_side_walkL_long,
+ &gPlayerAnim_link_normal_side_walkL_free, // Side walking
+ &gPlayerAnim_link_normal_side_walkL_free, // Side walking
+ },
+ // PLAYER_ANIMGROUP_24
+ {
+ &gPlayerAnim_link_normal_side_walkR_free,
+ &gPlayerAnim_link_anchor_side_walkR,
+ &gPlayerAnim_link_anchor_side_walkR,
+ &gPlayerAnim_link_fighter_side_walkR_long,
+ &gPlayerAnim_link_normal_side_walkR_free,
+ &gPlayerAnim_link_normal_side_walkR_free,
+ },
+ // PLAYER_ANIMGROUP_25
+ {
+ &gPlayerAnim_link_normal_45_turn_free,
+ &gPlayerAnim_link_normal_45_turn,
+ &gPlayerAnim_link_normal_45_turn,
+ &gPlayerAnim_link_normal_45_turn_free,
+ &gPlayerAnim_link_normal_45_turn_free,
+ &gPlayerAnim_link_normal_45_turn_free,
+ },
+ // PLAYER_ANIMGROUP_26
+ {
+ &gPlayerAnim_link_normal_waitL2wait,
+ &gPlayerAnim_link_normal_waitL2wait,
+ &gPlayerAnim_link_normal_waitL2wait,
+ &gPlayerAnim_link_fighter_waitL2wait_long,
+ &gPlayerAnim_link_fighter_waitL2wait_long,
+ &gPlayerAnim_link_fighter_waitL2wait_long,
+ },
+ // PLAYER_ANIMGROUP_27
+ {
+ &gPlayerAnim_link_normal_waitR2wait,
+ &gPlayerAnim_link_normal_waitR2wait,
+ &gPlayerAnim_link_normal_waitR2wait,
+ &gPlayerAnim_link_fighter_waitR2wait_long,
+ &gPlayerAnim_link_fighter_waitR2wait_long,
+ &gPlayerAnim_link_fighter_waitR2wait_long,
+ },
+ // PLAYER_ANIMGROUP_28
+ {
+ &gPlayerAnim_link_normal_throw_free,
+ &gPlayerAnim_link_normal_throw,
+ &gPlayerAnim_link_normal_throw,
+ &gPlayerAnim_link_normal_throw_free,
+ &gPlayerAnim_link_normal_throw_free,
+ &gPlayerAnim_link_normal_throw_free,
+ },
+ // PLAYER_ANIMGROUP_29
+ {
+ &gPlayerAnim_link_normal_put_free,
+ &gPlayerAnim_link_normal_put,
+ &gPlayerAnim_link_normal_put,
+ &gPlayerAnim_link_normal_put_free,
+ &gPlayerAnim_link_normal_put_free,
+ &gPlayerAnim_link_normal_put_free,
+ },
+ // PLAYER_ANIMGROUP_30
+ {
+ &gPlayerAnim_link_normal_back_walk,
+ &gPlayerAnim_link_normal_back_walk,
+ &gPlayerAnim_link_normal_back_walk,
+ &gPlayerAnim_link_normal_back_walk,
+ &gPlayerAnim_link_normal_back_walk,
+ &gPlayerAnim_link_normal_back_walk,
+ },
+ // PLAYER_ANIMGROUP_31
+ {
+ &gPlayerAnim_link_normal_check_free,
+ &gPlayerAnim_link_normal_check,
+ &gPlayerAnim_link_normal_check,
+ &gPlayerAnim_link_normal_check_free,
+ &gPlayerAnim_link_normal_check_free,
+ &gPlayerAnim_link_normal_check_free,
+ },
+ // PLAYER_ANIMGROUP_32
+ {
+ &gPlayerAnim_link_normal_check_wait_free,
+ &gPlayerAnim_link_normal_check_wait,
+ &gPlayerAnim_link_normal_check_wait,
+ &gPlayerAnim_link_normal_check_wait_free,
+ &gPlayerAnim_link_normal_check_wait_free,
+ &gPlayerAnim_link_normal_check_wait_free,
+ },
+ // PLAYER_ANIMGROUP_33
+ {
+ &gPlayerAnim_link_normal_check_end_free,
+ &gPlayerAnim_link_normal_check_end,
+ &gPlayerAnim_link_normal_check_end,
+ &gPlayerAnim_link_normal_check_end_free,
+ &gPlayerAnim_link_normal_check_end_free,
+ &gPlayerAnim_link_normal_check_end_free,
+ },
+ // PLAYER_ANIMGROUP_34
+ {
+ &gPlayerAnim_link_normal_pull_start_free,
+ &gPlayerAnim_link_normal_pull_start,
+ &gPlayerAnim_link_normal_pull_start,
+ &gPlayerAnim_link_normal_pull_start_free,
+ &gPlayerAnim_link_normal_pull_start_free,
+ &gPlayerAnim_link_normal_pull_start_free,
+ },
+ // PLAYER_ANIMGROUP_35
+ {
+ &gPlayerAnim_link_normal_pulling_free,
+ &gPlayerAnim_link_normal_pulling,
+ &gPlayerAnim_link_normal_pulling,
+ &gPlayerAnim_link_normal_pulling_free,
+ &gPlayerAnim_link_normal_pulling_free,
+ &gPlayerAnim_link_normal_pulling_free,
+ },
+ // PLAYER_ANIMGROUP_36
+ {
+ &gPlayerAnim_link_normal_pull_end_free,
+ &gPlayerAnim_link_normal_pull_end,
+ &gPlayerAnim_link_normal_pull_end,
+ &gPlayerAnim_link_normal_pull_end_free,
+ &gPlayerAnim_link_normal_pull_end_free,
+ &gPlayerAnim_link_normal_pull_end_free,
+ },
+ // PLAYER_ANIMGROUP_37
+ {
+ &gPlayerAnim_link_normal_fall_up_free,
+ &gPlayerAnim_link_normal_fall_up,
+ &gPlayerAnim_link_normal_fall_up,
+ &gPlayerAnim_link_normal_fall_up_free,
+ &gPlayerAnim_link_normal_fall_up_free,
+ &gPlayerAnim_link_normal_fall_up_free,
+ },
+ // PLAYER_ANIMGROUP_38
+ {
+ &gPlayerAnim_link_normal_jump_climb_hold_free,
+ &gPlayerAnim_link_normal_jump_climb_hold,
+ &gPlayerAnim_link_normal_jump_climb_hold,
+ &gPlayerAnim_link_normal_jump_climb_hold_free,
+ &gPlayerAnim_link_normal_jump_climb_hold_free,
+ &gPlayerAnim_link_normal_jump_climb_hold_free,
+ },
+ // PLAYER_ANIMGROUP_39
+ {
+ &gPlayerAnim_link_normal_jump_climb_wait_free,
+ &gPlayerAnim_link_normal_jump_climb_wait,
+ &gPlayerAnim_link_normal_jump_climb_wait,
+ &gPlayerAnim_link_normal_jump_climb_wait_free,
+ &gPlayerAnim_link_normal_jump_climb_wait_free,
+ &gPlayerAnim_link_normal_jump_climb_wait_free,
+ },
+ // PLAYER_ANIMGROUP_40
+ {
+ &gPlayerAnim_link_normal_jump_climb_up_free,
+ &gPlayerAnim_link_normal_jump_climb_up,
+ &gPlayerAnim_link_normal_jump_climb_up,
+ &gPlayerAnim_link_normal_jump_climb_up_free,
+ &gPlayerAnim_link_normal_jump_climb_up_free,
+ &gPlayerAnim_link_normal_jump_climb_up_free,
+ },
+ // PLAYER_ANIMGROUP_41
+ {
+ &gPlayerAnim_link_normal_down_slope_slip_end_free,
+ &gPlayerAnim_link_normal_down_slope_slip_end,
+ &gPlayerAnim_link_normal_down_slope_slip_end,
+ &gPlayerAnim_link_normal_down_slope_slip_end_long,
+ &gPlayerAnim_link_normal_down_slope_slip_end_free,
+ &gPlayerAnim_link_normal_down_slope_slip_end_free,
+ },
+ // PLAYER_ANIMGROUP_42
+ {
+ &gPlayerAnim_link_normal_up_slope_slip_end_free,
+ &gPlayerAnim_link_normal_up_slope_slip_end,
+ &gPlayerAnim_link_normal_up_slope_slip_end,
+ &gPlayerAnim_link_normal_up_slope_slip_end_long,
+ &gPlayerAnim_link_normal_up_slope_slip_end_free,
+ &gPlayerAnim_link_normal_up_slope_slip_end_free,
+ },
+ // PLAYER_ANIMGROUP_43
+ {
+ &gPlayerAnim_sude_nwait,
+ &gPlayerAnim_lkt_nwait,
+ &gPlayerAnim_lkt_nwait,
+ &gPlayerAnim_sude_nwait,
+ &gPlayerAnim_sude_nwait,
+ &gPlayerAnim_sude_nwait,
+ }
+};
+
+struct_8085C2A4 D_8085C2A4[] = {
+ /* 0 / Forward */
+ {
+ &gPlayerAnim_link_fighter_front_jump,
+ &gPlayerAnim_link_fighter_front_jump_end,
+ &gPlayerAnim_link_fighter_front_jump_endR,
+ },
+ /* 1 / Left */
+ {
+ &gPlayerAnim_link_fighter_Lside_jump,
+ &gPlayerAnim_link_fighter_Lside_jump_end,
+ &gPlayerAnim_link_fighter_Lside_jump_endL,
+ },
+ /* 2 / Back */
+ {
+ &gPlayerAnim_link_fighter_backturn_jump,
+ &gPlayerAnim_link_fighter_backturn_jump_end,
+ &gPlayerAnim_link_fighter_backturn_jump_endR,
+ },
+ /* 3 / Right */
+ {
+ &gPlayerAnim_link_fighter_Rside_jump,
+ &gPlayerAnim_link_fighter_Rside_jump_end,
+ &gPlayerAnim_link_fighter_Rside_jump_endR,
+ },
+ /* 4 / */
+ {
+ &gPlayerAnim_link_normal_newroll_jump_20f,
+ &gPlayerAnim_link_normal_newroll_jump_end_20f,
+ &gPlayerAnim_link_normal_newroll_jump_end_20f,
+ },
+ /* 5 / */
+ {
+ &gPlayerAnim_link_normal_newside_jump_20f,
+ &gPlayerAnim_link_normal_newside_jump_end_20f,
+ &gPlayerAnim_link_normal_newside_jump_end_20f,
+ },
+};
+
+// sCylinderInit
+ColliderCylinderInit D_8085C2EC = {
+ {
+ COLTYPE_HIT5,
+ AT_NONE,
+ AC_ON | AC_TYPE_ENEMY,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_PLAYER,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK1,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { 12, 60, 0, { 0, 0, 0 } },
+};
+
+// sShieldCylinderInit
+ColliderCylinderInit D_8085C318 = {
+ {
+ COLTYPE_METAL,
+ AT_ON | AT_TYPE_PLAYER,
+ AC_ON | AC_HARD | AC_TYPE_ENEMY,
+ OC1_NONE,
+ OC2_TYPE_PLAYER,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK2,
+ { 0x00100000, 0x00, 0x02 },
+ { 0xD7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { 25, 60, 0, { 0, 0, 0 } },
+};
+
+// sMeleeWeaponQuadInit
+ColliderQuadInit D_8085C344 = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_PLAYER,
+ AC_NONE,
+ OC1_NONE,
+ OC2_TYPE_PLAYER,
+ COLSHAPE_QUAD,
+ },
+ {
+ ELEMTYPE_UNK2,
+ { 0x00000000, 0x00, 0x01 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
+ { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } },
+};
+
+// sShieldQuadInit
+ColliderQuadInit D_8085C394 = {
+ {
+ COLTYPE_METAL,
+ AT_ON | AT_TYPE_PLAYER,
+ AC_ON | AC_HARD | AC_TYPE_ENEMY,
+ OC1_NONE,
+ OC2_TYPE_PLAYER,
+ COLSHAPE_QUAD,
+ },
+ {
+ ELEMTYPE_UNK2,
+ { 0x00100000, 0x00, 0x00 },
+ { 0xD7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } },
+};
+
+f32 D_8085C3E4 = 1.0f;
+f32 D_8085C3E8 = 1.0f;
+
+// ANIMSFX_TYPE_VOICE
+void Player_AnimSfx_PlayVoice(Player* this, u16 sfxId) {
+ u16 sfxOffset;
+
+ if (this->currentMask == PLAYER_MASK_GIANT) {
+ func_8019F830(&this->actor.projectedPos, sfxId);
+ } else if (this->actor.id == ACTOR_PLAYER) {
+ if (this->currentMask == PLAYER_MASK_SCENTS) {
+ sfxOffset = SFX_VOICE_BANK_SIZE * 7;
+ } else {
+ sfxOffset = this->ageProperties->voiceSfxIdOffset;
+ }
+
+ Player_PlaySfx(this, sfxOffset + sfxId);
+ }
+}
+
+u16 D_8085C3EC[] = {
+ NA_SE_VO_LI_SWEAT,
+ NA_SE_VO_LI_SNEEZE,
+ NA_SE_VO_LI_RELAX,
+ NA_SE_VO_LI_FALL_L,
+};
+
+void func_8082E00C(Player* this) {
+ s32 i;
+ u16* sfxIdPtr = D_8085C3EC;
+
+ for (i = 0; i < ARRAY_COUNT(D_8085C3EC); i++) {
+ AudioSfx_StopById((u16)(*sfxIdPtr + this->ageProperties->voiceSfxIdOffset));
+ sfxIdPtr++;
+ }
+}
+
+u16 Player_GetFloorSfx(Player* this, u16 sfxId) {
+ return sfxId + this->floorSfxOffset;
+}
+
+// ANIMSFX_TYPE_FLOOR
+void Player_AnimSfx_PlayFloor(Player* this, u16 sfxId) {
+ Player_PlaySfx(this, Player_GetFloorSfx(this, sfxId));
+}
+
+u16 Player_GetFloorSfxByAge(Player* this, u16 sfxId) {
+ return sfxId + this->floorSfxOffset + this->ageProperties->surfaceSfxIdOffset;
+}
+
+// ANIMSFX_TYPE_FLOOR_BY_AGE
+void Player_AnimSfx_PlayFloorByAge(Player* this, u16 sfxId) {
+ Player_PlaySfx(this, Player_GetFloorSfxByAge(this, sfxId));
+}
+
+// ANIMSFX_TYPE_6 and ANIMSFX_TYPE_8
+void Player_AnimSfx_PlayFloorWalk(Player* this, f32 freqVolumeLerp) {
+ s32 sfxId;
+
+ if (this->currentMask == PLAYER_MASK_GIANT) {
+ sfxId = NA_SE_PL_GIANT_WALK;
+ } else {
+ sfxId = Player_GetFloorSfxByAge(this, NA_SE_PL_WALK_GROUND);
+ }
+
+ // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume
+ func_8019F638(&this->actor.projectedPos, sfxId, freqVolumeLerp);
+}
+
+// ANIMSFX_TYPE_FLOOR_JUMP
+void Player_AnimSfx_PlayFloorJump(Player* this) {
+ Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_JUMP_GROUND));
+}
+
+// ANIMSFX_TYPE_FLOOR_LAND
+void Player_AnimSfx_PlayFloorLand(Player* this) {
+ Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_LAND_GROUND));
+}
+
+void func_8082E1F0(Player* this, u16 sfxId) {
+ Player_PlaySfx(this, sfxId);
+ this->stateFlags2 |= PLAYER_STATE2_8;
+}
+
+void Player_PlayAnimSfx(Player* this, AnimSfxEntry* entry) {
+ s32 cond;
+
+ do {
+ s32 data = ABS_ALT(entry->flags);
+ s32 type = ANIMSFX_GET_TYPE(data);
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, fabsf(ANIMSFX_GET_FRAME(data)))) {
+ if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_GENERAL)) {
+ Player_PlaySfx(this, entry->sfxId);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR)) {
+ Player_AnimSfx_PlayFloor(this, entry->sfxId);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_BY_AGE)) {
+ Player_AnimSfx_PlayFloorByAge(this, entry->sfxId);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_VOICE)) {
+ Player_AnimSfx_PlayVoice(this, entry->sfxId);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_LAND)) {
+ Player_AnimSfx_PlayFloorLand(this);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_6)) {
+ Player_AnimSfx_PlayFloorWalk(this, 6.0f);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_JUMP)) {
+ Player_AnimSfx_PlayFloorJump(this);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_8)) {
+ Player_AnimSfx_PlayFloorWalk(this, 0.0f);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_9)) {
+ // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume
+ func_8019F638(&this->actor.projectedPos, this->ageProperties->surfaceSfxIdOffset + NA_SE_PL_WALK_LADDER,
+ 0.0f);
+ } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_SURFACE)) {
+ Player_PlaySfx(this, entry->sfxId + this->ageProperties->surfaceSfxIdOffset);
+ }
+ }
+
+ cond = entry->flags >= 0;
+ entry++;
+ } while (cond);
+}
+
+void func_8082E438(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE,
+ -6.0f);
+}
+
+void func_8082E4A4(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE,
+ -6.0f);
+}
+
+void func_8082E514(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f);
+}
+
+void func_8082E55C(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f);
+}
+
+void func_8082E5A8(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
+}
+
+void func_8082E5EC(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
+}
+
+void func_8082E634(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -16.0f);
+}
+
+// Player_AnimationPlayLoopIfCurrentFinished
+s32 func_8082E67C(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, anim);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void func_8082E6D0(Player* this) {
+ this->skelAnime.prevTransl = this->skelAnime.baseTransl;
+ this->skelAnime.prevRot = this->actor.shape.rot.y;
+}
+
+void func_8082E6F8(Player* this) {
+ func_8082E6D0(this);
+ this->skelAnime.prevTransl.x *= this->ageProperties->unk_08;
+ this->skelAnime.prevTransl.y *= this->ageProperties->unk_08;
+ this->skelAnime.prevTransl.z *= this->ageProperties->unk_08;
+}
+
+void func_8082E784(Player* this) {
+ this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0;
+}
+
+void func_8082E794(Player* this) {
+ if (this->skelAnime.moveFlags) {
+ func_8082DC28(this);
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = this->skelAnime.baseTransl.x;
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = this->skelAnime.baseTransl.z;
+
+ if (this->skelAnime.moveFlags & ANIM_FLAG_8) {
+ if (this->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y) {
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.prevTransl.y;
+ }
+ } else {
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.baseTransl.y;
+ }
+ func_8082E6D0(this);
+ this->skelAnime.moveFlags = 0;
+ }
+}
+
+void func_8082E820(Player* this, s32 moveFlags) {
+ Vec3f pos;
+
+ this->skelAnime.moveFlags = moveFlags;
+ this->skelAnime.prevTransl = this->skelAnime.baseTransl;
+ SkelAnime_UpdateTranslation(&this->skelAnime, &pos, this->actor.shape.rot.y);
+
+ if (moveFlags & ANIM_FLAG_1) {
+ pos.x *= this->ageProperties->unk_08;
+ pos.z *= this->ageProperties->unk_08;
+ this->actor.world.pos.x += pos.x * this->actor.scale.x;
+ this->actor.world.pos.z += pos.z * this->actor.scale.z;
+ }
+
+ if (moveFlags & ANIM_FLAG_UPDATE_Y) {
+ if (!(moveFlags & ANIM_FLAG_4)) {
+ pos.y *= this->ageProperties->unk_08;
+ }
+ this->actor.world.pos.y += pos.y * this->actor.scale.y;
+ }
+
+ func_8082DC28(this);
+}
+
+void func_8082E920(PlayState* play, Player* this, s32 moveFlags) {
+ if (moveFlags & ANIM_FLAG_200) {
+ func_8082E6F8(this);
+ } else if ((moveFlags & ANIM_FLAG_100) || this->skelAnime.moveFlags) {
+ func_8082E6D0(this);
+ } else {
+ this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1];
+ this->skelAnime.prevRot = this->actor.shape.rot.y;
+ }
+
+ this->skelAnime.moveFlags = moveFlags;
+ Player_StopHorizontalMovement(this);
+ AnimationContext_DisableQueue(play);
+}
+
+void func_8082E9C8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) {
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, playSpeed);
+ func_8082E920(play, this, moveFlags);
+}
+
+void func_8082EA10(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) {
+ func_8082E9C8(play, this, anim, moveFlags, 3.0f / 3.0f);
+}
+
+void func_8082EA38(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) {
+ func_8082E9C8(play, this, anim, moveFlags, 2.0f / 3.0f);
+}
+
+void func_8082EA60(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_8082EA38(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_200);
+}
+
+void func_8082EA80(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) {
+ PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, playSpeed);
+ func_8082E920(play, this, moveFlags);
+}
+
+void func_8082EAC8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) {
+ func_8082EA80(play, this, anim, moveFlags, 3.0f / 3.0f);
+}
+
+void func_8082EAF0(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) {
+ func_8082EA80(play, this, anim, moveFlags, 2.0f / 3.0f);
+}
+
+void func_8082EB18(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_8082EAF0(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE);
+}
+
+void func_8082EB38(PlayState* play, Player* this) {
+ s8 var_v0;
+ s8 var_v1;
+
+ this->unk_D60 = D_80862AFC;
+ this->unk_D64 = D_80862B00;
+ func_800FF3A0(&D_80862AFC, &D_80862B00, sPlayerControlInput);
+
+ if (D_80862AFC < 8.0f) {
+ D_80862AFC = 0.0f;
+ }
+
+ D_80862B02 = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]) + D_80862B00;
+ this->unk_ADE = (this->unk_ADE + 1) % ARRAY_COUNT(this->unk_ADF);
+ if (D_80862AFC < 55.0f) {
+ var_v0 = -1;
+ var_v1 = -1;
+ } else {
+ var_v1 = ((u16)(D_80862B00 + 0x2000)) >> 9;
+ var_v0 = ((u16)(BINANG_SUB(D_80862B02, this->actor.shape.rot.y) + 0x2000)) >> 14;
+ }
+ this->unk_ADF[this->unk_ADE] = var_v1;
+ this->unk_AE3[this->unk_ADE] = var_v0;
+}
+
+void func_8082EC9C(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, D_8085C3E4);
+}
+
+s32 func_8082ECCC(Player* this) {
+ return this->stateFlags1 & PLAYER_STATE1_1000000;
+}
+
+#define CHEST_ANIM_SHORT 0
+#define CHEST_ANIM_LONG 1
+
+// TODO: consider what to do with the NONEs: cannot use a zero-argument macro like OoT since the text id is involved.
+#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \
+ { itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId }
+
+#define GIFIELD_GET_DROP_TYPE(field) ((field)&0x1F)
+#define GIFIELD_20 (1 << 5)
+#define GIFIELD_40 (1 << 6)
+#define GIFIELD_NO_COLLECTIBLE (1 << 7)
+/**
+ * `flags` must be 0, GIFIELD_20, GIFIELD_40 or GIFIELD_NO_COLLECTIBLE (which can be or'ed together)
+ * `dropType` must be either a value from the `Item00Type` enum or 0 if the `GIFIELD_NO_COLLECTIBLE` flag was used
+ */
+#define GIFIELD(flags, dropType) ((flags) | (dropType))
+
+GetItemEntry sGetItemTable[GI_MAX - 1] = {
+ // GI_RUPEE_GREEN
+ GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xC4, GIFIELD(0, ITEM00_RUPEE_GREEN), CHEST_ANIM_SHORT),
+ // GI_RUPEE_BLUE
+ GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0x2, GIFIELD(0, ITEM00_RUPEE_BLUE), CHEST_ANIM_SHORT),
+ // GI_RUPEE_10
+ GET_ITEM(ITEM_RUPEE_10, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x3, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT),
+ // GI_RUPEE_RED
+ GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x4, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT),
+ // GI_RUPEE_PURPLE
+ GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0x5, GIFIELD(0, ITEM00_RUPEE_PURPLE),
+ CHEST_ANIM_SHORT),
+ // GI_RUPEE_SILVER
+ GET_ITEM(ITEM_RUPEE_SILVER, OBJECT_GI_RUPY, GID_RUPEE_SILVER, 0x6, GIFIELD(0, ITEM00_RUPEE_PURPLE),
+ CHEST_ANIM_SHORT),
+ // GI_RUPEE_HUGE
+ GET_ITEM(ITEM_RUPEE_HUGE, OBJECT_GI_RUPY, GID_RUPEE_HUGE, 0x7, GIFIELD(0, ITEM00_RUPEE_HUGE), CHEST_ANIM_SHORT),
+ // GI_WALLET_ADULT
+ GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_WALLET_GIANT
+ GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_RECOVERY_HEART
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xA, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_0B
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xB,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_HEART_PIECE
+ GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_HEART_CONTAINER
+ GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xD,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MAGIC_SMALL
+ GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE,
+ GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_SMALL), CHEST_ANIM_SHORT),
+ // GI_MAGIC_LARGE
+ GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xF,
+ GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_LARGE), CHEST_ANIM_SHORT),
+ // GI_10
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x10, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_STRAY_FAIRY
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x11, 0, 0),
+ // GI_12
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x12, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_13
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x13, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_BOMBS_1
+ GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x14, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT),
+ // GI_BOMBS_5
+ GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x15, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT),
+ // GI_BOMBS_10
+ GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x16, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT),
+ // GI_BOMBS_20
+ GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x17, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT),
+ // GI_BOMBS_30
+ GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x18, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT),
+ // GI_STICKS_1
+ GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x19, GIFIELD(0, ITEM00_STICK), CHEST_ANIM_SHORT),
+ // GI_BOMBCHUS_10
+ GET_ITEM(ITEM_BOMBCHUS_10, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x1A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_BOMB_BAG_20
+ GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x1B,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BOMB_BAG_30
+ GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x1C,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BOMB_BAG_40
+ GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x1D,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_ARROWS_10
+ GET_ITEM(ITEM_ARROWS_10, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0x1E, GIFIELD(GIFIELD_40, ITEM00_ARROWS_30),
+ CHEST_ANIM_SHORT),
+ // GI_ARROWS_30
+ GET_ITEM(ITEM_ARROWS_30, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0x1F, GIFIELD(GIFIELD_40, ITEM00_ARROWS_40),
+ CHEST_ANIM_SHORT),
+ // GI_ARROWS_40
+ GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x20, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50),
+ CHEST_ANIM_SHORT),
+ // GI_ARROWS_50
+ GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x21, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50),
+ CHEST_ANIM_SHORT),
+ // GI_QUIVER_30
+ GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x22, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_QUIVER_40
+ GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x23, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_QUIVER_50
+ GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x24, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_ARROW_FIRE
+ GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x25, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_ARROW_ICE
+ GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x26, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_ARROW_LIGHT
+ GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x27,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_NUTS_1
+ GET_ITEM(ITEM_NUT, OBJECT_GI_NUTS, GID_NUTS, 0x28, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT),
+ // GI_NUTS_5
+ GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x29, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT),
+ // GI_NUTS_10
+ GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x2A, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT),
+ // GI_2B
+ GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2B, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_2C
+ GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_2D
+ GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0x2D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_BOMBCHUS_20
+ GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x2E, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_2F
+ GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x2F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_30
+ GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x30, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_31
+ GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x31, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_SHIELD_HERO
+ GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x32,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT),
+ // GI_SHIELD_MIRROR
+ GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x33,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_POWDER_KEG
+ GET_ITEM(ITEM_POWDER_KEG, OBJECT_GI_BIGBOMB, GID_POWDER_KEG, 0x34, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MAGIC_BEANS
+ GET_ITEM(ITEM_MAGIC_BEANS, OBJECT_GI_BEAN, GID_MAGIC_BEANS, 0x35, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_BOMBCHUS_1
+ GET_ITEM(ITEM_BOMBCHUS_1, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x36, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_SWORD_KOKIRI
+ GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x37,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SWORD_RAZOR
+ GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x38,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SWORD_GILDED
+ GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x39,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BOMBCHUS_5
+ GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x3A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_SWORD_GREAT_FAIRY
+ GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x3B,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_KEY_SMALL
+ GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x3C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_KEY_BOSS
+ GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0x3D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MAP
+ GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x3E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_COMPASS
+ GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x3F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_40
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x40, 0, 0),
+ // GI_HOOKSHOT
+ GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x41, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_LENS
+ GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x42, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_PICTO_BOX
+ GET_ITEM(ITEM_PICTO_BOX, OBJECT_GI_CAMERA, GID_PICTO_BOX, 0x43, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_44
+ GET_ITEM(ITEM_PICTO_BOX, OBJECT_UNSET_0, GID_NONE, 0x44, GIFIELD(0, ITEM00_RUPEE_GREEN), 0),
+ // GI_45
+ GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x45, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_46
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x46, 0, 0),
+ // GI_47
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x47, 0, 0),
+ // GI_48
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x48, 0, 0),
+ // GI_49
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x49, 0, 0),
+ // GI_4A
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4A, 0, 0),
+ // GI_4B
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4B, 0, 0),
+ // GI_OCARINA
+ GET_ITEM(ITEM_OCARINA, OBJECT_GI_OCARINA, GID_OCARINA, 0x4C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_4D
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4D, 0, 0),
+ // GI_4E
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4E, 0, 0),
+ // GI_4F
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4F, 0, 0),
+ // GI_BOMBERS_NOTEBOOK
+ GET_ITEM(ITEM_BOMBERS_NOTEBOOK, OBJECT_GI_SCHEDULE, GID_BOMBERS_NOTEBOOK, 0x50, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_51
+ GET_ITEM(ITEM_NONE, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x51, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_SKULL_TOKEN
+ GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0x52, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_SHORT),
+ // GI_53
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x53, 0, 0),
+ // GI_54
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x54, 0, 0),
+ // GI_REMAINS_ODOLWA
+ GET_ITEM(ITEM_REMAINS_ODOLWA, OBJECT_UNSET_0, GID_REMAINS_ODOLWA, 0x55, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_REMAINS_GOHT
+ GET_ITEM(ITEM_REMAINS_GOHT, OBJECT_UNSET_0, GID_REMAINS_GOHT, 0x56, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_REMAINS_GYORG
+ GET_ITEM(ITEM_REMAINS_GYORG, OBJECT_UNSET_0, GID_REMAINS_GYORG, 0x57, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_REMAINS_TWINMOLD
+ GET_ITEM(ITEM_REMAINS_TWINMOLD, OBJECT_UNSET_0, GID_REMAINS_TWINMOLD, 0x58, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_POTION_RED_BOTTLE
+ GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_BOTTLE_RED, GID_57, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0),
+ GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BOTTLE
+ GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_POTION_RED
+ GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x5B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_POTION_GREEN
+ GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x5C, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_POTION_BLUE
+ GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x5D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_FAIRY
+ GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE_04, GID_FAIRY, 0x5E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_DEKU_PRINCESS
+ GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MILK_BOTTLE
+ GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x60, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MILK_HALF
+ GET_ITEM(ITEM_MILK_HALF, OBJECT_GI_MILK, GID_MILK, 0x61, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_FISH
+ GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x62, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BUG
+ GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x63, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BLUE_FIRE
+ GET_ITEM(ITEM_BLUE_FIRE, OBJECT_UNSET_0, GID_NONE, 0x64, GIFIELD(0, ITEM00_RUPEE_GREEN), 0),
+ // GI_POE
+ GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x65, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_BIG_POE
+ GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0x66, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SPRING_WATER
+ GET_ITEM(ITEM_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x67, GIFIELD(0, ITEM00_RUPEE_GREEN), 0),
+ // GI_HOT_SPRING_WATER
+ GET_ITEM(ITEM_HOT_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x68, GIFIELD(0, ITEM00_RUPEE_GREEN), 0),
+ // GI_ZORA_EGG
+ GET_ITEM(ITEM_ZORA_EGG, OBJECT_GI_BOTTLE_15, GID_ZORA_EGG, 0x69, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_GOLD_DUST
+ GET_ITEM(ITEM_GOLD_DUST, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MUSHROOM
+ GET_ITEM(ITEM_MUSHROOM, OBJECT_GI_MAGICMUSHROOM, GID_MUSHROOM, 0x6B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_6C
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x6C, GIFIELD(0, ITEM00_RUPEE_GREEN), 0),
+ // GI_6D
+ GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x6D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SEAHORSE
+ GET_ITEM(ITEM_SEAHORSE, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_CHATEAU_BOTTLE
+ GET_ITEM(ITEM_CHATEAU, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x6F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_HYLIAN_LOACH
+ GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x70, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_71
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x71, 0, 0),
+ // GI_72
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x72, 0, 0),
+ // GI_73
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x73, 0, 0),
+ // GI_74
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x74, 0, 0),
+ // GI_75
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x75, 0, 0),
+ // GI_ICE_TRAP
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x76, 0, 0),
+ // GI_77
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x77, 0, 0),
+ // GI_MASK_DEKU
+ GET_ITEM(ITEM_MASK_DEKU, OBJECT_GI_NUTSMASK, GID_MASK_DEKU, 0x78, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_GORON
+ GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x79,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_ZORA
+ GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x7A, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_FIERCE_DEITY
+ GET_ITEM(ITEM_MASK_FIERCE_DEITY, OBJECT_GI_MASK03, GID_MASK_FIERCE_DEITY, 0x7B,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_CAPTAIN
+ GET_ITEM(ITEM_MASK_CAPTAIN, OBJECT_GI_MASK18, GID_MASK_CAPTAIN, 0x7C,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_GIANT
+ GET_ITEM(ITEM_MASK_GIANT, OBJECT_GI_MASK23, GID_MASK_GIANT, 0x7D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_ALL_NIGHT
+ GET_ITEM(ITEM_MASK_ALL_NIGHT, OBJECT_GI_MASK06, GID_MASK_ALL_NIGHT, 0x7E,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_BUNNY
+ GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x7F,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_KEATON
+ GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x80,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_GARO
+ GET_ITEM(ITEM_MASK_GARO, OBJECT_GI_MASK09, GID_MASK_GARO, 0x81, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_ROMANI
+ GET_ITEM(ITEM_MASK_ROMANI, OBJECT_GI_MASK10, GID_MASK_ROMANI, 0x82, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_CIRCUS_LEADER
+ GET_ITEM(ITEM_MASK_CIRCUS_LEADER, OBJECT_GI_MASK11, GID_MASK_CIRCUS_LEADER, 0x83,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_POSTMAN
+ GET_ITEM(ITEM_MASK_POSTMAN, OBJECT_GI_MASK12, GID_MASK_POSTMAN, 0x84,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_COUPLE
+ GET_ITEM(ITEM_MASK_COUPLE, OBJECT_GI_MASK13, GID_MASK_COUPLE, 0x85, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_GREAT_FAIRY
+ GET_ITEM(ITEM_MASK_GREAT_FAIRY, OBJECT_GI_MASK14, GID_MASK_GREAT_FAIRY, 0x86,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_GIBDO
+ GET_ITEM(ITEM_MASK_GIBDO, OBJECT_GI_MASK15, GID_MASK_GIBDO, 0x87, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_DON_GERO
+ GET_ITEM(ITEM_MASK_DON_GERO, OBJECT_GI_MASK16, GID_MASK_DON_GERO, 0x88,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_KAMARO
+ GET_ITEM(ITEM_MASK_KAMARO, OBJECT_GI_MASK17, GID_MASK_KAMARO, 0x89, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_TRUTH
+ GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x8A,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_STONE
+ GET_ITEM(ITEM_MASK_STONE, OBJECT_GI_STONEMASK, GID_MASK_STONE, 0x8B,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_MASK_BREMEN
+ GET_ITEM(ITEM_MASK_BREMEN, OBJECT_GI_MASK20, GID_MASK_BREMEN, 0x8C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_BLAST
+ GET_ITEM(ITEM_MASK_BLAST, OBJECT_GI_MASK21, GID_MASK_BLAST, 0x8D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_SCENTS
+ GET_ITEM(ITEM_MASK_SCENTS, OBJECT_GI_MASK22, GID_MASK_SCENTS, 0x8E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MASK_KAFEIS_MASK
+ GET_ITEM(ITEM_MASK_KAFEIS_MASK, OBJECT_GI_MASK05, GID_MASK_KAFEIS_MASK, 0x8F,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_90
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x90, 0, 0),
+ // GI_CHATEAU
+ GET_ITEM(ITEM_CHATEAU_2, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x91, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MILK
+ GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x92, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_GOLD_DUST_2
+ GET_ITEM(ITEM_GOLD_DUST_2, OBJECT_GI_GOLD_DUST, GID_GOLD_DUST, 0x93, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_HYLIAN_LOACH_2
+ GET_ITEM(ITEM_HYLIAN_LOACH_2, OBJECT_GI_LOACH, GID_HYLIAN_LOACH, 0x94, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_SEAHORSE_CAUGHT
+ GET_ITEM(ITEM_SEAHORSE_CAUGHT, OBJECT_GI_SEAHORSE, GID_SEAHORSE_CAUGHT, 0x95, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_MOON_TEAR
+ GET_ITEM(ITEM_MOON_TEAR, OBJECT_GI_RESERVE00, GID_MOON_TEAR, 0x96, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_DEED_LAND
+ GET_ITEM(ITEM_DEED_LAND, OBJECT_GI_RESERVE01, GID_DEED_LAND, 0x97, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_DEED_SWAMP
+ GET_ITEM(ITEM_DEED_SWAMP, OBJECT_GI_RESERVE01, GID_DEED_SWAMP, 0x98, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_DEED_MOUNTAIN
+ GET_ITEM(ITEM_DEED_MOUNTAIN, OBJECT_GI_RESERVE01, GID_DEED_MOUNTAIN, 0x99, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_DEED_OCEAN
+ GET_ITEM(ITEM_DEED_OCEAN, OBJECT_GI_RESERVE01, GID_DEED_OCEAN, 0x9A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_SWORD_GREAT_FAIRY_STOLEN
+ GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x9B,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SWORD_KOKIRI_STOLEN
+ GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x9C,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SWORD_RAZOR_STOLEN
+ GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x9D,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SWORD_GILDED_STOLEN
+ GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x9E,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_SHIELD_HERO_STOLEN
+ GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x9F,
+ GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT),
+ // GI_ROOM_KEY
+ GET_ITEM(ITEM_ROOM_KEY, OBJECT_GI_RESERVE_B_00, GID_ROOM_KEY, 0xA0, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_LETTER_TO_MAMA
+ GET_ITEM(ITEM_LETTER_MAMA, OBJECT_GI_RESERVE_B_01, GID_LETTER_MAMA, 0xA1, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_A2
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA2, 0, 0),
+ // GI_A3
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA3, 0, 0),
+ // GI_A4
+ GET_ITEM(ITEM_NONE, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0xA4, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_A5
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA5, 0, 0),
+ // GI_A6
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA6, 0, 0),
+ // GI_A7
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA7, 0, 0),
+ // GI_A8
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA8, 0, 0),
+ // GI_BOTTLE_STOLEN
+ GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0xA9, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_LETTER_TO_KAFEI
+ GET_ITEM(ITEM_LETTER_TO_KAFEI, OBJECT_GI_RESERVE_C_00, GID_LETTER_TO_KAFEI, 0xAA,
+ GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_PENDANT_OF_MEMORIES
+ GET_ITEM(ITEM_PENDANT_OF_MEMORIES, OBJECT_GI_RESERVE_C_01, GID_PENDANT_OF_MEMORIES, 0xAB,
+ GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_AC
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAC, 0, 0),
+ // GI_AD
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAD, 0, 0),
+ // GI_AE
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAE, 0, 0),
+ // GI_AF
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAF, 0, 0),
+ // GI_B0
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB0, 0, 0),
+ // GI_B1
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB1, 0, 0),
+ // GI_B2
+ GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB2, 0, 0),
+ // GI_B3
+ GET_ITEM(ITEM_NONE, OBJECT_GI_MSSA, GID_MASK_SUN, 0xB3, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_CLOCK_TOWN
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB4, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_WOODFALL
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB5, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_SNOWHEAD
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB6, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_ROMANI_RANCH
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB7, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_GREAT_BAY
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+ // GI_TINGLE_MAP_STONE_TOWER
+ GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0),
+ CHEST_ANIM_LONG),
+};
+
+// Player_UpdateCurrentGetItemDrawId?
+void func_8082ECE0(Player* this) {
+ GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
+
+ this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid);
+}
+
+PlayerAnimationHeader* func_8082ED20(Player* this) {
+ if ((this->transformation == PLAYER_FORM_ZORA) || (this->actor.id != ACTOR_PLAYER)) {
+ return &gPlayerAnim_pz_wait;
+ }
+ if (this->transformation == PLAYER_FORM_GORON) {
+ return &gPlayerAnim_pg_wait;
+ }
+ if (this->currentMask == PLAYER_MASK_SCENTS) {
+ return &gPlayerAnim_cl_msbowait;
+ }
+ return D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType];
+}
+
+PlayerAnimationHeader* sPlayerIdleAnimations[][2] = {
+ { &gPlayerAnim_link_normal_wait_typeA_20f, &gPlayerAnim_link_normal_waitF_typeA_20f }, // ROOM_BEHAVIOR_TYPE2_0
+ { &gPlayerAnim_link_normal_wait_typeC_20f, &gPlayerAnim_link_normal_waitF_typeC_20f }, // ROOM_BEHAVIOR_TYPE2_1
+ { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_2
+ { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_HOT
+ { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_4
+ { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_5
+ { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_6
+ { &gPlayerAnim_link_wait_heat1_20f, &gPlayerAnim_link_waitF_heat1_20f },
+ { &gPlayerAnim_link_wait_heat2_20f, &gPlayerAnim_link_waitF_heat2_20f },
+ { &gPlayerAnim_link_wait_itemD1_20f, &gPlayerAnim_link_wait_itemD1_20f },
+ { &gPlayerAnim_link_wait_itemA_20f, &gPlayerAnim_link_waitF_itemA_20f },
+ { &gPlayerAnim_link_wait_itemB_20f, &gPlayerAnim_link_waitF_itemB_20f },
+ { &gPlayerAnim_link_wait_itemC_20f, &gPlayerAnim_link_wait_itemC_20f },
+ { &gPlayerAnim_link_wait_itemD2_20f, &gPlayerAnim_link_wait_itemD2_20f },
+ { &gPlayerAnim_cl_msbowait, &gPlayerAnim_cl_msbowait },
+};
+
+AnimSfxEntry D_8085C8C4[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 8, NA_SE_VO_LI_SNEEZE, STOP),
+};
+AnimSfxEntry D_8085C8C8[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_SWEAT, STOP),
+};
+AnimSfxEntry D_8085C8CC[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_BREATH_REST, STOP),
+};
+AnimSfxEntry D_8085C8D0[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_BREATH_REST, STOP),
+};
+
+AnimSfxEntry D_8085C8D4[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 44, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 52, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 56, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_PL_CALM_HIT, STOP),
+};
+
+AnimSfxEntry D_8085C8E8[] = {
+ ANIMSFX(ANIMSFX_TYPE_8, 25, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 44, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 48, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 52, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 56, NA_SE_NONE, STOP),
+};
+
+AnimSfxEntry D_8085C900[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 16, NA_SE_IT_SHIELD_SWING, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_SHIELD_SWING, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 70, NA_SE_IT_SHIELD_SWING, STOP),
+};
+
+AnimSfxEntry D_8085C90C[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_IT_HAMMER_SWING, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_AUTO_JUMP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 22, NA_SE_IT_SWORD_SWING, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 22, NA_SE_VO_LI_SWORD_N, STOP),
+};
+
+AnimSfxEntry D_8085C91C[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 39, NA_SE_IT_SWORD_SWING, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 39, NA_SE_VO_LI_SWORD_N, STOP),
+};
+AnimSfxEntry D_8085C924[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 20, NA_SE_VO_LI_RELAX, STOP),
+};
+
+AnimSfxEntry D_8085C928[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LI_POO_WAIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 12, NA_SE_VO_LI_POO_WAIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_VO_LI_POO_WAIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 61, NA_SE_VO_LI_POO_WAIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_VO_LI_POO_WAIT, STOP),
+};
+
+AnimSfxEntry* D_8085C93C[] = {
+ D_8085C8C4, D_8085C8C8, D_8085C8CC, D_8085C8D0, D_8085C8D4, D_8085C8E8,
+ D_8085C900, D_8085C90C, D_8085C91C, D_8085C924, D_8085C928, NULL,
+};
+
+// Used to index into D_8085C93C
+u8 D_8085C96C[] = {
+ 0, 0, 1, 1, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 3, 3, 4, 4, 8, 8, 5, 5, 6, 6, 7, 7, 9, 9, 11, 11,
+};
+
+s32 func_8082ED94(Player* this) {
+ PlayerAnimationHeader** entry;
+ s32 i;
+
+ if ((this->skelAnime.animation != &gPlayerAnim_link_normal_newroll_jump_end_20f) &&
+ (this->skelAnime.animation != &gPlayerAnim_link_normal_newside_jump_end_20f)) {
+ if ((this->skelAnime.animation != func_8082ED20(this)) ||
+ (this->skelAnime.animation == &gPlayerAnim_cl_msbowait)) {
+ for (i = 0, entry = &sPlayerIdleAnimations[0][0]; i < ARRAY_COUNT_2D(sPlayerIdleAnimations); i++) {
+ if (this->skelAnime.animation == *entry) {
+ return i + 1;
+ }
+ entry++;
+ }
+
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+void func_8082EEA4(Player* this, s32 arg1) {
+ u8 temp_v0 = D_8085C96C[arg1];
+
+ if (temp_v0 != 0) {
+ Player_PlayAnimSfx(this, D_8085C93C[temp_v0 - 1]);
+ }
+}
+
+PlayerAnimationHeader* func_8082EEE0(Player* this) {
+ if (this->unk_B64 != 0) {
+ return D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType];
+ } else {
+ return D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType];
+ }
+}
+
+s32 func_8082EF20(Player* this) {
+ return func_8082ECCC(this) && (this->unk_ACC != 0);
+}
+
+PlayerAnimationHeader* func_8082EF54(Player* this) {
+ if (func_8082EF20(this)) {
+ return &gPlayerAnim_link_boom_throw_waitR;
+ } else {
+ return D_8085BE84[PLAYER_ANIMGROUP_5][this->modelAnimType];
+ }
+}
+
+PlayerAnimationHeader* func_8082EF9C(Player* this) {
+ if (func_8082EF20(this)) {
+ return &gPlayerAnim_link_boom_throw_waitL;
+ } else {
+ return D_8085BE84[PLAYER_ANIMGROUP_4][this->modelAnimType];
+ }
+}
+
+PlayerAnimationHeader* func_8082EFE4(Player* this) {
+ if (func_800B7128(this)) {
+ return &gPlayerAnim_link_bow_side_walk;
+ } else {
+ return D_8085BE84[PLAYER_ANIMGROUP_22][this->modelAnimType];
+ }
+}
+
+void Player_LerpEnvLighting(PlayState* play, PlayerEnvLighting* lighting, f32 lerp) {
+ Environment_LerpAmbientColor(play, &lighting->ambientColor, lerp);
+ Environment_LerpDiffuseColor(play, &lighting->diffuseColor, lerp);
+ Environment_LerpFogColor(play, &lighting->fogColor, lerp);
+ Environment_LerpFog(play, lighting->fogNear, lighting->zFar, lerp);
+}
+
+/**
+ * Revert cylinder to normal properties
+ */
+void Player_ResetCylinder(Player* this) {
+ this->cylinder.base.colType = COLTYPE_HIT5;
+ this->cylinder.base.atFlags = AT_NONE;
+ this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY;
+ this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL;
+ this->cylinder.info.elemType = ELEMTYPE_UNK1;
+ this->cylinder.info.toucher.dmgFlags = 0;
+ this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF;
+ this->cylinder.info.toucherFlags = TOUCH_NONE | TOUCH_SFX_NORMAL;
+ this->cylinder.dim.radius = 12;
+}
+
+/**
+ * Give cylinder special properties for attacks, uses include
+ * - Normal roll
+ * - Deku spin
+ * - Deku launch
+ * - Goron pound
+ * - Goron spike roll
+ * - Zora barrier
+ *
+ * and possibly more.
+ *
+ * @param dmgFlags Damage flags (DMGFLAG defines)
+ * @param damage to do
+ * @param radius of cylinder
+ */
+void Player_SetCylinderForAttack(Player* this, u32 dmgFlags, s32 damage, s32 radius) {
+ this->cylinder.base.atFlags = AT_ON | AT_TYPE_PLAYER;
+ if (radius > 30) {
+ this->cylinder.base.ocFlags1 = OC1_NONE;
+ } else {
+ this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL;
+ }
+
+ this->cylinder.info.elemType = ELEMTYPE_UNK2;
+ this->cylinder.info.toucherFlags = TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_NORMAL;
+ this->cylinder.dim.radius = radius;
+ this->cylinder.info.toucher.dmgFlags = dmgFlags;
+ this->cylinder.info.toucher.damage = damage;
+
+ if (dmgFlags & DMG_GORON_POUND) {
+ this->cylinder.base.acFlags = AC_NONE;
+ } else {
+ this->cylinder.base.colType = COLTYPE_NONE;
+ this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF;
+
+ if (dmgFlags & DMG_ZORA_BARRIER) {
+ this->cylinder.base.acFlags = AC_NONE;
+ } else {
+ this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY;
+ }
+ }
+}
+
+// Check for starting Zora barrier
+void func_8082F164(Player* this, u16 button) {
+ if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, button)) {
+ this->stateFlags1 |= PLAYER_STATE1_10;
+ }
+}
+
+PlayerEnvLighting sZoraBarrierEnvLighting = {
+ { 0, 0, 0 }, // ambientColor
+ { 255, 255, 155 }, // diffuseColor
+ { 20, 20, 50 }, // fogColor
+ 940, // fogNear
+ 5000, // zFar
+};
+
+// Run Zora Barrier
+void func_8082F1AC(PlayState* play, Player* this) {
+ s32 sp4C = this->unk_B62;
+ f32 temp;
+ s16 sp46;
+ s16 sp44;
+ f32 sp40;
+ f32 sp3C;
+ s32 var_v0;
+
+ if ((gSaveContext.save.saveInfo.playerData.magic != 0) && (this->stateFlags1 & PLAYER_STATE1_10)) {
+ if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
+ Magic_Consume(play, 0, MAGIC_CONSUME_GORON_ZORA);
+ }
+
+ temp = 16.0f;
+ if (gSaveContext.save.saveInfo.playerData.magic >= 16) {
+ var_v0 = 255;
+ } else {
+ var_v0 = (gSaveContext.save.saveInfo.playerData.magic / temp) * 255.0f;
+ }
+ Math_StepToS(&this->unk_B62, var_v0, 50);
+ } else if (Math_StepToS(&this->unk_B62, 0, 50) && (gSaveContext.magicState != MAGIC_STATE_IDLE)) {
+ Magic_Reset(play);
+ }
+
+ if ((this->unk_B62 != 0) || (sp4C != 0)) {
+ f32 sp34;
+ f32 new_var;
+
+ sp46 = play->gameplayFrames * 7000;
+ sp44 = play->gameplayFrames * 14000;
+ Player_LerpEnvLighting(play, &sZoraBarrierEnvLighting, this->unk_B62 / 255.0f);
+
+ sp34 = Math_SinS(sp44) * 40.0f;
+ sp40 = Math_CosS(sp44) * 40.0f;
+ sp3C = Math_SinS(sp46) * sp34;
+ new_var = Math_CosS(sp46) * sp34;
+
+ Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x + sp40, this->actor.world.pos.y + sp3C,
+ this->actor.world.pos.z + new_var, 100, 200, 255, 600);
+
+ Player_PlaySfx(this, NA_SE_PL_ZORA_SPARK_BARRIER - SFX_FLAG);
+ Actor_SetPlayerImpact(play, PLAYER_IMPACT_ZORA_BARRIER, 2, 100.0f, &this->actor.world.pos);
+ }
+}
+
+void func_8082F43C(PlayState* play, Player* this, PlayerFuncAC4 arg2) {
+ this->unk_AC4 = arg2;
+ this->unk_ACE = 0;
+ this->unk_AC8 = 0.0f;
+ func_8082E00C(this);
+}
+
+#define GET_PLAYER_ANIM(group, type) ((PlayerAnimationHeader**)D_8085BE84)[group * PLAYER_ANIMTYPE_MAX + type]
+
+void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) {
+ PlayerAnimationHeader* curAnim = this->skelAnime.animation;
+ PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType];
+ s32 i;
+
+ this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000);
+
+ for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) {
+ if (curAnim == **iter) {
+ break;
+ }
+ iter++;
+ }
+
+ func_8082F8BC(play, this, itemAction);
+
+ if (i < PLAYER_ANIMGROUP_MAX) {
+ this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType);
+ }
+}
+
+s8 sItemItemActions[] = {
+ PLAYER_IA_OCARINA, // ITEM_OCARINA,
+ PLAYER_IA_BOW, // ITEM_BOW,
+ PLAYER_IA_BOW_FIRE, // ITEM_ARROW_FIRE,
+ PLAYER_IA_BOW_ICE, // ITEM_ARROW_ICE,
+ PLAYER_IA_BOW_LIGHT, // ITEM_ARROW_LIGHT,
+ PLAYER_IA_PICTO_BOX, // ITEM_OCARINA_FAIRY,
+ PLAYER_IA_BOMB, // ITEM_BOMB,
+ PLAYER_IA_BOMBCHU, // ITEM_BOMBCHU,
+ PLAYER_IA_STICK, // ITEM_STICK,
+ PLAYER_IA_NUT, // ITEM_NUT,
+ PLAYER_IA_MAGIC_BEANS, // ITEM_MAGIC_BEANS,
+ PLAYER_IA_PICTO_BOX, // ITEM_SLINGSHOT,
+ PLAYER_IA_POWDER_KEG, // ITEM_POWDER_KEG,
+ PLAYER_IA_PICTO_BOX, // ITEM_PICTO_BOX,
+ PLAYER_IA_LENS, // ITEM_LENS,
+ PLAYER_IA_HOOKSHOT, // ITEM_HOOKSHOT,
+ PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_GREAT_FAIRY,
+ PLAYER_IA_PICTO_BOX, // ITEM_LONGSHOT, // OoT Leftover
+ PLAYER_IA_BOTTLE_EMPTY, // ITEM_BOTTLE,
+ PLAYER_IA_BOTTLE_POTION_RED, // ITEM_POTION_RED,
+ PLAYER_IA_BOTTLE_POTION_GREEN, // ITEM_POTION_GREEN,
+ PLAYER_IA_BOTTLE_POTION_BLUE, // ITEM_POTION_BLUE,
+ PLAYER_IA_BOTTLE_FAIRY, // ITEM_FAIRY,
+ PLAYER_IA_BOTTLE_DEKU_PRINCESS, // ITEM_DEKU_PRINCESS,
+ PLAYER_IA_BOTTLE_MILK, // ITEM_MILK_BOTTLE,
+ PLAYER_IA_BOTTLE_MILK_HALF, // ITEM_MILK_HALF,
+ PLAYER_IA_BOTTLE_FISH, // ITEM_FISH,
+ PLAYER_IA_BOTTLE_BUG, // ITEM_BUG,
+ PLAYER_IA_BOTTLE_BUG, // ITEM_BLUE_FIRE, // !
+ PLAYER_IA_BOTTLE_POE, // ITEM_POE,
+ PLAYER_IA_BOTTLE_BIG_POE, // ITEM_BIG_POE,
+ PLAYER_IA_BOTTLE_SPRING_WATER, // ITEM_SPRING_WATER,
+ PLAYER_IA_BOTTLE_HOT_SPRING_WATER, // ITEM_HOT_SPRING_WATER,
+ PLAYER_IA_BOTTLE_ZORA_EGG, // ITEM_ZORA_EGG,
+ PLAYER_IA_BOTTLE_GOLD_DUST, // ITEM_GOLD_DUST,
+ PLAYER_IA_BOTTLE_MUSHROOM, // ITEM_MUSHROOM,
+ PLAYER_IA_BOTTLE_SEAHORSE, // ITEM_SEA_HORSE,
+ PLAYER_IA_BOTTLE_CHATEAU, // ITEM_CHATEAU,
+ PLAYER_IA_BOTTLE_HYLIAN_LOACH, // ITEM_HYLIAN_LOACH,
+ PLAYER_IA_BOTTLE_POE, // ITEM_OBABA_DRINK, // !
+ PLAYER_IA_MOON_TEAR, // ITEM_MOON_TEAR,
+ PLAYER_IA_DEED_LAND, // ITEM_DEED_LAND,
+ PLAYER_IA_DEED_SWAMP, // ITEM_DEED_SWAMP,
+ PLAYER_IA_DEED_MOUNTAIN, // ITEM_DEED_MOUNTAIN,
+ PLAYER_IA_DEED_OCEAN, // ITEM_DEED_OCEAN,
+ PLAYER_IA_ROOM_KEY, // ITEM_ROOM_KEY,
+ PLAYER_IA_LETTER_MAMA, // ITEM_LETTER_MAMA,
+ PLAYER_IA_LETTER_TO_KAFEI, // ITEM_LETTER_TO_KAFEI,
+ PLAYER_IA_PENDANT_OF_MEMORIES, // ITEM_PENDANT_MEMORIES,
+ PLAYER_IA_38, // ITEM_TINGLE_MAP, // !
+ PLAYER_IA_MASK_DEKU, // ITEM_MASK_DEKU,
+ PLAYER_IA_MASK_GORON, // ITEM_MASK_GORON,
+ PLAYER_IA_MASK_ZORA, // ITEM_MASK_ZORA,
+ PLAYER_IA_MASK_FIERCE_DEITY, // ITEM_MASK_FIERCE_DEITY,
+ PLAYER_IA_MASK_TRUTH, // ITEM_MASK_TRUTH,
+ PLAYER_IA_MASK_KAFEIS_MASK, // ITEM_MASK_KAFEIS_MASK,
+ PLAYER_IA_MASK_ALL_NIGHT, // ITEM_MASK_ALL_NIGHT,
+ PLAYER_IA_MASK_BUNNY, // ITEM_MASK_BUNNY,
+ PLAYER_IA_MASK_KEATON, // ITEM_MASK_KEATON,
+ PLAYER_IA_MASK_GARO, // ITEM_MASK_GARO,
+ PLAYER_IA_MASK_ROMANI, // ITEM_MASK_ROMANI,
+ PLAYER_IA_MASK_CIRCUS_LEADER, // ITEM_MASK_CIRCUS_LEADER,
+ PLAYER_IA_MASK_POSTMAN, // ITEM_MASK_POSTMAN,
+ PLAYER_IA_MASK_COUPLE, // ITEM_MASK_COUPLE,
+ PLAYER_IA_MASK_GREAT_FAIRY, // ITEM_MASK_GREAT_FAIRY,
+ PLAYER_IA_MASK_GIBDO, // ITEM_MASK_GIBDO,
+ PLAYER_IA_MASK_DON_GERO, // ITEM_MASK_DON_GERO,
+ PLAYER_IA_MASK_KAMARO, // ITEM_MASK_KAMARO,
+ PLAYER_IA_MASK_CAPTAIN, // ITEM_MASK_CAPTAIN,
+ PLAYER_IA_MASK_STONE, // ITEM_MASK_STONE,
+ PLAYER_IA_MASK_BREMEN, // ITEM_MASK_BREMEN,
+ PLAYER_IA_MASK_BLAST, // ITEM_MASK_BLAST,
+ PLAYER_IA_MASK_SCENTS, // ITEM_MASK_SCENTS,
+ PLAYER_IA_MASK_GIANT, // ITEM_MASK_GIANT,
+ PLAYER_IA_BOW_FIRE, // ITEM_BOW_ARROW_FIRE,
+ PLAYER_IA_BOW_ICE, // ITEM_BOW_ARROW_ICE,
+ PLAYER_IA_BOW_LIGHT, // ITEM_BOW_ARROW_LIGHT,
+ PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI,
+ PLAYER_IA_SWORD_RAZOR, // ITEM_SWORD_RAZOR,
+ PLAYER_IA_SWORD_GILDED, // ITEM_SWORD_GILDED,
+ PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_DEITY,
+};
+
+PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) {
+ if (item >= ITEM_FD) {
+ return PLAYER_IA_NONE;
+ } else if (item == ITEM_FC) {
+ return PLAYER_IA_LAST_USED;
+ } else if (item == ITEM_FISHING_ROD) {
+ return PLAYER_IA_FISHING_ROD;
+ } else if ((item == ITEM_SWORD_KOKIRI) && (this->transformation == PLAYER_FORM_ZORA)) {
+ return PLAYER_IA_ZORA_FINS;
+ } else {
+ return sItemItemActions[item];
+ }
+}
+
+void func_8082F594(PlayState* play, Player* this) {
+}
+
+void func_8082F5A4(PlayState* play, Player* this) {
+ this->unk_B28 = 0;
+ this->unk_B0C = 1.0f;
+}
+
+void func_8082F5C0(PlayState* play, Player* this) {
+ this->stateFlags1 |= PLAYER_STATE1_8;
+
+ if (this->heldItemAction == PLAYER_IA_NUT) {
+ this->unk_B28 = -2;
+ } else {
+ this->unk_B28 = -1;
+ }
+ this->unk_ACC = 0;
+}
+
+PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = {
+ func_80848780, // PLAYER_IA_NONE
+ func_80848780, // PLAYER_IA_LAST_USED
+ func_80848780, // PLAYER_IA_FISHING_ROD
+ func_808487B8, // PLAYER_IA_SWORD_KOKIRI
+ func_808487B8, // PLAYER_IA_SWORD_RAZOR
+ func_808487B8, // PLAYER_IA_SWORD_GILDED
+ func_808487B8, // PLAYER_IA_SWORD_TWO_HANDED
+ func_80848780, // PLAYER_IA_STICK
+ func_80848780, // PLAYER_IA_ZORA_FINS
+ func_80848B6C, // PLAYER_IA_BOW
+ func_80848B6C, // PLAYER_IA_BOW_FIRE
+ func_80848B6C, // PLAYER_IA_BOW_ICE
+ func_80848B6C, // PLAYER_IA_BOW_LIGHT
+ func_80848B6C, // PLAYER_IA_HOOKSHOT
+ func_808490B4, // PLAYER_IA_BOMB
+ func_808490B4, // PLAYER_IA_POWDER_KEG
+ func_808490B4, // PLAYER_IA_BOMBCHU
+ func_808491B4, // PLAYER_IA_11
+ func_80848B6C, // PLAYER_IA_NUT
+ func_80848780, // PLAYER_IA_PICTO_BOX
+ func_80848780, // PLAYER_IA_OCARINA
+ func_80848780, // PLAYER_IA_BOTTLE_EMPTY
+ func_80848780, // PLAYER_IA_BOTTLE_FISH
+ func_80848780, // PLAYER_IA_BOTTLE_SPRING_WATER
+ func_80848780, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER
+ func_80848780, // PLAYER_IA_BOTTLE_ZORA_EGG
+ func_80848780, // PLAYER_IA_BOTTLE_DEKU_PRINCESS
+ func_80848780, // PLAYER_IA_BOTTLE_GOLD_DUST
+ func_80848780, // PLAYER_IA_BOTTLE_1C
+ func_80848780, // PLAYER_IA_BOTTLE_SEA_HORSE
+ func_80848780, // PLAYER_IA_BOTTLE_MUSHROOM
+ func_80848780, // PLAYER_IA_BOTTLE_HYLIAN_LOACH
+ func_80848780, // PLAYER_IA_BOTTLE_BUG
+ func_80848780, // PLAYER_IA_BOTTLE_POE
+ func_80848780, // PLAYER_IA_BOTTLE_BIG_POE
+ func_80848780, // PLAYER_IA_BOTTLE_POTION_RED
+ func_80848780, // PLAYER_IA_BOTTLE_POTION_BLUE
+ func_80848780, // PLAYER_IA_BOTTLE_POTION_GREEN
+ func_80848780, // PLAYER_IA_BOTTLE_MILK
+ func_80848780, // PLAYER_IA_BOTTLE_MILK_HALF
+ func_80848780, // PLAYER_IA_BOTTLE_CHATEAU
+ func_80848780, // PLAYER_IA_BOTTLE_FAIRY
+ func_80848780, // PLAYER_IA_MOON_TEAR
+ func_80848780, // PLAYER_IA_DEED_LAND
+ func_80848780, // PLAYER_IA_ROOM_KEY
+ func_80848780, // PLAYER_IA_LETTER_TO_KAFEI
+ func_80848780, // PLAYER_IA_MAGIC_BEANS
+ func_80848780, // PLAYER_IA_DEED_SWAMP
+ func_80848780, // PLAYER_IA_DEED_MOUNTAIN
+ func_80848780, // PLAYER_IA_DEED_OCEAN
+ func_80848780, // PLAYER_IA_32
+ func_80848780, // PLAYER_IA_LETTER_MAMA
+ func_80848780, // PLAYER_IA_34
+ func_80848780, // PLAYER_IA_35
+ func_80848780, // PLAYER_IA_PENDANT_MEMORIES
+ func_80848780, // PLAYER_IA_37
+ func_80848780, // PLAYER_IA_38
+ func_80848780, // PLAYER_IA_39
+ func_80848780, // PLAYER_IA_MASK_TRUTH
+ func_80848780, // PLAYER_IA_MASK_KAFEIS_MASK
+ func_80848780, // PLAYER_IA_MASK_ALL_NIGHT
+ func_80848780, // PLAYER_IA_MASK_BUNNY
+ func_80848780, // PLAYER_IA_MASK_KEATON
+ func_80848780, // PLAYER_IA_MASK_GARO
+ func_80848780, // PLAYER_IA_MASK_ROMANI
+ func_80848780, // PLAYER_IA_MASK_CIRCUS_LEADER
+ func_80848780, // PLAYER_IA_MASK_POSTMAN
+ func_80848780, // PLAYER_IA_MASK_COUPLE
+ func_80848780, // PLAYER_IA_MASK_GREAT_FAIRY
+ func_80848780, // PLAYER_IA_MASK_GIBDO
+ func_80848780, // PLAYER_IA_MASK_DON_GERO
+ func_80848780, // PLAYER_IA_MASK_KAMARO
+ func_80848780, // PLAYER_IA_MASK_CAPTAIN
+ func_80848780, // PLAYER_IA_MASK_STONE
+ func_80848780, // PLAYER_IA_MASK_BREMEN
+ func_80848780, // PLAYER_IA_MASK_BLAST
+ func_80848780, // PLAYER_IA_MASK_SCENTS
+ func_80848780, // PLAYER_IA_MASK_GIANT
+ func_80848780, // PLAYER_IA_MASK_FIERCE_DEITY
+ func_80848780, // PLAYER_IA_MASK_GORON
+ func_80848780, // PLAYER_IA_MASK_ZORA
+ func_80848780, // PLAYER_IA_MASK_DEKU
+ func_80848780, // PLAYER_IA_LENS
+};
+
+// sPlayerItemActionInits?
+void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = {
+ func_8082F594, // PLAYER_IA_NONE
+ func_8082F594, // PLAYER_IA_LAST_USED
+ func_8082F594, // PLAYER_IA_FISHING_ROD
+ func_8082F594, // PLAYER_IA_SWORD_KOKIRI
+ func_8082F594, // PLAYER_IA_SWORD_RAZOR
+ func_8082F594, // PLAYER_IA_SWORD_GILDED
+ func_8082F594, // PLAYER_IA_SWORD_TWO_HANDED
+ func_8082F5A4, // PLAYER_IA_STICK
+ func_8082F8A0, // PLAYER_IA_ZORA_FINS
+ func_8082F5C0, // PLAYER_IA_BOW
+ func_8082F5C0, // PLAYER_IA_BOW_FIRE
+ func_8082F5C0, // PLAYER_IA_BOW_ICE
+ func_8082F5C0, // PLAYER_IA_BOW_LIGHT
+ func_8082F7F4, // PLAYER_IA_HOOKSHOT
+ Player_SpawnExplosive, // PLAYER_IA_BOMB
+ Player_SpawnExplosive, // PLAYER_IA_POWDER_KEG
+ Player_SpawnExplosive, // PLAYER_IA_BOMBCHU
+ func_8082F8A0, // PLAYER_IA_11
+ func_8082F5C0, // PLAYER_IA_NUT
+ func_8082F594, // PLAYER_IA_PICTO_BOX
+ func_8082F594, // PLAYER_IA_OCARINA
+ func_8082F594, // PLAYER_IA_BOTTLE_EMPTY
+ func_8082F594, // PLAYER_IA_BOTTLE_FISH
+ func_8082F594, // PLAYER_IA_BOTTLE_SPRING_WATER
+ func_8082F594, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER
+ func_8082F594, // PLAYER_IA_BOTTLE_ZORA_EGG
+ func_8082F594, // PLAYER_IA_BOTTLE_DEKU_PRINCESS
+ func_8082F594, // PLAYER_IA_BOTTLE_GOLD_DUST
+ func_8082F594, // PLAYER_IA_BOTTLE_1C
+ func_8082F594, // PLAYER_IA_BOTTLE_SEA_HORSE
+ func_8082F594, // PLAYER_IA_BOTTLE_MUSHROOM
+ func_8082F594, // PLAYER_IA_BOTTLE_HYLIAN_LOACH
+ func_8082F594, // PLAYER_IA_BOTTLE_BUG
+ func_8082F594, // PLAYER_IA_BOTTLE_POE
+ func_8082F594, // PLAYER_IA_BOTTLE_BIG_POE
+ func_8082F594, // PLAYER_IA_BOTTLE_POTION_RED
+ func_8082F594, // PLAYER_IA_BOTTLE_POTION_BLUE
+ func_8082F594, // PLAYER_IA_BOTTLE_POTION_GREEN
+ func_8082F594, // PLAYER_IA_BOTTLE_MILK
+ func_8082F594, // PLAYER_IA_BOTTLE_MILK_HALF
+ func_8082F594, // PLAYER_IA_BOTTLE_CHATEAU
+ func_8082F594, // PLAYER_IA_BOTTLE_FAIRY
+ func_8082F594, // PLAYER_IA_MOON_TEAR
+ func_8082F594, // PLAYER_IA_DEED_LAND
+ func_8082F594, // PLAYER_IA_ROOM_KEY
+ func_8082F594, // PLAYER_IA_LETTER_TO_KAFEI
+ func_8082F594, // PLAYER_IA_MAGIC_BEANS
+ func_8082F594, // PLAYER_IA_DEED_SWAMP
+ func_8082F594, // PLAYER_IA_DEED_MOUNTAIN
+ func_8082F594, // PLAYER_IA_DEED_OCEAN
+ func_8082F594, // PLAYER_IA_32
+ func_8082F594, // PLAYER_IA_LETTER_MAMA
+ func_8082F594, // PLAYER_IA_34
+ func_8082F594, // PLAYER_IA_35
+ func_8082F594, // PLAYER_IA_PENDANT_MEMORIES
+ func_8082F594, // PLAYER_IA_37
+ func_8082F594, // PLAYER_IA_38
+ func_8082F594, // PLAYER_IA_39
+ func_8082F594, // PLAYER_IA_MASK_TRUTH
+ func_8082F594, // PLAYER_IA_MASK_KAFEIS_MASK
+ func_8082F594, // PLAYER_IA_MASK_ALL_NIGHT
+ func_8082F594, // PLAYER_IA_MASK_BUNNY
+ func_8082F594, // PLAYER_IA_MASK_KEATON
+ func_8082F594, // PLAYER_IA_MASK_GARO
+ func_8082F594, // PLAYER_IA_MASK_ROMANI
+ func_8082F594, // PLAYER_IA_MASK_CIRCUS_LEADER
+ func_8082F594, // PLAYER_IA_MASK_POSTMAN
+ func_8082F594, // PLAYER_IA_MASK_COUPLE
+ func_8082F594, // PLAYER_IA_MASK_GREAT_FAIRY
+ func_8082F594, // PLAYER_IA_MASK_GIBDO
+ func_8082F594, // PLAYER_IA_MASK_DON_GERO
+ func_8082F594, // PLAYER_IA_MASK_KAMARO
+ func_8082F594, // PLAYER_IA_MASK_CAPTAIN
+ func_8082F594, // PLAYER_IA_MASK_STONE
+ func_8082F594, // PLAYER_IA_MASK_BREMEN
+ func_8082F594, // PLAYER_IA_MASK_BLAST
+ func_8082F594, // PLAYER_IA_MASK_SCENTS
+ func_8082F594, // PLAYER_IA_MASK_GIANT
+ func_8082F594, // PLAYER_IA_MASK_FIERCE_DEITY
+ func_8082F594, // PLAYER_IA_MASK_GORON
+ func_8082F594, // PLAYER_IA_MASK_ZORA
+ func_8082F594, // PLAYER_IA_MASK_DEKU
+ func_8082F594, // PLAYER_IA_LENS
+};
+
+void func_8082F5FC(Player* this, Actor* actor) {
+ this->heldActor = actor;
+ this->interactRangeActor = actor;
+ this->getItemId = GI_NONE;
+ this->leftHandWorld.rot.y = actor->shape.rot.y - this->actor.shape.rot.y;
+ this->stateFlags1 |= PLAYER_STATE1_800;
+}
+
+struct_8085CC88 D_8085CC88[] = {
+ { &gPlayerAnim_link_normal_free2free, 12 },
+ { &gPlayerAnim_link_normal_normal2fighter, 6 },
+ { &gPlayerAnim_link_hammer_normal2long, 8 },
+ { &gPlayerAnim_link_normal_normal2free, 8 },
+ { &gPlayerAnim_link_fighter_fighter2long, 8 },
+ { &gPlayerAnim_link_normal_fighter2free, 10 },
+ { &gPlayerAnim_link_hammer_long2free, 7 },
+ { &gPlayerAnim_link_hammer_long2long, 11 },
+ { &gPlayerAnim_link_normal_free2free, 12 },
+ { &gPlayerAnim_link_normal_normal2bom, 4 },
+ { &gPlayerAnim_link_normal_long2bom, 4 },
+ { &gPlayerAnim_link_normal_free2bom, 4 },
+ { &gPlayerAnim_link_anchor_anchor2fighter, 5 },
+ { &gPlayerAnim_link_normal_free2freeB, 13 },
+ { &gPlayerAnim_pz_bladeon, 4 },
+};
+
+s8 D_8085CD00[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = {
+ { 8, -5, -3, -6, 8, 0xB }, { 5, 0, -1, 4, 5, 9 }, { 3, 1, 0, 2, 3, 9 },
+ { 6, -4, -2, 7, 6, 0xA }, { 8, -5, -3, -6, 8, 0xB }, { 8, -5, -3, -6, 8, 0xB },
+};
+
+ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = {
+ { ITEM_BOMB, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_BOMB
+ { ITEM_POWDER_KEG, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_POWDER_KEG
+ { ITEM_BOMBCHU, ACTOR_EN_BOM_CHU }, // PLAYER_EXPLOSIVE_BOMBCHU
+};
+
+void Player_SpawnExplosive(PlayState* play, Player* this) {
+ PlayerExplosive explosiveType;
+ ExplosiveInfo* explosiveInfo;
+ Actor* explosiveActor;
+
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ func_8082DE14(play, this);
+ return;
+ }
+
+ explosiveType = Player_GetExplosiveHeld(this);
+ explosiveInfo = &sPlayerExplosiveInfo[explosiveType];
+ if ((explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) && (gSaveContext.powderKegTimer == 0)) {
+ gSaveContext.powderKegTimer = 200;
+ }
+
+ explosiveActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, explosiveInfo->actorId,
+ this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z,
+ (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) ? BOMB_EXPLOSIVE_TYPE_POWDER_KEG
+ : BOMB_EXPLOSIVE_TYPE_BOMB,
+ this->actor.shape.rot.y, 0, BOMB_TYPE_BODY);
+ if (explosiveActor != NULL) {
+ if ((explosiveType == PLAYER_EXPLOSIVE_BOMB) && (play->unk_1887E != 0)) {
+ play->unk_1887E--;
+ if (play->unk_1887E == 0) {
+ play->unk_1887E = -1;
+ }
+ } else if ((explosiveType == PLAYER_EXPLOSIVE_BOMBCHU) && (play->unk_1887D != 0)) {
+ play->unk_1887D--;
+ if (play->unk_1887D == 0) {
+ play->unk_1887D = -1;
+ }
+ } else {
+ Inventory_ChangeAmmo(explosiveInfo->itemId, -1);
+ }
+ func_8082F5FC(this, explosiveActor);
+ } else if (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) {
+ gSaveContext.powderKegTimer = 0;
+ }
+}
+
+// SpawnHookshot?
+void func_8082F7F4(PlayState* play, Player* this) {
+ ArmsHook* armsHook;
+
+ this->stateFlags1 |= PLAYER_STATE1_8;
+ this->unk_B28 = -3;
+ this->unk_B48 = 0.0f;
+
+ this->heldActor =
+ Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_ARMS_HOOK, this->actor.world.pos.x,
+ this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0);
+
+ if (this->heldActor == NULL) {
+ func_80831990(play, this, ITEM_NONE);
+ return;
+ }
+ armsHook = (ArmsHook*)this->heldActor;
+ armsHook->actor.objBankIndex = this->actor.objBankIndex;
+ armsHook->unk_208 = this->transformation;
+}
+
+void func_8082F8A0(PlayState* play, Player* this) {
+ this->stateFlags1 |= PLAYER_STATE1_1000000;
+}
+
+void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) {
+ this->itemAction = this->heldItemAction = itemAction;
+ this->modelGroup = this->nextModelGroup;
+
+ this->stateFlags1 &= ~(PLAYER_STATE1_1000000 | PLAYER_STATE1_8);
+
+ this->unk_B08 = 0.0f;
+ this->unk_B0C = 0.0f;
+ this->unk_B28 = 0;
+
+ D_8085CB3C[itemAction](play, this);
+ Player_SetModelGroup(this, this->modelGroup);
+}
+
+// AttackAnimInfo sMeleeAttackAnimInfo
+AttackAnimInfo sMeleeAttackAnimInfo[PLAYER_MWA_MAX] = {
+ // PLAYER_MWA_FORWARD_SLASH_1H
+ { &gPlayerAnim_link_fighter_normal_kiru, &gPlayerAnim_link_fighter_normal_kiru_end,
+ &gPlayerAnim_link_fighter_normal_kiru_endR, 1, 4 },
+ // PLAYER_MWA_FORWARD_SLASH_2H
+ { &gPlayerAnim_link_fighter_Lnormal_kiru, &gPlayerAnim_link_fighter_Lnormal_kiru_end,
+ &gPlayerAnim_link_anchor_Lnormal_kiru_endR, 1, 4 },
+ // PLAYER_MWA_FORWARD_COMBO_1H
+ { &gPlayerAnim_link_fighter_normal_kiru_finsh, &gPlayerAnim_link_fighter_normal_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_normal_kiru_finsh_endR, 0, 5 },
+ // PLAYER_MWA_FORWARD_COMBO_2H
+ { &gPlayerAnim_link_fighter_Lnormal_kiru_finsh, &gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR, 1, 7 },
+ // PLAYER_MWA_RIGHT_SLASH_1H
+ { &gPlayerAnim_link_fighter_Lside_kiru, &gPlayerAnim_link_fighter_Lside_kiru_end,
+ &gPlayerAnim_link_anchor_Lside_kiru_endR, 1, 4 },
+ // PLAYER_MWA_RIGHT_SLASH_2H
+ { &gPlayerAnim_link_fighter_LLside_kiru, &gPlayerAnim_link_fighter_LLside_kiru_end,
+ &gPlayerAnim_link_anchor_LLside_kiru_endL, 0, 5 },
+ // PLAYER_MWA_RIGHT_COMBO_1H
+ { &gPlayerAnim_link_fighter_Lside_kiru_finsh, &gPlayerAnim_link_fighter_Lside_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_Lside_kiru_finsh_endR, 2, 8 },
+ // PLAYER_MWA_RIGHT_COMBO_2H
+ { &gPlayerAnim_link_fighter_LLside_kiru_finsh, &gPlayerAnim_link_fighter_LLside_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_LLside_kiru_finsh_endR, 3, 8 },
+ // PLAYER_MWA_LEFT_SLASH_1H
+ { &gPlayerAnim_link_fighter_Rside_kiru, &gPlayerAnim_link_fighter_Rside_kiru_end,
+ &gPlayerAnim_link_anchor_Rside_kiru_endR, 0, 4 },
+ // PLAYER_MWA_LEFT_SLASH_2H
+ { &gPlayerAnim_link_fighter_LRside_kiru, &gPlayerAnim_link_fighter_LRside_kiru_end,
+ &gPlayerAnim_link_anchor_LRside_kiru_endR, 0, 5 },
+ // PLAYER_MWA_LEFT_COMBO_1H
+ { &gPlayerAnim_link_fighter_Rside_kiru_finsh, &gPlayerAnim_link_fighter_Rside_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_Rside_kiru_finsh_endR, 0, 6 },
+ // PLAYER_MWA_LEFT_COMBO_2H
+ { &gPlayerAnim_link_fighter_LRside_kiru_finsh, &gPlayerAnim_link_fighter_LRside_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_LRside_kiru_finsh_endL, 1, 5 },
+ // PLAYER_MWA_STAB_1H
+ { &gPlayerAnim_link_fighter_pierce_kiru, &gPlayerAnim_link_fighter_pierce_kiru_end,
+ &gPlayerAnim_link_anchor_pierce_kiru_endR, 0, 3 },
+ // PLAYER_MWA_STAB_2H
+ { &gPlayerAnim_link_fighter_Lpierce_kiru, &gPlayerAnim_link_fighter_Lpierce_kiru_end,
+ &gPlayerAnim_link_anchor_Lpierce_kiru_endL, 0, 3 },
+ // PLAYER_MWA_STAB_COMBO_1H
+ { &gPlayerAnim_link_fighter_pierce_kiru_finsh, &gPlayerAnim_link_fighter_pierce_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_pierce_kiru_finsh_endR, 1, 9 },
+ // PLAYER_MWA_STAB_COMBO_2H
+ { &gPlayerAnim_link_fighter_Lpierce_kiru_finsh, &gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end,
+ &gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR, 1, 8 },
+ // PLAYER_MWA_FLIPSLASH_START
+ { &gPlayerAnim_link_fighter_jump_rollkiru, &gPlayerAnim_link_fighter_jump_kiru_finsh,
+ &gPlayerAnim_link_fighter_jump_kiru_finsh, 7, 99 },
+ // PLAYER_MWA_JUMPSLASH_START
+ { &gPlayerAnim_link_fighter_Lpower_jump_kiru, &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit,
+ &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, 7, 99 },
+ // PLAYER_MWA_ZORA_JUMPKICK_START
+ { &gPlayerAnim_pz_jumpAT, &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_jumpATend, 8, 99 },
+ // PLAYER_MWA_FLIPSLASH_FINISH
+ { &gPlayerAnim_link_fighter_jump_kiru_finsh, &gPlayerAnim_link_fighter_jump_kiru_finsh_end,
+ &gPlayerAnim_link_fighter_jump_kiru_finsh_end, 1, 2 },
+ // PLAYER_MWA_JUMPSLASH_FINISH
+ { &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, &gPlayerAnim_link_fighter_Lpower_jump_kiru_end,
+ &gPlayerAnim_link_fighter_Lpower_jump_kiru_end, 1, 2 },
+ // PLAYER_MWA_ZORA_JUMPKICK_FINISH
+ { &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_wait, &gPlayerAnim_link_normal_waitR_free, 1, 2 },
+ // PLAYER_MWA_BACKSLASH_RIGHT
+ { &gPlayerAnim_link_fighter_turn_kiruR, &gPlayerAnim_link_fighter_turn_kiruR_end,
+ &gPlayerAnim_link_fighter_turn_kiruR_end, 1, 5 },
+ // PLAYER_MWA_BACKSLASH_LEFT
+ { &gPlayerAnim_link_fighter_turn_kiruL, &gPlayerAnim_link_fighter_turn_kiruL_end,
+ &gPlayerAnim_link_fighter_turn_kiruL_end, 1, 4 },
+ // PLAYER_MWA_GORON_PUNCH_LEFT
+ { &gPlayerAnim_pg_punchA, &gPlayerAnim_pg_punchAend, &gPlayerAnim_pg_punchAendR, 6, 8 },
+ // PLAYER_MWA_GORON_PUNCH_RIGHT
+ { &gPlayerAnim_pg_punchB, &gPlayerAnim_pg_punchBend, &gPlayerAnim_pg_punchBendR, 12, 18 },
+ // PLAYER_MWA_GORON_PUNCH_BUTT
+ { &gPlayerAnim_pg_punchC, &gPlayerAnim_pg_punchCend, &gPlayerAnim_pg_punchCendR, 8, 14 },
+ // PLAYER_MWA_ZORA_PUNCH_LEFT
+ { &gPlayerAnim_pz_attackA, &gPlayerAnim_pz_attackAend, &gPlayerAnim_pz_attackAendR, 2, 5 },
+ // PLAYER_MWA_ZORA_PUNCH_COMBO
+ { &gPlayerAnim_pz_attackB, &gPlayerAnim_pz_attackBend, &gPlayerAnim_pz_attackBendR, 3, 8 },
+ // PLAYER_MWA_ZORA_PUNCH_KICK
+ { &gPlayerAnim_pz_attackC, &gPlayerAnim_pz_attackCend, &gPlayerAnim_pz_attackCendR, 3, 10 },
+ // PLAYER_MWA_SPIN_ATTACK_1H
+ { &gPlayerAnim_link_fighter_rolling_kiru, &gPlayerAnim_link_fighter_rolling_kiru_end,
+ &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 12 },
+ // PLAYER_MWA_SPIN_ATTACK_2H
+ { &gPlayerAnim_link_fighter_Lrolling_kiru, &gPlayerAnim_link_fighter_Lrolling_kiru_end,
+ &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 15 },
+ // PLAYER_MWA_BIG_SPIN_1H
+ { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end,
+ &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 16 },
+ // PLAYER_MWA_BIG_SPIN_2H
+ { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end,
+ &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 16 },
+};
+
+PlayerAnimationHeader* D_8085CF50[] = {
+ &gPlayerAnim_link_fighter_power_kiru_start,
+ &gPlayerAnim_link_fighter_Lpower_kiru_start,
+};
+PlayerAnimationHeader* D_8085CF58[] = {
+ &gPlayerAnim_link_fighter_power_kiru_startL,
+ &gPlayerAnim_link_fighter_Lpower_kiru_start,
+};
+PlayerAnimationHeader* D_8085CF60[] = {
+ &gPlayerAnim_link_fighter_power_kiru_wait,
+ &gPlayerAnim_link_fighter_Lpower_kiru_wait,
+};
+PlayerAnimationHeader* D_8085CF68[] = {
+ &gPlayerAnim_link_fighter_power_kiru_wait_end,
+ &gPlayerAnim_link_fighter_Lpower_kiru_wait_end,
+};
+PlayerAnimationHeader* D_8085CF70[] = {
+ &gPlayerAnim_link_fighter_power_kiru_walk,
+ &gPlayerAnim_link_fighter_Lpower_kiru_walk,
+};
+PlayerAnimationHeader* D_8085CF78[] = {
+ &gPlayerAnim_link_fighter_power_kiru_side_walk,
+ &gPlayerAnim_link_fighter_Lpower_kiru_side_walk,
+};
+
+u8 D_8085CF80[] = {
+ PLAYER_MWA_SPIN_ATTACK_1H,
+ PLAYER_MWA_SPIN_ATTACK_2H,
+};
+u8 D_8085CF84[] = {
+ PLAYER_MWA_BIG_SPIN_1H,
+ PLAYER_MWA_BIG_SPIN_2H,
+};
+
+// sBlureColors
+BlureColors D_8085CF88[] = {
+ { { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } },
+ { { 165, 185, 255, 185 }, { 205, 225, 255, 50 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } },
+};
+
+void Player_OverrideBlureColors(PlayState* play, Player* this, s32 colorType, s32 elemDuration) {
+ EffectBlure* blure0 = Effect_GetByIndex(this->meleeWeaponEffectIndex[0]);
+ EffectBlure* blure1 = Effect_GetByIndex(this->meleeWeaponEffectIndex[1]);
+ s32 i;
+
+ for (i = 0; i < 4; i++) {
+ blure0->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i];
+ blure0->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i];
+ blure0->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i];
+ blure0->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i];
+ blure1->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i];
+ blure1->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i];
+ blure1->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i];
+ blure1->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i];
+ }
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ elemDuration = 8;
+ }
+ blure0->elemDuration = elemDuration;
+ blure1->elemDuration = elemDuration;
+}
+
+void func_8082FA5C(PlayState* play, Player* this, PlayerMeleeWeaponState meleeWeaponState) {
+ u16 voiceSfxId;
+ u16 itemSfxId;
+
+ if (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) {
+ voiceSfxId = NA_SE_VO_LI_SWORD_N;
+ if (this->transformation == PLAYER_FORM_GORON) {
+ itemSfxId = NA_SE_IT_GORON_PUNCH_SWING;
+ } else {
+ itemSfxId = NA_SE_NONE;
+ if (this->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) {
+ voiceSfxId = NA_SE_VO_LI_SWORD_L;
+ } else if (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) {
+ itemSfxId = NA_SE_IT_GORON_PUNCH_SWING;
+ } else {
+ itemSfxId = NA_SE_IT_SWORD_SWING_HARD;
+ if (this->unk_ADD >= 3) {
+ voiceSfxId = NA_SE_VO_LI_SWORD_L;
+ } else {
+ itemSfxId = (this->heldItemAction == PLAYER_IA_SWORD_TWO_HANDED) ? NA_SE_IT_HAMMER_SWING
+ : NA_SE_IT_SWORD_SWING;
+ }
+ }
+ }
+
+ if (itemSfxId != NA_SE_NONE) {
+ func_8082E1F0(this, itemSfxId);
+ }
+
+ if (!((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_START) &&
+ (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH))) {
+ Player_AnimSfx_PlayVoice(this, voiceSfxId);
+ }
+
+ Player_OverrideBlureColors(play, this, 0, 4);
+ }
+
+ this->meleeWeaponState = meleeWeaponState;
+}
+
+s32 func_8082FB68(Player* this) {
+ if ((this->targetedActor != NULL) && CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) {
+ this->stateFlags3 |= PLAYER_STATE3_80000000;
+ return true;
+ }
+
+ if (this->stateFlags3 & PLAYER_STATE3_80000000) {
+ this->stateFlags3 &= ~PLAYER_STATE3_80000000;
+ if (this->linearVelocity == 0.0f) {
+ this->currentYaw = this->actor.shape.rot.y;
+ }
+ }
+
+ return false;
+}
+
+s32 func_8082FBE8(Player* this) {
+ return func_80123420(this) || func_80123434(this);
+}
+
+s32 func_8082FC24(Player* this) {
+ return func_8082FB68(this) || func_80123434(this);
+}
+
+void func_8082FC60(Player* this) {
+ this->unk_B44 = 0.0f;
+ this->unk_B40 = 0.0f;
+}
+
+s32 func_8082FC78(Player* this, ItemId item) {
+ if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) {
+ if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) {
+ s32 btn;
+
+ for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) {
+ if (func_8082FCC4(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) {
+ return btn;
+ }
+ }
+
+ return EQUIP_SLOT_NONE;
+}
+
+u16 D_8085CFA8[] = {
+ BTN_B,
+ BTN_CLEFT,
+ BTN_CDOWN,
+ BTN_CRIGHT,
+};
+
+// Return currently-pressed button, in order of priority B, CLEFT, CDOWN, CRIGHT.
+EquipSlot func_8082FDC4(void) {
+ EquipSlot i;
+
+ for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, D_8085CFA8[i])) {
+ break;
+ }
+ }
+
+ return i;
+}
+
+void func_8082FE0C(Player* this, PlayState* play) {
+ if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) {
+ return;
+ }
+ if (this->stateFlags2 & PLAYER_STATE2_2000000) {
+ return;
+ }
+ if (this->stateFlags3 & PLAYER_STATE3_20000000) {
+ return;
+ }
+ if (func_801240DC(this)) {
+ return;
+ }
+
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ if (this->currentMask != PLAYER_MASK_NONE) {
+ PlayerItemAction maskItemAction = GET_IA_FROM_MASK(this->currentMask);
+ EquipSlot btn = func_8082FD0C(this, maskItemAction);
+
+ if (btn <= EQUIP_SLOT_NONE) {
+ s32 maskIdMinusOne =
+ GET_MASK_FROM_IA(Player_ItemToItemAction(this, GET_CUR_FORM_BTN_ITEM(this->unk_154))) - 1;
+
+ if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) {
+ maskIdMinusOne = this->currentMask - 1;
+ }
+ func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne));
+ return;
+ }
+
+ if ((this->currentMask == PLAYER_MASK_GIANT) && (gSaveContext.save.saveInfo.playerData.magic == 0)) {
+ func_80838A20(play, this);
+ }
+
+ this->unk_154 = btn;
+ }
+ }
+
+ if (((this->actor.id == ACTOR_PLAYER) && (this->itemAction >= PLAYER_IA_FISHING_ROD)) &&
+ !(((Player_GetHeldBButtonSword(this) == PLAYER_B_SWORD_NONE) || (gSaveContext.jinxTimer == 0)) &&
+ (func_8082FC78(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) ||
+ func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) ||
+ func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) {
+ func_80831990(play, this, ITEM_NONE);
+ } else {
+ s32 pad;
+ ItemId item;
+ EquipSlot i = func_8082FDC4();
+
+ i = ((i >= EQUIP_SLOT_A) && (this->transformation == PLAYER_FORM_FIERCE_DEITY) &&
+ (this->heldItemAction != PLAYER_IA_SWORD_TWO_HANDED))
+ ? EQUIP_SLOT_B
+ : i;
+
+ item = func_8012364C(play, this, i);
+ if (item >= ITEM_FD) {
+ for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, D_8085CFA8[i])) {
+ break;
+ }
+ }
+
+ item = func_8012364C(play, this, i);
+ if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) {
+ D_80862B4C = 1;
+ }
+ } else if (item == ITEM_F0) {
+ if (this->blastMaskTimer == 0) {
+ EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.focus.pos.x,
+ this->actor.focus.pos.y, this->actor.focus.pos.z,
+ BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY);
+
+ if (bomb != NULL) {
+ bomb->timer = 0;
+ this->blastMaskTimer = 310;
+ }
+ }
+ } else if (item == ITEM_F1) {
+ func_80839978(play, this);
+ } else if (item == ITEM_F2) {
+ func_80839A10(play, this);
+ } else if ((Player_BButtonSwordFromIA(this, Player_ItemToItemAction(this, item)) != PLAYER_B_SWORD_NONE) &&
+ (gSaveContext.jinxTimer != 0)) {
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
+ Message_StartTextbox(play, 0xF7, NULL);
+ }
+ } else {
+ this->heldItemButton = i;
+ func_80831990(play, this, item);
+ }
+ }
+}
+
+void func_808302CC(Player* this, PlayState* play) {
+ PlayerAnimationHeader* anim;
+ s32 pad[3];
+ u8 nextModelAnimType;
+ s32 var_v1;
+ s8 itemAction = Player_ItemToItemAction(this, this->heldItemId);
+ s32 pad3;
+ f32 startFrame;
+ f32 endFrame;
+ f32 frameSpeed;
+
+ func_8082F43C(play, this, func_80848808);
+
+ nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType;
+ var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType];
+
+ if ((itemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) {
+ var_v1 = (itemAction == PLAYER_IA_NONE) ? -14 : 14;
+ } else if ((itemAction == PLAYER_IA_BOTTLE_EMPTY) || (itemAction == PLAYER_IA_11) ||
+ ((itemAction == PLAYER_IA_NONE) &&
+ ((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) {
+ var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13;
+ }
+
+ this->unk_14E = ABS_ALT(var_v1);
+ anim = D_8085CC88[this->unk_14E].anim;
+ if ((anim == &gPlayerAnim_link_normal_fighter2free) && (this->currentShield == PLAYER_SHIELD_NONE)) {
+ anim = &gPlayerAnim_link_normal_free2fighter_free;
+ }
+
+ endFrame = Animation_GetLastFrame(anim);
+
+ if (var_v1 >= 0) {
+ frameSpeed = 1.2f;
+ startFrame = 0.0f;
+ } else {
+ frameSpeed = -1.2f;
+ startFrame = endFrame;
+ endFrame = 0.0f;
+ }
+
+ if (itemAction != PLAYER_IA_NONE) {
+ frameSpeed *= 2.0f;
+ }
+
+ PlayerAnimation_Change(play, &this->unk_284, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f);
+ this->stateFlags3 &= ~PLAYER_STATE3_40000000;
+}
+
+void func_808304BC(Player* this, PlayState* play) {
+ if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) {
+ if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) {
+ if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) {
+ if ((this->csMode == PLAYER_CSMODE_0) && (play->unk_1887C == 0) && (play->activeCamId == CAM_ID_MAIN)) {
+ if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) {
+ func_8082FE0C(this, play);
+ }
+ }
+ }
+ }
+ }
+
+ if (this->stateFlags3 & PLAYER_STATE3_40000000) {
+ func_808302CC(this, play);
+ }
+}
+
+// EN_ARROW ammo related?
+s32 func_808305BC(PlayState* play, Player* this, ItemId* item, ArrowType* typeParam) {
+ if (this->heldItemAction == PLAYER_IA_NUT) {
+ *item = ITEM_NUT;
+ *typeParam = (this->transformation == PLAYER_FORM_DEKU) ? ARROW_TYPE_DEKU_BUBBLE : ARROW_TYPE_SLINGSHOT;
+ } else {
+ *item = ITEM_BOW;
+ *typeParam = (this->stateFlags1 & PLAYER_STATE1_800000)
+ ? ARROW_TYPE_NORMAL_HORSE
+ : (this->heldItemAction - PLAYER_IA_BOW + ARROW_TYPE_NORMAL);
+ }
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ return ((gSaveContext.save.saveInfo.playerData.magic >= 2) ||
+ (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) && (play->sceneId == SCENE_BOWLING)))
+ ? 1
+ : 0;
+ }
+ if (this->stateFlags3 & PLAYER_STATE3_400) {
+ return 1;
+ }
+ if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ return play->interfaceCtx.minigameAmmo;
+ }
+ if (play->unk_1887C != 0) {
+ return play->unk_1887C;
+ }
+
+ return AMMO(*item);
+}
+
+u16 D_8085CFB0[] = {
+ NA_SE_PL_BOW_DRAW,
+ NA_SE_NONE,
+ NA_SE_IT_HOOKSHOT_READY,
+};
+
+u8 sMagicArrowCosts[] = {
+ 4, // ARROW_MAGIC_FIRE
+ 4, // ARROW_MAGIC_ICE
+ 8, // ARROW_MAGIC_LIGHT
+ 2, // ARROW_MAGIC_DEKU_BUBBLE
+};
+
+// Draw bow or hookshot / first person items?
+s32 func_808306F8(Player* this, PlayState* play) {
+ if ((this->heldItemAction >= PLAYER_IA_BOW_FIRE) && (this->heldItemAction <= PLAYER_IA_BOW_LIGHT) &&
+ (gSaveContext.magicState != MAGIC_STATE_IDLE)) {
+ play_sound(NA_SE_SY_ERROR);
+ } else {
+ func_8082F43C(play, this, func_80848BF4);
+
+ this->stateFlags3 |= PLAYER_STATE3_40;
+ this->unk_ACC = 14;
+
+ if (this->unk_B28 >= 0) {
+ s32 var_v1 = ABS_ALT(this->unk_B28);
+ ItemId item;
+ ArrowType arrowType;
+ ArrowMagic magicArrowType;
+
+ if (var_v1 != 2) {
+ Player_PlaySfx(this, D_8085CFB0[var_v1 - 1]);
+ }
+
+ if (!Player_IsHoldingHookshot(this) && (func_808305BC(play, this, &item, &arrowType) > 0)) {
+ if (this->unk_B28 >= 0) {
+ magicArrowType = ARROW_GET_MAGIC_FROM_TYPE(arrowType);
+
+ if ((ARROW_GET_MAGIC_FROM_TYPE(arrowType) >= ARROW_MAGIC_FIRE) &&
+ (ARROW_GET_MAGIC_FROM_TYPE(arrowType) <= ARROW_MAGIC_LIGHT)) {
+ if (((void)0, gSaveContext.save.saveInfo.playerData.magic) < sMagicArrowCosts[magicArrowType]) {
+ arrowType = ARROW_TYPE_NORMAL;
+ magicArrowType = ARROW_MAGIC_INVALID;
+ }
+ } else if ((arrowType == ARROW_TYPE_DEKU_BUBBLE) &&
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) || (play->sceneId != SCENE_BOWLING))) {
+ magicArrowType = ARROW_MAGIC_DEKU_BUBBLE;
+ } else {
+ magicArrowType = ARROW_MAGIC_INVALID;
+ }
+
+ this->heldActor = Actor_SpawnAsChild(
+ &play->actorCtx, &this->actor, play, ACTOR_EN_ARROW, this->actor.world.pos.x,
+ this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, arrowType);
+
+ if ((this->heldActor != NULL) && (magicArrowType > ARROW_MAGIC_INVALID)) {
+ Magic_Consume(play, sMagicArrowCosts[magicArrowType], MAGIC_CONSUME_NOW);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+// Take out / put away sounds?
+void func_808308DC(PlayState* play, Player* this) {
+ s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU);
+
+ if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) {
+ if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) {
+ func_8082E1F0(this, NA_SE_IT_SWORD_PUTAWAY);
+ } else {
+ func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS);
+ }
+ }
+
+ func_80831990(play, this, this->heldItemId);
+
+ if (!isGoronOrDeku) {
+ if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) {
+ func_8082E1F0(this, NA_SE_IT_SWORD_PICKOUT);
+ } else if (this->heldItemAction != PLAYER_IA_NONE) {
+ func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS);
+ }
+ }
+}
+
+void func_808309CC(PlayState* play, Player* this) {
+ if (func_80848808 == this->unk_AC4) {
+ func_808308DC(play, this);
+ }
+
+ func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]);
+ this->unk_ACC = 0;
+ this->unk_AA4 = 0;
+ func_8082DCA0(play, this);
+ this->stateFlags3 &= ~PLAYER_STATE3_40000000;
+}
+
+PlayerAnimationHeader* D_8085CFBC[2] = {
+ &gPlayerAnim_link_anchor_waitR2defense,
+ &gPlayerAnim_link_anchor_waitR2defense_long,
+};
+PlayerAnimationHeader* D_8085CFC4[2] = {
+ &gPlayerAnim_link_anchor_waitL2defense,
+ &gPlayerAnim_link_anchor_waitL2defense_long,
+};
+PlayerAnimationHeader* D_8085CFCC[2] = {
+ &gPlayerAnim_link_anchor_defense_hit,
+ &gPlayerAnim_link_anchor_defense_long_hitL,
+};
+PlayerAnimationHeader* D_8085CFD4[2] = {
+ &gPlayerAnim_link_anchor_defense_hit,
+ &gPlayerAnim_link_anchor_defense_long_hitR,
+};
+PlayerAnimationHeader* D_8085CFDC[2] = {
+ &gPlayerAnim_link_normal_defense_hit,
+ &gPlayerAnim_link_fighter_defense_long_hit,
+};
+
+PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) {
+ func_8082F43C(play, this, func_8084894C);
+ func_8082DCA0(play, this);
+
+ if (this->unk_B40 < 0.5f) {
+ return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)];
+ } else {
+ return D_8085CFC4[Player_IsHoldingTwoHandedWeapon(this)];
+ }
+}
+
+void func_80830AE8(Player* this) {
+ s32 sfxId = (this->transformation == PLAYER_FORM_GORON)
+ ? NA_SE_PL_GORON_SQUAT
+ : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_CHANGE_ARMS : NA_SE_IT_SHIELD_SWING);
+
+ Player_PlaySfx(this, sfxId);
+}
+
+void func_80830B38(Player* this) {
+ s32 sfxId = (this->transformation == PLAYER_FORM_GORON)
+ ? NA_SE_PL_BALL_TO_GORON
+ : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_TAKE_OUT_SHIELD : NA_SE_IT_SHIELD_REMOVE);
+
+ Player_PlaySfx(this, sfxId);
+}
+
+s32 func_80830B88(PlayState* play, Player* this) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) {
+ if (!(this->stateFlags1 & (PLAYER_STATE1_400000 | PLAYER_STATE1_800000 | PLAYER_STATE1_20000000))) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ if ((play->unk_1887C == 0) && (this->heldItemAction == this->itemAction)) {
+ if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) ||
+ (!Player_IsGoronOrDeku(this) &&
+ ((((this->transformation == PLAYER_FORM_ZORA)) &&
+ !(this->stateFlags1 & PLAYER_STATE1_2000000)) ||
+ ((this->transformation == PLAYER_FORM_HUMAN) &&
+ (this->currentShield != PLAYER_SHIELD_NONE))) &&
+ func_8082FBE8(this))) {
+ PlayerAnimationHeader* anim = func_80830A58(play, this);
+ f32 lastFrame = Animation_GetLastFrame(anim);
+
+ PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame,
+ ANIMMODE_ONCE, 0.0f);
+ func_80830AE8(this);
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+void func_80830CE8(PlayState* play, Player* this) {
+ func_8082F43C(play, this, func_80848AB0);
+
+ if (this->itemAction <= PLAYER_IA_MINUS1) {
+ func_80123C58(this);
+ }
+
+ Animation_Reverse(&this->unk_284);
+ func_80830B38(this);
+}
+
+void func_80830D40(PlayState* play, Player* this) {
+ struct_8085CC88* entry = &D_8085CC88[this->unk_14E];
+ f32 frame = entry->frame;
+
+ if (this->unk_284.playSpeed < 0.0f) {
+ frame -= 1.0f;
+ }
+ if (PlayerAnimation_OnFrame(&this->unk_284, frame)) {
+ func_808308DC(play, this);
+ }
+ func_8082FB68(this);
+}
+
+s32 func_80830DF0(Player* this, PlayState* play) {
+ if (this->stateFlags3 & PLAYER_STATE3_40000000) {
+ func_808302CC(this, play);
+ } else {
+ return false;
+ }
+ return true;
+}
+
+s32 func_80830E30(Player* this, PlayState* play) {
+ if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) {
+ func_8082F43C(play, this, func_8084923C);
+
+ PlayerAnimation_PlayOnce(play, &this->unk_284,
+ (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)
+ ? &gPlayerAnim_pz_cutterwaitA
+ : ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO)
+ ? &gPlayerAnim_pz_cutterwaitB
+ : &gPlayerAnim_pz_cutterwaitC));
+ this->unk_ACC = 0xA;
+ } else {
+ if (!func_808306F8(this, play)) {
+ return false;
+ }
+
+ PlayerAnimation_PlayOnce(play, &this->unk_284,
+ (Player_IsHoldingHookshot(this))
+ ? &gPlayerAnim_link_hook_shot_ready
+ : ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf
+ : &gPlayerAnim_link_bow_bow_ready));
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_uma_anim_walk);
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->transformation != PLAYER_FORM_ZORA)) {
+ Player_AnimationPlayLoop(play, this, func_8082ED20(this));
+ }
+
+ return true;
+}
+
+s32 func_80830F9C(PlayState* play) {
+ return (play->unk_1887C > 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B);
+}
+
+s32 func_80830FD4(PlayState* play) {
+ return (play->unk_1887C != 0) &&
+ ((play->unk_1887C < 0) || CHECK_BTN_ANY(sPlayerControlInput->cur.button,
+ BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A));
+}
+
+s32 func_80831010(Player* this, PlayState* play) {
+ if ((this->unk_AA5 == PLAYER_UNKAA5_0) || (this->unk_AA5 == PLAYER_UNKAA5_3)) {
+ if (func_8082FBE8(this) || (this->targetedActor != NULL) ||
+ (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_BOWARROW) == 0)) {
+ return true;
+ }
+ this->unk_AA5 = PLAYER_UNKAA5_3;
+ }
+ return false;
+}
+
+s32 func_80831094(Player* this, PlayState* play) {
+ if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) {
+ if ((D_80862B48 != 0) || func_80830F9C(play)) {
+ if (func_80830E30(this, play)) {
+ return func_80831010(this, play);
+ }
+ }
+ }
+ return false;
+}
+
+s32 func_80831124(PlayState* play, Player* this) {
+ if (this->actor.child != NULL) {
+ if (this->heldActor == NULL) {
+ this->heldActor = this->actor.child;
+ Player_RequestRumble(play, this, 255, 10, 250, SQ(0));
+ Player_PlaySfx(this, NA_SE_IT_HOOKSHOT_RECEIVE);
+ }
+ return true;
+ }
+ return false;
+}
+
+s32 func_80831194(PlayState* play, Player* this) {
+ if (this->heldActor != NULL) {
+ if (!Player_IsHoldingHookshot(this)) {
+ ItemId item;
+ ArrowType arrowType;
+
+ func_808305BC(play, this, &item, &arrowType);
+ if ((this->transformation != PLAYER_FORM_DEKU) && !(this->stateFlags3 & PLAYER_STATE3_400)) {
+ if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ if ((play->sceneId != SCENE_SYATEKI_MIZU) && (play->sceneId != SCENE_F01) &&
+ (play->sceneId != SCENE_SYATEKI_MORI)) {
+ play->interfaceCtx.minigameAmmo--;
+ }
+ } else if (play->unk_1887C != 0) {
+ play->unk_1887C--;
+ } else {
+ Inventory_ChangeAmmo(item, -1);
+ }
+ }
+
+ if (play->unk_1887C == 1) {
+ play->unk_1887C = -10;
+ }
+
+ Player_RequestRumble(play, this, 150, 10, 150, SQ(0));
+ } else {
+ Player_RequestRumble(play, this, 255, 20, 150, SQ(0));
+ this->unk_B48 = 0.0f;
+ }
+
+ this->unk_D57 = (this->transformation == PLAYER_FORM_DEKU) ? 20 : 4;
+
+ this->heldActor->parent = NULL;
+ this->actor.child = NULL;
+ this->heldActor = NULL;
+ return true;
+ }
+
+ return false;
+}
+
+void func_8083133C(Player* this) {
+ this->stateFlags1 |= PLAYER_STATE1_20000;
+
+ if (!(this->skelAnime.moveFlags & ANIM_FLAG_80) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
+ (D_80862B20 < 0x2000)) {
+ this->currentYaw = this->actor.shape.rot.y = this->actor.wallYaw + 0x8000;
+ }
+
+ this->targetYaw = this->actor.shape.rot.y;
+}
+
+s32 func_808313A8(PlayState* play, Player* this, Actor* actor) {
+ if (actor == NULL) {
+ func_8082DE50(play, this);
+ func_80836988(this, play);
+ return true;
+ }
+
+ return false;
+}
+
+void func_808313F0(Player* this, PlayState* play) {
+ if (!func_808313A8(play, this, this->heldActor)) {
+ func_8082F43C(play, this, func_808490B4);
+ PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait);
+ }
+}
+
+// Stops the current fanfare if a stateflag is set; these two are Kamaro Dancing and Bremen Marching.
+void func_80831454(Player* this) {
+ if ((this->stateFlags3 & PLAYER_STATE3_20000000) || (this->stateFlags2 & PLAYER_STATE2_2000000)) {
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
+ }
+}
+
+s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) {
+ s32 i;
+ f32* ptr;
+
+ if (actionFunc == this->actionFunc) {
+ return false;
+ }
+
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON;
+
+ if (this->actor.flags & ACTOR_FLAG_20000000) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ this->actor.flags &= ~ACTOR_FLAG_20000000;
+ } else if ((func_80857BE8 == this->actionFunc) || (func_808561B0 == this->actionFunc)) {
+ this->actor.shape.shadowDraw = ActorShadow_DrawFeet;
+ this->actor.shape.shadowScale = this->ageProperties->shadowScale;
+ this->unk_ABC = 0.0f;
+ if (func_80857BE8 == this->actionFunc) {
+ if (this->stateFlags3 & PLAYER_STATE3_80000) {
+ Magic_Reset(play);
+ }
+ func_8082DD2C(play, this);
+ this->actor.shape.rot.x = 0;
+ this->actor.shape.rot.z = 0;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_800;
+ } else {
+ Actor_SetScale(&this->actor, 0.01f);
+ }
+ } else if ((this->transformation == PLAYER_FORM_GORON) &&
+ (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) {
+ func_80831990(play, this, ITEM_NONE);
+ }
+
+ func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2]));
+ this->actionFunc = actionFunc;
+
+ if ((this->itemAction != this->heldItemAction) && (!(arg3 & 1) || !(this->stateFlags1 & PLAYER_STATE1_400000))) {
+ func_80123C58(this);
+ }
+
+ if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) {
+ func_808309CC(play, this);
+ PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this));
+ this->stateFlags1 &= ~PLAYER_STATE1_400000;
+ }
+
+ func_80831454(this);
+ func_8082E794(this);
+
+ this->stateFlags1 &= ~(PLAYER_STATE1_40 | PLAYER_STATE1_4000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000 |
+ PLAYER_STATE1_80000000);
+ this->stateFlags2 &= ~(PLAYER_STATE2_80000 | PLAYER_STATE2_800000 | PLAYER_STATE2_2000000 | PLAYER_STATE2_8000000 |
+ PLAYER_STATE2_10000000);
+ this->stateFlags3 &=
+ ~(PLAYER_STATE3_2 | PLAYER_STATE3_8 | PLAYER_STATE3_80 | PLAYER_STATE3_200 | PLAYER_STATE3_2000 |
+ PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | PLAYER_STATE3_20000 | PLAYER_STATE3_40000 | PLAYER_STATE3_80000 |
+ PLAYER_STATE3_200000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_20000000);
+
+ this->unk_AE7 = 0;
+ this->unk_AE8 = 0;
+ this->unk_AA4 = 0;
+ this->unk_B86[0] = 0;
+ this->unk_B86[1] = 0;
+ this->unk_B8A = 0;
+ this->unk_B8C = 0;
+ this->unk_B8E = 0;
+
+ // TODO: Is there no other way to write this that works?
+ i = 0;
+ ptr = this->unk_B10;
+ do {
+ *ptr = 0.0f;
+ ptr++;
+ i++;
+ } while (i < ARRAY_COUNT(this->unk_B10));
+
+ this->actor.shape.rot.z = 0;
+
+ Player_ResetCylinder(this);
+ func_8082E00C(this);
+
+ return true;
+}
+
+void func_8083172C(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) {
+ s32 moveFlags = this->skelAnime.moveFlags;
+
+ this->skelAnime.moveFlags = 0;
+ Player_SetAction(play, this, actionFunc, arg3);
+ this->skelAnime.moveFlags = moveFlags;
+}
+
+void func_80831760(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) {
+ if (this->itemAction > PLAYER_IA_MINUS1) {
+ PlayerItemAction heldItemAction = this->itemAction;
+
+ this->itemAction = this->heldItemAction;
+ Player_SetAction(play, this, actionFunc, arg3);
+ this->itemAction = heldItemAction;
+
+ Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
+ }
+}
+
+void func_808317C4(Player* this) {
+ if (Player_IsHoldingHookshot(this)) {
+ if (this->heldActor != NULL) {
+ Actor_Kill(this->heldActor);
+ this->actor.child = NULL;
+ this->heldActor = NULL;
+ }
+ }
+}
+
+s32 func_80831814(Player* this, PlayState* play, PlayerUnkAA5 arg2) {
+ if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_800 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000))) {
+ if (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_FIRSTPERSON) != 0) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (func_801242B4(this) && (this->actor.depthInWater < this->ageProperties->unk_2C))) {
+ this->unk_AA5 = arg2;
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+// Toggle Lens
+void func_808318C0(PlayState* play) {
+ if (Magic_Consume(play, 0, MAGIC_CONSUME_LENS)) {
+ if (play->actorCtx.lensActive) {
+ Actor_DeactivateLens(play);
+ } else {
+ play->actorCtx.lensActive = true;
+ }
+
+ play_sound(play->actorCtx.lensActive ? NA_SE_SY_GLASSMODE_ON : NA_SE_SY_GLASSMODE_OFF);
+ } else {
+ play_sound(NA_SE_SY_ERROR);
+ }
+}
+
+// Toggle Lens from a button press
+void func_80831944(PlayState* play, Player* this) {
+ if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS) {
+ func_808318C0(play);
+ }
+}
+
+// Proposed name: Player_UseItem
+void func_80831990(PlayState* play, Player* this, ItemId item) {
+ PlayerItemAction itemAction = Player_ItemToItemAction(this, item);
+
+ if ((((this->heldItemAction == this->itemAction) &&
+ (!(this->stateFlags1 & PLAYER_STATE1_400000) ||
+ (Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE))) ||
+ ((this->itemAction <= PLAYER_IA_MINUS1) &&
+ ((Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE)))) &&
+ ((itemAction == PLAYER_IA_NONE) || !(this->stateFlags1 & PLAYER_STATE1_8000000) ||
+ (itemAction == PLAYER_IA_MASK_ZORA) ||
+ ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) {
+ s32 var_v1 = ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) &&
+ ((this->transformation != PLAYER_FORM_HUMAN) || (itemAction >= PLAYER_IA_MASK_GIANT)));
+ CollisionPoly* sp5C;
+ s32 sp58;
+ f32 sp54;
+ PlayerExplosive explosiveType;
+
+ if (var_v1 ||
+ (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) && (itemAction != PLAYER_IA_NONE)) ||
+ (itemAction == PLAYER_IA_OCARINA) ||
+ ((itemAction > PLAYER_IA_BOTTLE_MIN) && itemAction < PLAYER_IA_MASK_MIN) ||
+ ((itemAction == PLAYER_IA_PICTO_BOX) && (this->talkActor != NULL) &&
+ (this->exchangeItemId > PLAYER_IA_NONE))) {
+ if (var_v1) {
+ PlayerTransformation playerForm = (itemAction < PLAYER_IA_MASK_FIERCE_DEITY)
+ ? PLAYER_FORM_HUMAN
+ : itemAction - PLAYER_IA_MASK_FIERCE_DEITY;
+
+ if (((this->currentMask != PLAYER_MASK_GIANT) && (itemAction == PLAYER_IA_MASK_GIANT) &&
+ ((gSaveContext.magicState != MAGIC_STATE_IDLE) ||
+ (gSaveContext.save.saveInfo.playerData.magic == 0))) ||
+ (!(this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ BgCheck_EntityCheckCeiling(&play->colCtx, &sp54, &this->actor.world.pos,
+ sPlayerAgeProperties[playerForm].unk_00, &sp5C, &sp58, &this->actor))) {
+ play_sound(NA_SE_SY_ERROR);
+ return;
+ }
+ }
+ if ((itemAction == PLAYER_IA_MAGIC_BEANS) && (AMMO(ITEM_MAGIC_BEANS) == 0)) {
+ play_sound(NA_SE_SY_ERROR);
+ } else {
+ this->itemAction = itemAction;
+ this->unk_AA5 = PLAYER_UNKAA5_5;
+ }
+ } else if (((itemAction == PLAYER_IA_STICK) && (AMMO(ITEM_STICK) == 0)) ||
+ (((play->unk_1887D != 0) || (play->unk_1887E != 0)) &&
+ (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 5)) ||
+ ((play->unk_1887D == 0) && (play->unk_1887E == 0) &&
+ ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) &&
+ ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) ||
+ (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) {
+ play_sound(NA_SE_SY_ERROR);
+ } else if (itemAction == PLAYER_IA_LENS) {
+ func_808318C0(play);
+ } else if (itemAction == PLAYER_IA_PICTO_BOX) {
+ if (!func_80831814(this, play, PLAYER_UNKAA5_2)) {
+ play_sound(NA_SE_SY_ERROR);
+ }
+ } else if ((itemAction == PLAYER_IA_NUT) &&
+ ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) {
+ if (AMMO(ITEM_NUT) != 0) {
+ func_8083A658(play, this);
+ } else {
+ play_sound(NA_SE_SY_ERROR);
+ }
+ } else if ((this->transformation == PLAYER_FORM_HUMAN) && (itemAction >= PLAYER_IA_MASK_MIN) &&
+ (itemAction < PLAYER_IA_MASK_GIANT)) {
+ PlayerMask maskId = GET_MASK_FROM_IA(itemAction);
+
+ this->prevMask = this->currentMask;
+ if (maskId == this->currentMask) {
+ this->currentMask = PLAYER_MASK_NONE;
+ func_8082E1F0(this, NA_SE_PL_TAKE_OUT_SHIELD);
+ } else {
+ this->currentMask = maskId;
+ func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS);
+ }
+ gSaveContext.save.equippedMask = this->currentMask;
+ } else if ((itemAction != this->heldItemAction) ||
+ ((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) {
+ u8 nextAnimType;
+
+ this->nextModelGroup = Player_ActionToModelGroup(this, itemAction);
+ nextAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType;
+ var_v1 = ((this->transformation != PLAYER_FORM_GORON) || (itemAction == PLAYER_IA_POWDER_KEG));
+
+ if (var_v1 && (this->heldItemAction >= 0) && (item != this->heldItemId) &&
+ (D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != 0)) {
+ this->heldItemId = item;
+ this->stateFlags3 |= PLAYER_STATE3_40000000;
+ } else {
+ func_808317C4(this);
+ func_8082DCA0(play, this);
+ func_8082F470(play, this, itemAction);
+ if (!var_v1) {
+ D_80862B48 = 1;
+ D_80862B4C = 1;
+ }
+ }
+ } else {
+ D_80862B48 = 1;
+ D_80862B4C = 1;
+ }
+ }
+}
+
+void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ s32 sp24 = func_801242B4(this);
+
+ func_8082DE50(play, this);
+ Player_SetAction(play, this, sp24 ? func_80851BD4 : func_8084BFDC, 0);
+ Player_AnimationPlayOnce(play, this, anim);
+
+ if (anim == &gPlayerAnim_link_derth_rebirth) {
+ this->skelAnime.endFrame = 84.0f;
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_80;
+
+ func_8082DAD4(this);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DOWN);
+
+ if (this == GET_PLAYER(play)) {
+ this->csId = play->playerCsIds[PLAYER_CS_ID_DEATH];
+ Audio_SetBgmVolumeOff();
+ gSaveContext.powderKegTimer = 0;
+ gSaveContext.unk_1014 = 0;
+ gSaveContext.jinxTimer = 0;
+
+ if (Inventory_ConsumeFairy(play)) {
+ play->gameOverCtx.state = GAMEOVER_REVIVE_START;
+ this->unk_AE7 = 1;
+ } else {
+ play->gameOverCtx.state = GAMEOVER_DEATH_START;
+ func_801A41F8(0);
+ Audio_PlayFanfare(NA_BGM_GAME_OVER);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ }
+
+ ShrinkWindow_Letterbox_SetSizeTarget(32);
+ }
+}
+
+s32 func_80832090(Player* this) {
+ return (!(func_8084D770 == this->actionFunc) ||
+ (((this->stateFlags3 & PLAYER_STATE3_40000000)) &&
+ ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) &&
+ (!(func_80848808 == this->unk_AC4) ||
+ Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction);
+}
+
+// Whether action is Bremen marching or Kamaro dancing
+s32 func_8083213C(Player* this) {
+ return (func_8084AC84 == this->actionFunc) || (func_8084AEEC == this->actionFunc);
+}
+
+s32 func_8083216C(Player* this, PlayState* play) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) {
+ Player_SetAction(play, this, func_80855E08, 1);
+ this->stateFlags3 |= PLAYER_STATE3_80;
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start);
+ func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80));
+ func_8082DAD4(this);
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ this->unk_AA6 |= 0x43;
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH);
+ return true;
+ }
+
+ if (func_80832090(this)) {
+ func_808304BC(this, play);
+ if (func_80852B28 == this->actionFunc) {
+ return true;
+ }
+ }
+
+ if (!this->unk_AC4(this, play)) {
+ return false;
+ }
+
+ if (this->unk_AC8 != 0.0f) {
+ if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f)) {
+ AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->unk_284.jointTable,
+ this->skelAnime.jointTable, D_8085B9F0);
+ }
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) {
+ Math_StepToF(&this->unk_AC8, 0.0f, 0.25f);
+ AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable, 1.0f - this->unk_AC8);
+ }
+ } else if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f) ||
+ (this->skelAnime.moveFlags & ANIM_FLAG_8)) {
+ AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable, D_8085B9F0);
+ } else {
+ AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable);
+ }
+
+ return true;
+}
+
+s32 func_808323C0(Player* this, s16 csId) {
+ if ((csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != csId)) {
+ if (!CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Queue(csId);
+
+ return false;
+ }
+ CutsceneManager_Start(csId, &this->actor);
+ }
+ this->csId = csId;
+
+ return true;
+}
+
+s32 func_80832444(Player* this) {
+ if (this->csId > CS_ID_NONE) {
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ return false;
+ }
+
+ CutsceneManager_Start(this->csId, &this->actor);
+ }
+ return true;
+}
+
+s32 func_8083249C(Player* this) {
+ if ((this->csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->csId)) {
+ return func_80832444(this);
+ }
+ return true;
+}
+
+s32 func_808324EC(PlayState* play, Player* this, PlayerFuncD58 arg2, s32 csId) {
+ this->unk_D58 = arg2;
+ this->csId = csId;
+ Player_SetAction(play, this, func_8084D770, 0);
+ func_8083249C(this);
+ this->stateFlags2 |= PLAYER_STATE2_40;
+ return func_8082DE14(play, this);
+}
+
+s32 func_80832558(PlayState* play, Player* this, PlayerFuncD58 arg2) {
+ return func_808324EC(play, this, arg2, CS_ID_NONE);
+}
+
+// To do with turning, related to targeting
+void func_80832578(Player* this, PlayState* play) {
+ s16 previousYaw = this->actor.shape.rot.y;
+
+ if (!(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) {
+ Actor* targetedActor = this->targetedActor;
+
+ if ((targetedActor != NULL) && ((play->actorCtx.targetContext.unk4B != 0) || (this != GET_PLAYER(play))) &&
+ (targetedActor->id != ACTOR_OBJ_NOZOKI)) {
+ Math_ScaledStepToS(&this->actor.shape.rot.y,
+ Math_Vec3f_Yaw(&this->actor.world.pos, &targetedActor->focus.pos), 0xFA0);
+ } else if ((this->stateFlags1 & PLAYER_STATE1_20000) &&
+ !(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) {
+ Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetYaw, 0xFA0);
+ }
+ } else if (!(this->stateFlags2 & PLAYER_STATE2_40)) {
+ Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x7D0);
+ }
+
+ this->unk_B4C = this->actor.shape.rot.y - previousYaw;
+}
+
+s16 func_80832660(s16* pValue, s16 target, s16 step, s16 arg3, s16 arg4, s16 arg5) {
+ s16 temp1;
+ s16 temp2;
+ s16 temp3;
+
+ temp1 = temp2 = arg4 - *pValue;
+ temp2 = CLAMP(temp2, -arg5, arg5);
+ *pValue += BINANG_SUB(temp1, temp2);
+
+ Math_ScaledStepToS(pValue, target, step);
+
+ temp3 = *pValue;
+ if (*pValue < -arg3) {
+ *pValue = -arg3;
+ } else if (arg3 < *pValue) {
+ *pValue = arg3;
+ }
+ return temp3 - *pValue;
+}
+
+s16 func_80832754(Player* this, s32 arg1) {
+ s16 sp36;
+ s16 var_s1 = this->actor.shape.rot.y;
+
+ if (arg1) {
+ this->upperLimbRot.x = this->actor.focus.rot.x;
+ var_s1 = this->actor.focus.rot.y;
+ this->unk_AA6 |= 0x41;
+ } else {
+ s16 temp =
+ func_80832660(&this->headLimbRot.x, this->actor.focus.rot.x, 0x258, 0x2710, this->actor.focus.rot.x, 0);
+
+ func_80832660(&this->upperLimbRot.x, temp, 0xC8, 0xFA0, this->headLimbRot.x, 0x2710);
+
+ sp36 = this->actor.focus.rot.y - var_s1;
+ func_80832660(&sp36, 0, 0xC8, 0x5DC0, this->upperLimbRot.y, 0x1F40);
+ var_s1 = this->actor.focus.rot.y - sp36;
+ func_80832660(&this->headLimbRot.y, (sp36 - this->upperLimbRot.y), 0xC8, 0x1F40, sp36, 0x1F40);
+ func_80832660(&this->upperLimbRot.y, sp36, 0xC8, 0x1F40, this->headLimbRot.y, 0x1F40);
+ this->unk_AA6 |= 0xD9;
+ }
+
+ return var_s1;
+}
+
+void func_80832888(Player* this, PlayState* play) {
+ s32 var_v1 = 0;
+ Actor* var_v1_2;
+ s32 heldZ = CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_Z);
+ s32 temp_v0_3;
+ s32 var_a1;
+
+ if (!heldZ) {
+ this->stateFlags1 &= ~PLAYER_STATE1_40000000;
+ }
+
+ if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0) ||
+ (this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (this->stateFlags3 & PLAYER_STATE3_80)) {
+ this->unk_738 = 0;
+ } else if (heldZ || (this->stateFlags2 & PLAYER_STATE2_2000) || (this->unk_A78 != NULL)) {
+ if (this->unk_738 <= 5) {
+ this->unk_738 = 5;
+ } else {
+ this->unk_738--;
+ }
+ } else if (this->stateFlags1 & PLAYER_STATE1_20000) {
+ this->unk_738 = 0;
+ } else if (this->unk_738 != 0) {
+ this->unk_738--;
+ }
+
+ if (this->unk_738 > 5) {
+ var_v1 = 1;
+ }
+
+ temp_v0_3 = func_8082DAFC(play);
+ if (temp_v0_3 || (this->unk_738 != 0) || (this->stateFlags1 & (PLAYER_STATE1_1000 | PLAYER_STATE1_2000000))) {
+ if (!temp_v0_3) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_2000000) &&
+ ((this->heldItemAction != PLAYER_IA_FISHING_ROD) || (this->unk_B28 == 0)) &&
+ CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_Z)) {
+ var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetContext.arrowPointedActor
+ : &GET_PLAYER(play)->actor;
+ var_a1 = (gSaveContext.options.zTargetSetting != 0) || (this != GET_PLAYER(play));
+ this->stateFlags1 |= PLAYER_STATE1_8000;
+ if ((this->currentMask != PLAYER_MASK_GIANT) && (var_v1_2 != NULL) &&
+ !(var_v1_2->flags & ACTOR_FLAG_CANT_LOCK_ON) &&
+ !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) {
+ if ((var_v1_2 == this->targetedActor) && (this == GET_PLAYER(play))) {
+ var_v1_2 = play->actorCtx.targetContext.unk_94;
+ }
+
+ if ((var_v1_2 != NULL) &&
+ (((var_v1_2 != this->targetedActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) {
+ var_v1_2->flags &= ~ACTOR_FLAG_80000;
+ if (!var_a1) {
+ this->stateFlags2 |= PLAYER_STATE2_2000;
+ }
+ this->targetedActor = var_v1_2;
+ this->unk_738 = 0xF;
+ this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000);
+ } else if (!var_a1) {
+ func_80123DA4(this);
+ }
+ this->stateFlags1 &= ~PLAYER_STATE1_40000000;
+ } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) &&
+ (func_808573A4 != this->actionFunc)) {
+ func_8083133C(this);
+ }
+ }
+
+ if (this->targetedActor != NULL) {
+ if ((this == GET_PLAYER(play)) && (this->targetedActor != this->unk_A78) &&
+ func_800B83F8(this->targetedActor, this, var_v1)) {
+ func_80123DA4(this);
+ this->stateFlags1 |= PLAYER_STATE1_40000000;
+ } else if (this->targetedActor != NULL) {
+ this->targetedActor->targetPriority = 0x28;
+ }
+ } else if (this->unk_A78 != NULL) {
+ this->targetedActor = this->unk_A78;
+ }
+ }
+
+ if ((this->targetedActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) {
+ this->stateFlags1 &= ~(PLAYER_STATE1_10000 | PLAYER_STATE1_20000);
+ if ((this->stateFlags1 & PLAYER_STATE1_800) ||
+ !CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) {
+ this->stateFlags1 |= PLAYER_STATE1_10000;
+ }
+ } else if (this->stateFlags1 & PLAYER_STATE1_20000) {
+ this->stateFlags2 &= ~PLAYER_STATE2_2000;
+ } else {
+ func_80123DC0(this);
+ }
+ } else {
+ func_80123DC0(this);
+ }
+}
+
+s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg4) {
+ f32 temp_fv1_2;
+
+ if ((this->unk_AA5 != PLAYER_UNKAA5_0) || func_8082DA90(play) || (this->stateFlags1 & PLAYER_STATE1_1)) {
+ *arg2 = 0.0f;
+ *outYaw = this->actor.shape.rot.y;
+ } else {
+ *arg2 = D_80862AFC;
+ *outYaw = D_80862B00;
+ if (arg4 != 0.0f) {
+ *arg2 -= 20.0f;
+ if (*arg2 < 0.0f) {
+ *arg2 = 0.0f;
+ } else {
+ temp_fv1_2 = 1.0f - Math_CosS(*arg2 * 450.0f);
+ *arg2 = (SQ(temp_fv1_2) * 30.0f) + 7.0f;
+ }
+ } else {
+ *arg2 *= 0.8f;
+ }
+
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
+ *arg2 *= 1.5f;
+ }
+
+ if (D_80862AFC != 0.0f) {
+ f32 temp_fv0 = Math_SinS(this->unk_B6C);
+ f32 var_fa0 = this->unk_B50;
+ f32 var_fa1;
+
+ if (this->unk_AB8 != 0.0f) {
+ var_fa1 = (this->targetedActor != NULL) ? 0.002f : 0.008f;
+
+ var_fa0 -= this->unk_AB8 * var_fa1;
+ var_fa0 = CLAMP_MIN(var_fa0, 2.0f);
+ }
+ *arg2 = (*arg2 * 0.14f) - (8.0f * temp_fv0 * temp_fv0);
+ *arg2 = CLAMP(*arg2, 0.0f, var_fa0);
+ if (temp_fv0) {} //! FAKE
+ return true;
+ }
+ }
+
+ return false;
+}
+
+s32 func_80832F24(Player* this) {
+ return Math_StepToF(&this->linearVelocity, 0.0f, REG(43) / 100.0f);
+}
+
+s32 func_80832F78(Player* this, f32* arg1, s16* outYaw, f32 arg3, PlayState* play) {
+ if (!func_80832CAC(play, this, arg1, outYaw, arg3)) {
+ *outYaw = this->actor.shape.rot.y;
+
+ if (this->targetedActor != NULL) {
+ if ((play->actorCtx.targetContext.unk4B != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) {
+ *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->targetedActor->focus.pos);
+ }
+ } else if (func_80123434(this)) {
+ *outYaw = this->targetYaw;
+ }
+
+ return false;
+ }
+
+ *outYaw += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ return true;
+}
+
+/**
+ * The values of following arrays are used as indices for the `D_8085D054` array.
+ * Each index correspond to a function which will be called sequentially until any of them return `true`.
+ * Negative marks the end of the array.
+ */
+s8 D_8085CFE4[] = { 13, 2, 4, 9, 10, 11, 8, -7 };
+s8 D_8085CFEC[] = { 13, 1, 2, 5, 3, 4, 9, 10, 11, 7, 8, -6 };
+s8 D_8085CFF8[] = { 13, 1, 2, 3, 4, 9, 10, 11, 8, 7, -6 };
+s8 D_8085D004[] = { 13, 2, 4, 9, 10, 11, 8, -7 };
+s8 D_8085D00C[] = { 13, 2, 4, 9, 10, 11, 12, 8, -7 };
+s8 D_8085D018[] = { -7 };
+s8 D_8085D01C[] = { 0, 11, 1, 2, 3, 5, 4, 9, 8, 7, -6 };
+s8 D_8085D028[] = { 0, 11, 1, 2, 3, 12, 5, 4, 9, 8, 7, -6 };
+s8 D_8085D034[] = { 13, 1, 2, 3, 12, 5, 4, 9, 10, 11, 8, 7, -6 };
+s8 D_8085D044[] = { 10, 8, -7 };
+s8 D_8085D048[] = { 0, 12, 5, 4, -14 };
+s8 D_8085D050[] = { 13, 2, -4 };
+
+s32 (*D_8085D054[])(Player*, PlayState*) = {
+ func_80839518, func_808365DC, func_8083D23C, func_8083CCB4, func_808391D8,
+ func_8083DFC4, func_8083A114, func_80848570, func_8083A580, func_8083D78C,
+ func_80839B18, func_8083A274, func_80834DFC, func_80838A90, func_8083A0CC,
+};
+
+s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) {
+ if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) {
+ if (arg3) {
+ D_80862B04 = func_8083216C(this, play);
+ if (func_80852B28 == this->actionFunc) {
+ return true;
+ }
+ }
+
+ if (func_801240DC(this)) {
+ this->unk_AA6 |= 0x41;
+ return true;
+ }
+
+ if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (func_80848808 != this->unk_AC4)) {
+ while (*arg2 >= 0) {
+ if (D_8085D054[*arg2](this, play)) {
+ return true;
+ }
+ arg2++;
+ }
+
+ if (D_8085D054[-*arg2](this, play)) {
+ return true;
+ }
+ }
+
+ if (func_8083213C(this)) {
+ return true;
+ }
+ } else if (this->stateFlags1 & PLAYER_STATE1_800) {
+ func_8083216C(this, play);
+ }
+
+ return false;
+}
+
+s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame) {
+ if ((skelAnime->endFrame - frame) <= skelAnime->curFrame) {
+ f32 sp24;
+ s16 sp22;
+
+ if (func_80833058(play, this, D_8085D01C, 1)) {
+ return 0;
+ }
+
+ if (D_80862B04 || func_80832F78(this, &sp24, &sp22, 0.018f, play)) {
+ return 1;
+ }
+ }
+ return -1;
+}
+
+void func_808332A0(PlayState* play, Player* this, s32 magicCost, s32 isSwordBeam) {
+ if (magicCost != 0) {
+ this->unk_B08 = 0.0f;
+ } else {
+ this->unk_B08 = 0.5f;
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_1000;
+ if ((this->actor.id == ACTOR_PLAYER) && (isSwordBeam || (this->transformation == PLAYER_FORM_HUMAN))) {
+ s16 pitch = 0;
+ Actor* thunder;
+
+ if (isSwordBeam) {
+ if (this->targetedActor != NULL) {
+ pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->targetedActor->focus.pos);
+ }
+ if (gSaveContext.save.saveInfo.playerData.magic == 0) {
+ return;
+ }
+ }
+
+ thunder = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_THUNDER, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x,
+ this->bodyPartsPos[PLAYER_BODYPART_WAIST].y, this->bodyPartsPos[PLAYER_BODYPART_WAIST].z,
+ pitch, 0, 0, (this->heldItemAction - PLAYER_IA_SWORD_KOKIRI) | magicCost);
+
+ if ((thunder != NULL) && isSwordBeam) {
+ Magic_Consume(play, 1, MAGIC_CONSUME_DEITY_BEAM);
+ this->unk_D57 = 4;
+ }
+ }
+}
+
+// Check for inputs for quickspin
+s32 func_808333CC(Player* this) {
+ s8 sp3C[4];
+ s8* iter;
+ s8* iter2;
+ s8 temp1;
+ s8 temp2;
+ s32 i;
+
+ if (this->heldItemAction == PLAYER_IA_STICK) {
+ return false;
+ }
+
+ iter = &this->unk_ADF[0];
+ iter2 = &sp3C[0];
+ for (i = 0; i < 4; i++, iter++, iter2++) {
+ if ((*iter2 = *iter) < 0) {
+ return false;
+ }
+ *iter2 *= 2;
+ }
+
+ temp1 = sp3C[0] - sp3C[1];
+ if (ABS_ALT(temp1) < 10) {
+ return false;
+ }
+
+ iter2 = &sp3C[1];
+ for (i = 1; i < 3; i++, iter2++) {
+ temp2 = *iter2 - *(iter2 + 1);
+ if ((ABS_ALT(temp2) < 10) || (temp2 * temp1 < 0)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+void func_808334D4(PlayState* play, Player* this) {
+ PlayerAnimationHeader* anim;
+
+ if ((this->meleeWeaponAnimation >= PLAYER_MWA_RIGHT_SLASH_1H) &&
+ (this->meleeWeaponAnimation <= PLAYER_MWA_RIGHT_COMBO_2H)) {
+ anim = D_8085CF58[Player_IsHoldingTwoHandedWeapon(this)];
+ } else {
+ anim = D_8085CF50[Player_IsHoldingTwoHandedWeapon(this)];
+ }
+
+ func_8082DC38(this);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 8.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE,
+ -9.0f);
+ func_808332A0(play, this, 2 << 8, false);
+}
+
+void func_808335B0(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_8084CCEC, 1);
+ func_808334D4(play, this);
+}
+
+s8 D_8085D090[] = {
+ PLAYER_MWA_STAB_1H,
+ PLAYER_MWA_RIGHT_SLASH_1H,
+ PLAYER_MWA_RIGHT_SLASH_1H,
+ PLAYER_MWA_LEFT_SLASH_1H,
+};
+
+s8 D_8085D094[][3] = {
+ { PLAYER_MWA_ZORA_PUNCH_LEFT, PLAYER_MWA_ZORA_PUNCH_COMBO, PLAYER_MWA_ZORA_PUNCH_KICK },
+ { PLAYER_MWA_GORON_PUNCH_LEFT, PLAYER_MWA_GORON_PUNCH_RIGHT, PLAYER_MWA_GORON_PUNCH_BUTT },
+};
+
+PlayerMeleeWeaponAnimation func_808335F4(Player* this) {
+ s32 temp_a1;
+ PlayerMeleeWeaponAnimation meleeWeaponAnim;
+
+ temp_a1 = this->unk_AE3[this->unk_ADE];
+ if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_GORON)) {
+ s32 requiredScopeTemp;
+
+ // yikes
+ meleeWeaponAnim = ((this->transformation == PLAYER_FORM_ZORA) ? D_8085D094[0] : D_8085D094[1])[this->unk_ADD];
+
+ if (this->unk_ADD != 0) {
+ this->meleeWeaponAnimation = meleeWeaponAnim;
+ if (this->unk_ADD >= 2) {
+ this->unk_ADD = -1;
+ }
+ }
+ } else {
+ if (func_808333CC(this)) {
+ meleeWeaponAnim = PLAYER_MWA_SPIN_ATTACK_1H;
+ } else {
+ if (temp_a1 < 0) {
+ meleeWeaponAnim = func_8082FBE8(this) ? PLAYER_MWA_FORWARD_SLASH_1H : PLAYER_MWA_RIGHT_SLASH_1H;
+ } else {
+ meleeWeaponAnim = D_8085D090[temp_a1];
+ if (meleeWeaponAnim == PLAYER_MWA_STAB_1H) {
+ this->stateFlags2 |= PLAYER_STATE2_40000000;
+ if (!func_8082FBE8(this)) {
+ meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H;
+ }
+ }
+ }
+
+ if (this->heldItemAction == PLAYER_IA_STICK) {
+ meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H;
+ }
+ }
+
+ if (Player_IsHoldingTwoHandedWeapon(this)) {
+ meleeWeaponAnim++;
+ }
+ }
+ return meleeWeaponAnim;
+}
+
+void func_80833728(Player* this, s32 index, u32 dmgFlags, s32 damage) {
+ this->meleeWeaponQuads[index].info.toucher.dmgFlags = dmgFlags;
+ this->meleeWeaponQuads[index].info.toucher.damage = damage;
+
+ if (dmgFlags == DMG_DEKU_STICK) {
+ this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_WOOD);
+ } else {
+ this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST);
+ }
+}
+
+MeleeWeaponDamageInfo D_8085D09C[PLAYER_MELEEWEAPON_MAX] = {
+ { DMG_GORON_PUNCH, 2, 2, 0, 0 }, // PLAYER_MELEEWEAPON_NONE
+ { DMG_SWORD, 4, 8, 1, 2 }, // PLAYER_MELEEWEAPON_SWORD_KOKIRI
+ { DMG_SWORD, 4, 8, 2, 4 }, // PLAYER_MELEEWEAPON_SWORD_RAZOR
+ { DMG_SWORD, 4, 8, 3, 6 }, // PLAYER_MELEEWEAPON_SWORD_GILDED
+ { DMG_SWORD, 4, 8, 4, 8 }, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED
+ { DMG_DEKU_STICK, 0, 0, 2, 4 }, // PLAYER_MELEEWEAPON_STICK
+ { DMG_ZORA_PUNCH, 1, 2, 0, 0 }, // PLAYER_MELEEWEAPON_ZORA_FINS
+};
+
+// New function in NE0: split out of func_80833864 to be able to call it to patch Power Crouch Stab.
+void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) {
+ MeleeWeaponDamageInfo* dmgInfo = &D_8085D09C[0];
+ s32 damage;
+
+ if (this->actor.id == ACTOR_EN_TEST3) {
+ // Was Kafei originally intended to be able to punch?
+ meleeWeaponAnim = PLAYER_MWA_GORON_PUNCH_LEFT;
+ this->meleeWeaponAnimation = -1;
+ } else {
+ //! @bug Quick Put Away Damage: Since 0 is also the "no weapon" value, producing a weapon quad without a weapon
+ //! in hand, such as during Quick Put Away, produced a quad with the Goron punch properties, which does 0 damage
+ //! as human.
+ dmgInfo = &D_8085D09C[(this->transformation == PLAYER_FORM_GORON) ? PLAYER_MELEEWEAPON_NONE
+ : Player_GetMeleeWeaponHeld(this)];
+ }
+
+ //! @bug Great Deku Sword: Presumably the dmgTransformed fields are intended for Fierce Deity, but also work for
+ //! Deku if it is able to equip a sword (such as with the "0th day" glitch), giving Great Fairy's Sword damage.
+ damage =
+ ((meleeWeaponAnim >= PLAYER_MWA_FLIPSLASH_START) && (meleeWeaponAnim <= PLAYER_MWA_ZORA_JUMPKICK_FINISH))
+ ? ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanStrong : dmgInfo->dmgTransformedStrong)
+ : ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanNormal : dmgInfo->dmgTransformedNormal);
+
+ func_80833728(this, 0, dmgInfo->dmgFlags, damage);
+ func_80833728(this, 1, dmgInfo->dmgFlags, damage);
+}
+
+void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) {
+ func_8083375C(this, meleeWeaponAnim);
+ Player_SetAction(play, this, func_808548B8, 0);
+ this->unk_AE8 = 0;
+
+ if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) {
+ func_8082DC38(this);
+ }
+
+ // Accumulate consecutive slashes to do the "third slash" types
+ if ((meleeWeaponAnim != this->meleeWeaponAnimation) || (this->unk_ADD >= 3)) {
+ this->unk_ADD = 0;
+ }
+
+ this->unk_ADD++;
+ if (this->unk_ADD >= 3) {
+ meleeWeaponAnim += 2;
+ }
+
+ this->meleeWeaponAnimation = meleeWeaponAnim;
+ func_8082DB90(play, this, sMeleeAttackAnimInfo[meleeWeaponAnim].unk_0);
+ this->unk_ADC = this->skelAnime.animLength + 4.0f;
+
+ if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_START) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_START)) {
+ func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE));
+ }
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_80833998(Player* this, s32 invincibilityTimer) {
+ if (this->invincibilityTimer >= 0) {
+ this->invincibilityTimer = invincibilityTimer;
+ this->unk_B5F = 0;
+ }
+}
+
+void func_808339B4(Player* this, s32 invincibilityTimer) {
+ if (this->invincibilityTimer > invincibilityTimer) {
+ this->invincibilityTimer = invincibilityTimer;
+ }
+ this->unk_B5F = 0;
+}
+
+// Player_InflictDamageImpl?
+s32 func_808339D4(PlayState* play, Player* this, s32 damage) {
+ if ((this->invincibilityTimer != 0) || (this->stateFlags3 & PLAYER_STATE3_400000) ||
+ (this->actor.id != ACTOR_PLAYER)) {
+ return 1;
+ }
+
+ if (this->actor.category != ACTORCAT_PLAYER) {
+ this->actor.colChkInfo.damage = -damage;
+ return Actor_ApplyDamage(&this->actor);
+ }
+
+ if (this->currentMask == PLAYER_MASK_GIANT) {
+ damage >>= 2;
+ }
+
+ return Health_ChangeBy(play, damage);
+}
+
+void func_80833A64(Player* this) {
+ this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1];
+ func_8082E820(this, 1 | ANIM_FLAG_UPDATE_Y);
+}
+
+void func_80833AA0(Player* this, PlayState* play) {
+ if (Player_SetAction(play, this, func_8084C16C, 0)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait);
+ this->unk_AE8 = 1;
+ }
+ if (this->unk_AA5 != PLAYER_UNKAA5_4) {
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ }
+}
+
+// TODO: this can be one array, but should it be?
+PlayerAnimationHeader* D_8085D0D4[] = {
+ &gPlayerAnim_link_normal_front_shit,
+ &gPlayerAnim_link_normal_front_shitR,
+ &gPlayerAnim_link_normal_back_shit,
+ &gPlayerAnim_link_normal_back_shitR,
+ // };
+ // PlayerAnimationHeader* D_8085D0E4[] = {
+ &gPlayerAnim_link_normal_front_hit,
+ &gPlayerAnim_link_anchor_front_hitR,
+ &gPlayerAnim_link_normal_back_hit,
+ &gPlayerAnim_link_anchor_back_hitR,
+};
+
+void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 velocityY, s16 arg5,
+ s32 invincibilityTimer) {
+ PlayerAnimationHeader* anim = NULL;
+
+ if (this->stateFlags1 & PLAYER_STATE1_2000) {
+ func_80833A64(this);
+ }
+
+ this->unk_B64 = 0;
+
+ Player_PlaySfx(this, NA_SE_PL_DAMAGE);
+
+ if (func_808339D4(play, this, -this->actor.colChkInfo.damage) == 0) {
+ this->stateFlags2 &= ~PLAYER_STATE2_80;
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ return;
+ }
+ }
+
+ if (this->actor.colChkInfo.damage != 0) {
+ func_80833998(this, invincibilityTimer);
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_10) {
+ return;
+ }
+
+ if (arg2 == 3) {
+ Player_SetAction(play, this, func_808546D0, 0);
+ anim = &gPlayerAnim_link_normal_ice_down;
+ func_8082DAD4(this);
+ this->actor.velocity.y = 0.0f;
+
+ Player_RequestRumble(play, this, 255, 10, 40, SQ(0));
+
+ Player_PlaySfx(this, NA_SE_PL_FREEZE_S);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE);
+ } else if (arg2 == 4) {
+ Player_SetAction(play, this, func_80854800, 0);
+ func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock);
+ func_8082DAD4(this);
+
+ this->unk_AE8 = 20;
+ this->actor.velocity.y = 0.0f;
+
+ Player_RequestRumble(play, this, 255, 80, 150, SQ(0));
+ } else {
+ arg5 -= this->actor.shape.rot.y;
+
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ Player_SetAction(play, this, func_80851B58, 0);
+ Player_RequestRumble(play, this, 180, 20, 50, SQ(0));
+
+ if (arg2 == 1) {
+ this->linearVelocity = speed * 1.5f;
+ this->actor.velocity.y = velocityY * 0.7f;
+ } else {
+ this->linearVelocity = 4.0f;
+ this->actor.velocity.y = 0.0f;
+ }
+
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+ anim = &gPlayerAnim_link_swimer_swim_hit;
+ } else if ((arg2 == 1) || (arg2 == 2) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->stateFlags1 &
+ (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) {
+ Player_SetAction(play, this, func_8084BC64, 0);
+
+ this->stateFlags3 |= PLAYER_STATE3_2;
+
+ Player_RequestRumble(play, this, 255, 20, 150, SQ(0));
+ func_8082DAD4(this);
+
+ if (arg2 == 2) {
+ this->unk_AE8 = 4;
+
+ this->actor.speed = 3.0f;
+ this->linearVelocity = 3.0f;
+ this->actor.velocity.y = 6.0f;
+
+ func_8082E5A8(play, this, D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType]);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+ } else {
+ this->actor.speed = speed;
+ this->linearVelocity = speed;
+ this->actor.velocity.y = velocityY;
+
+ if (ABS_ALT(arg5) > 0x4000) {
+ anim = &gPlayerAnim_link_normal_front_downA;
+ } else {
+ anim = &gPlayerAnim_link_normal_back_downA;
+ }
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L);
+ }
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ } else if ((this->linearVelocity > 4.0f) && !func_80123420(this)) {
+ this->unk_B64 = 20;
+
+ Player_RequestRumble(play, this, 120, 20, 10, SQ(0));
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+
+ return;
+ } else {
+ PlayerAnimationHeader** animPtr = D_8085D0D4;
+
+ Player_SetAction(play, this, func_8084BBF0, 0);
+ func_8082FC60(this);
+
+ if (this->actor.colChkInfo.damage < 5) {
+ Player_RequestRumble(play, this, 120, 20, 10, SQ(0));
+ } else {
+ Player_RequestRumble(play, this, 180, 20, 100, SQ(0));
+ this->linearVelocity = 23.0f;
+
+ animPtr += 4;
+ }
+
+ if (ABS_ALT(arg5) <= 0x4000) {
+ animPtr += 2;
+ }
+
+ if (func_80123420(this)) {
+ animPtr++;
+ }
+
+ anim = *animPtr;
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+ }
+
+ this->actor.shape.rot.y += arg5;
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+
+ if (ABS_ALT(arg5) > 0x4000) {
+ this->actor.shape.rot.y += 0x8000;
+ }
+ }
+
+ func_8082DE50(play, this);
+
+ this->stateFlags1 |= PLAYER_STATE1_4000000;
+
+ if (anim != NULL) {
+ func_8082DB90(play, this, anim);
+ }
+}
+
+s32 func_808340AC(FloorType floorType) {
+ s32 temp_v0 = floorType - FLOOR_TYPE_2;
+
+ if ((temp_v0 >= FLOOR_TYPE_2 - FLOOR_TYPE_2) && (temp_v0 <= FLOOR_TYPE_3 - FLOOR_TYPE_2)) {
+ return temp_v0;
+ }
+ return -1;
+}
+
+s32 func_808340D4(FloorType floorType) {
+ return (floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_7) || (floorType == FLOOR_TYPE_12);
+}
+
+void func_80834104(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_8085421C, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000;
+}
+
+void func_80834140(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_80)) {
+ func_80834104(play, this);
+ if (func_8082DA90(play)) {
+ this->unk_AE8 = -30;
+ }
+ this->stateFlags1 |= PLAYER_STATE1_80;
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, 84.0f, ANIMMODE_ONCE, -6.0f);
+ this->unk_AE7 = 1;
+ this->linearVelocity = 0.0f;
+ }
+}
+
+s32 func_808341F4(PlayState* play, Player* this) {
+ f32 temp_fv0;
+ f32 flameScale;
+ f32 flameIntensity;
+ s32 i;
+ s32 timerStep;
+ s32 spawnedFlame = false;
+ s32 var_v0;
+ s32 var_v1;
+ u8* timerPtr = this->flameTimers;
+
+ if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) {
+ timerStep = 0;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->cylinder.base.ocFlags1 & OC1_HIT) {
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
+ this->linearVelocity = 0.0f;
+ }
+ func_80834140(play, this, &gPlayerAnim_link_derth_rebirth);
+ }
+ } else {
+ if (this->transformation == PLAYER_FORM_GORON) {
+ var_v1 = 20;
+ } else {
+ var_v1 = (s32)(this->linearVelocity * 0.4f) + 1;
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_8) {
+ var_v0 = 100;
+ } else {
+ var_v0 = 0;
+ }
+
+ timerStep = var_v0 + var_v1;
+ }
+
+ for (i = 0; i < PLAYER_BODYPART_MAX; i++, timerPtr++) {
+ if (*timerPtr <= timerStep) {
+ *timerPtr = 0;
+ } else {
+ spawnedFlame = true;
+ *timerPtr -= timerStep;
+ if (*timerPtr > 20.0f) {
+ temp_fv0 = (*timerPtr - 20.0f) * 0.01f;
+ flameScale = CLAMP(temp_fv0, 0.19999999f, 0.2f);
+ } else {
+ flameScale = *timerPtr * 0.01f;
+ }
+
+ flameIntensity = (*timerPtr - 25.0f) * 0.02f;
+ flameIntensity = CLAMP(flameIntensity, 0.0f, 1.0f);
+ EffectSsFireTail_SpawnFlameOnPlayer(play, flameScale, i, flameIntensity);
+ }
+ }
+
+ if (spawnedFlame) {
+ Player_PlaySfx(this, NA_SE_EV_TORCH - SFX_FLAG);
+ if ((play->gameplayFrames % 4) == 0) {
+ Player_InflictDamage(play, -1);
+ }
+ } else {
+ this->isBurning = false;
+ }
+
+ return this->stateFlags1 & PLAYER_STATE1_80;
+}
+
+s32 func_808344C0(PlayState* play, Player* this) {
+ s32 i = 0;
+
+ while (i < ARRAY_COUNT(this->flameTimers)) {
+ this->flameTimers[i] = Rand_S16Offset(0, 200);
+ i++;
+ }
+
+ this->isBurning = true;
+ return func_808341F4(play, this);
+}
+
+s32 func_80834534(PlayState* play, Player* this) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L);
+ return func_808344C0(play, this);
+}
+
+s32 func_8083456C(PlayState* play, Player* this) {
+ if (this->actor.colChkInfo.acHitEffect == 1) {
+ return func_80834534(play, this);
+ }
+ return false;
+}
+
+void func_808345A8(Player* this) {
+ if ((this->invincibilityTimer > 0) && (this->invincibilityTimer < 20)) {
+ this->invincibilityTimer = 20;
+ }
+}
+
+void func_808345C8(void) {
+ if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) {
+ gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
+ gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
+ }
+}
+
+s32 func_80834600(Player* this, PlayState* play) {
+ s32 pad74;
+ s32 var_v0;
+
+ if (this->unk_D6A != 0) {
+ if (!Player_InBlockingCsMode(play, this)) {
+ Player_InflictDamage(play, -16);
+ this->unk_D6A = 0;
+ }
+ } else if ((var_v0 = ((Player_GetHeight(this) - 8.0f) < (this->unk_AB8 * this->actor.scale.y))) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) ||
+ (this->stateFlags2 & PLAYER_STATE2_80000000)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+
+ if (var_v0) {
+ func_80169FDC(&play->state);
+ func_808345C8();
+ Scene_SetExitFade(play);
+ } else {
+ func_80169EFC(&play->state);
+ func_808345C8();
+ }
+
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_TAKEN_AWAY);
+ play->haltAllActors = true;
+ play_sound(NA_SE_OC_ABYSS);
+ } else if ((this->unk_B75 != 0) && ((this->unk_B75 >= 3) || (this->invincibilityTimer == 0))) {
+ u8 sp6C[] = { 0, 2, 1, 1 };
+
+ if (!func_8083456C(play, this)) {
+ if (this->unk_B75 == 4) {
+ this->shockTimer = 40;
+ }
+
+ this->actor.colChkInfo.damage += this->unk_B74;
+ func_80833B18(play, this, sp6C[this->unk_B75 - 1], this->unk_B78, this->unk_B7C, this->unk_B76, 20);
+ }
+ } else if ((this->shieldQuad.base.acFlags & AC_BOUNCED) || (this->shieldCylinder.base.acFlags & AC_BOUNCED) ||
+ ((this->invincibilityTimer < 0) && (this->cylinder.base.acFlags & AC_HIT) &&
+ (this->cylinder.info.acHitInfo != NULL) &&
+ (this->cylinder.info.acHitInfo->toucher.dmgFlags != DMG_UNBLOCKABLE))) {
+ PlayerAnimationHeader* var_a2;
+ s32 sp64;
+
+ Player_RequestRumble(play, this, 180, 20, 100, SQ(0));
+ if ((this->invincibilityTimer >= 0) && !Player_IsGoronOrDeku(this)) {
+ sp64 = (func_8084B5C0 == this->actionFunc);
+ if (!func_801242B4(this)) {
+ Player_SetAction(play, this, func_8084BAA4, 0);
+ }
+
+ this->unk_AE7 = sp64;
+ if ((s8)sp64 == 0) {
+ func_8082F43C(play, this, func_80848A0C);
+ var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)]
+ : D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)];
+ PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2);
+ } else {
+ Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]);
+ }
+ }
+
+ if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) {
+ this->linearVelocity = -18.0f;
+ this->currentYaw = this->actor.shape.rot.y;
+ }
+
+ return false;
+ } else if ((this->unk_D6B != 0) || (this->invincibilityTimer > 0) || (this->stateFlags1 & PLAYER_STATE1_4000000) ||
+ (this->csMode != PLAYER_CSMODE_0) || (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) ||
+ (this->meleeWeaponQuads[1].base.atFlags & AT_HIT) || (this->cylinder.base.atFlags & AT_HIT) ||
+ (this->shieldCylinder.base.atFlags & AT_HIT)) {
+ return false;
+ } else if (this->cylinder.base.acFlags & AC_HIT) {
+ Actor* sp60 = this->cylinder.base.ac;
+ s32 var_a2_2;
+
+ if (sp60->flags & ACTOR_FLAG_1000000) {
+ Player_PlaySfx(this, NA_SE_PL_BODY_HIT);
+ }
+
+ if (this->actor.colChkInfo.acHitEffect == 2) {
+ var_a2_2 = 3;
+ } else if (this->actor.colChkInfo.acHitEffect == 3) {
+ var_a2_2 = 4;
+ } else if (this->actor.colChkInfo.acHitEffect == 7) {
+ var_a2_2 = 1;
+ this->shockTimer = 40;
+ } else if (this->actor.colChkInfo.acHitEffect == 9) {
+ var_a2_2 = 1;
+ if (func_80834534(play, this)) {
+ return true;
+ }
+
+ } else if (((this->actor.colChkInfo.acHitEffect == 4) && (this->currentMask != PLAYER_MASK_GIANT)) ||
+ (this->stateFlags3 & PLAYER_STATE3_1000)) {
+ var_a2_2 = 1;
+ } else {
+ var_a2_2 = 0;
+ if (func_8083456C(play, this)) {
+ return true;
+ }
+ }
+ func_80833B18(play, this, var_a2_2, 4.0f, 5.0f, Actor_WorldYawTowardActor(sp60, &this->actor), 20);
+ } else if (this->invincibilityTimer != 0) {
+ return false;
+ } else {
+ s32 sp58 = func_808340AC(sPlayerCurrentFloorType);
+ u32 isSurfaceWallDamage = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ s32 var_a1 = false;
+ s32 var_v1_2;
+ s32 pad48;
+
+ if ((sp58 < 0) || (!isSurfaceWallDamage && (this->transformation == PLAYER_FORM_GORON) &&
+ !(this->actor.depthInWater > 0.0f))) {
+ var_a1 = (this->actor.wallPoly != NULL) &&
+ SurfaceType_IsWallDamage(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId);
+ if (!var_a1) {
+ //! FAKE?
+ goto label;
+ }
+ }
+ var_v1_2 = var_a1 ? this->actor.wallBgId : this->actor.floorBgId;
+ if (((this->transformation == PLAYER_FORM_DEKU) || (this->transformation == PLAYER_FORM_ZORA)) &&
+ ((sp58 >= 0) && !isSurfaceWallDamage && !(this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < -30.0f))) {
+ func_80834534(play, this);
+ } else {
+ this->actor.colChkInfo.damage = 4;
+ func_80833B18(play, this, (var_v1_2 == BGCHECK_SCENE) ? 0 : 1, 4.0f, 5.0f,
+ var_a1 ? this->actor.wallYaw : this->actor.shape.rot.y, 20);
+ return true;
+ }
+ }
+
+ //! FAKE?
+ if (0) {
+ label:
+ return false;
+ }
+
+ return true;
+}
+
+void func_80834CD0(Player* this, f32 arg1, u16 sfxId) {
+ this->actor.velocity.y = arg1 * D_8085C3E4;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+
+ if (sfxId != NA_SE_NONE) {
+ Player_AnimSfx_PlayFloorJump(this);
+ Player_AnimSfx_PlayVoice(this, sfxId);
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_40000;
+ this->fallStartHeight = this->actor.world.pos.y;
+}
+
+void func_80834D50(PlayState* play, Player* this, PlayerAnimationHeader* anim, f32 speed, u16 sfxId) {
+ Player_SetAction(play, this, func_8084C16C, 1);
+ if (anim != NULL) {
+ func_8082DB90(play, this, anim);
+ }
+ func_80834CD0(this, speed, sfxId);
+}
+
+void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlayState* play) {
+ func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N);
+}
+
+s32 func_80834DFC(Player* this, PlayState* play) {
+ if ((this->transformation != PLAYER_FORM_GORON) &&
+ ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->unk_B5C < 4)) &&
+ !(this->stateFlags1 & PLAYER_STATE1_800) && (this->unk_B5C >= 2) &&
+ (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->wallHeight < this->ageProperties->unk_14))) {
+ s32 var_v1 = false;
+ PlayerAnimationHeader* anim;
+ f32 wallHeight;
+
+ if (func_801242B4(this)) {
+ f32 depth = (this->transformation == PLAYER_FORM_FIERCE_DEITY) ? 80.0f : 50.0f;
+
+ if (this->actor.depthInWater < depth) {
+ if ((this->unk_B5C < 2) || (this->ageProperties->unk_10 < this->wallHeight)) {
+ return false;
+ }
+ } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || (this->unk_B5C >= 3)) {
+ return false;
+ }
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ ((this->ageProperties->unk_14 <= this->wallHeight) && (this->stateFlags1 & PLAYER_STATE1_8000000))) {
+ return false;
+ }
+
+ if ((this->actor.wallBgId != BGCHECK_SCENE) && (sPlayerCurrentWallFlags & WALL_FLAG_6)) {
+ if (this->unk_B5D >= 6) {
+ this->stateFlags2 |= PLAYER_STATE2_4;
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ var_v1 = true;
+ }
+ }
+ } else if ((this->unk_B5D >= 6) || CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ var_v1 = true;
+ }
+
+ if (var_v1) {
+ Player_SetAction(play, this, func_8084D4EC, 0);
+ wallHeight = this->wallHeight;
+
+ if (this->ageProperties->unk_14 <= wallHeight) {
+ anim = &gPlayerAnim_link_normal_250jump_start;
+ this->linearVelocity = 1.0f;
+ } else {
+ CollisionPoly* poly;
+ s32 bgId;
+ f32 wallPolyNormalX = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.x);
+ f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.z);
+ f32 var_fv1 = this->wallDistance + 0.5f; // wallDistance
+ f32 yIntersect;
+ s32 pad;
+
+ this->stateFlags1 |= PLAYER_STATE1_4;
+
+ if (func_801242B4(this)) {
+ wallHeight -= 60.0f * this->ageProperties->unk_08;
+ anim = &gPlayerAnim_link_swimer_swim_15step_up;
+ this->stateFlags1 &= ~PLAYER_STATE1_8000000;
+ } else if (this->ageProperties->unk_18 <= wallHeight) {
+ wallHeight -= 59.0f * this->ageProperties->unk_08;
+ anim = &gPlayerAnim_link_normal_150step_up;
+ } else {
+ wallHeight -= 41.0f * this->ageProperties->unk_08;
+ anim = &gPlayerAnim_link_normal_100step_up;
+ }
+
+ this->unk_ABC -= wallHeight * 100.0f;
+
+ this->actor.world.pos.x -= var_fv1 * wallPolyNormalX;
+ this->actor.world.pos.y += this->wallHeight + 10.0f;
+ this->actor.world.pos.z -= var_fv1 * wallPolyNormalZ;
+
+ yIntersect =
+ BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &this->actor.world.pos);
+ if ((this->actor.world.pos.y - yIntersect) <= 20.0f) {
+ this->actor.world.pos.y = yIntersect;
+ if (bgId != BGCHECK_SCENE) {
+ DynaPoly_SetPlayerOnTop(&play->colCtx, bgId);
+ }
+ }
+
+ func_8082DAD4(this);
+ this->actor.velocity.y = 0.0f;
+ }
+
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f);
+ AnimationContext_DisableQueue(play);
+ this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000;
+ return true;
+ }
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->unk_B5C == 1) && (this->unk_B5D >= 3)) {
+ f32 temp = (this->wallHeight * 0.08f) + 5.5f;
+
+ func_80834DB8(this, &gPlayerAnim_link_normal_jump, temp, play);
+ this->linearVelocity = 2.5f;
+ return true;
+ }
+
+ return false;
+}
+
+void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) {
+ Player_SetAction(play, this, func_8084D820, 0);
+ func_8082DD2C(play, this);
+
+ this->csId = CS_ID_NONE;
+ this->unk_AE7 = 1;
+ this->unk_AE8 = 1;
+
+ this->unk_3A0.x = Math_SinS(arg3) * arg2 + this->actor.world.pos.x;
+ this->unk_3A0.z = Math_CosS(arg3) * arg2 + this->actor.world.pos.z;
+
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+}
+
+void func_808353DC(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_808508C8, 0);
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait);
+}
+
+s32 func_80835428(PlayState* play, Player* this) {
+ if (!func_8082DA90(play) && (this->stateFlags1 & PLAYER_STATE1_80000000)) {
+ func_80834104(play, this);
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_S);
+ func_8019F128(NA_SE_OC_SECRET_WARP_IN);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * The actual entrances each "return entrance" value can map to.
+ * This is used by scenes that are shared between locations.
+ *
+ * This 1D array is split into groups of entrances.
+ * The start of each group is indexed by `sReturnEntranceGroupIndices` values.
+ * The resulting groups are then indexed by the spawn value.
+ *
+ * The spawn value (`PlayState.curSpawn`) is set to a different value depending on the entrance used to enter the
+ * scene, which allows these dynamic "return entrances" to link back to the previous scene.
+ *
+ * Seems unused in MM
+ */
+u16 sReturnEntranceGroupData[] = {
+ // 0xFE00
+ /* 0 */ 0x1000,
+};
+
+/**
+ * The values are indices into `sReturnEntranceGroupData` marking the start of each group
+ */
+u8 sReturnEntranceGroupIndices[] = {
+ 0, // 0xFE00
+};
+
+// subfunction of OoT's func_80839034
+void func_808354A4(PlayState* play, s32 arg1, s32 arg2) {
+ play->nextEntrance = play->setupExitList[arg1];
+
+ if (play->nextEntrance == 0xFFFF) {
+ gSaveContext.respawnFlag = 4;
+ play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_UNK_3].entrance;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ } else if (play->nextEntrance >= 0xFE00) {
+ play->nextEntrance =
+ sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntrance - 0xFE00] + play->curSpawn];
+
+ Scene_SetExitFade(play);
+ } else {
+ if (arg2) {
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = play->nextEntrance;
+ func_80169EFC(&play->state);
+ gSaveContext.respawnFlag = -2;
+ }
+
+ gSaveContext.retainWeatherMode = 1;
+ Scene_SetExitFade(play);
+ }
+
+ play->transitionTrigger = TRANS_TRIGGER_START;
+}
+
+void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_80833AA0(this, play);
+ this->unk_AE8 = -2;
+ func_8082E5EC(play, this, anim);
+ func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE);
+}
+
+// related to grottos (?)
+s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) {
+ s32 var_a3;
+ FloorType floorType;
+ s32 sp34;
+ s32 sp30;
+
+ if ((this == GET_PLAYER(play)) && !(this->stateFlags1 & PLAYER_STATE1_80) && !func_8082DA90(play) &&
+ (this->csMode == PLAYER_CSMODE_0) && !(this->stateFlags1 & PLAYER_STATE1_1)) {
+ var_a3 = 0;
+ if (((poly != NULL) && (var_a3 = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), (var_a3 != 0)) &&
+ (((play->sceneId != SCENE_GORONRACE) && (play->sceneId != SCENE_DEKU_KING)) || (var_a3 < 3)) &&
+ (((play->sceneId != SCENE_20SICHITAI) && (play->sceneId != SCENE_20SICHITAI2)) || (var_a3 < 0x15)) &&
+ ((play->sceneId != SCENE_11GORONNOSATO) || (var_a3 < 6))) ||
+ (func_808340D4(sPlayerCurrentFloorType) && (this->floorProperty == FLOOR_PROPERTY_12))) {
+ sp34 = this->unk_D68 - (s32)this->actor.world.pos.y;
+ if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sp34 < 400) && (D_80862B18 > 100.0f)) {
+ if ((this->floorProperty != FLOOR_PROPERTY_5) && (this->floorProperty != FLOOR_PROPERTY_12)) {
+ this->linearVelocity = 0.0f;
+ }
+
+ return false;
+ } else {
+ if (this->stateFlags3 & PLAYER_STATE3_1000000) {
+ func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish);
+ }
+
+ if (var_a3 == 0) {
+ func_80169EFC(&play->state);
+ Scene_SetExitFade(play);
+ } else {
+ func_808354A4(play, var_a3 - 1,
+ SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2);
+ if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) {
+ func_8019F128(NA_SE_OC_TUNAMI);
+ func_801A4058(5);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (this->floorProperty == FLOOR_PROPERTY_12)) {
+ func_8019F128(NA_SE_OC_SECRET_WARP_IN);
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ if (D_801BDAA0) {
+ D_801BDAA0 = false;
+ } else {
+ gHorseIsMounted = true;
+ }
+ }
+ }
+
+ if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) &&
+ ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) &&
+ ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ if (floorType == FLOOR_TYPE_11) {
+ func_8019F128(NA_SE_OC_SECRET_HOLE_OUT);
+ func_801A4058(5);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ } else {
+ func_8085B74C(play);
+ }
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Player_StopHorizontalMovement(this);
+ }
+
+ Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0);
+ this->stateFlags1 |= PLAYER_STATE1_1 | PLAYER_STATE1_20000000;
+ return true;
+ }
+ } else {
+ if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.floorPoly == NULL)) {
+ BgCheck_EntityRaycastFloor7(&play->colCtx, &this->actor.floorPoly, &sp30, &this->actor,
+ &this->actor.world.pos);
+ if (this->actor.floorPoly == NULL) {
+ func_80169EFC(&play->state);
+ return false;
+ }
+ //! FAKE
+ if (1) {}
+ }
+
+ if (!(this->stateFlags1 & PLAYER_STATE1_80000000)) {
+ if (((this->actor.world.pos.y < -4000.0f) ||
+ (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12) ||
+ (this->floorProperty == FLOOR_PROPERTY_13)) &&
+ ((D_80862B18 < 100.0f) || (this->fallDistance > 400))))) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->floorProperty == FLOOR_PROPERTY_5) {
+ func_80169FDC(&play->state);
+ func_808345C8();
+ } else {
+ func_80169EFC(&play->state);
+ }
+ if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
+ gSaveContext.respawnFlag = -5;
+ }
+
+ play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
+ play_sound(NA_SE_OC_ABYSS);
+ } else {
+ if (this->stateFlags3 & PLAYER_STATE3_1000000) {
+ func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish);
+ }
+
+ if (this->floorProperty == FLOOR_PROPERTY_13) {
+ Player_SetAction(play, this, func_808497A0, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ } else {
+ func_80834104(play, this);
+ this->unk_AE8 = 9999;
+ if (this->floorProperty == FLOOR_PROPERTY_5) {
+ this->unk_AE7 = -1;
+ } else {
+ this->unk_AE7 = 1;
+ }
+ }
+ }
+ }
+ }
+
+ this->unk_D68 = this->actor.world.pos.y;
+ }
+ }
+
+ return false;
+}
+
+void Player_TranslateAndRotateY(Player* this, Vec3f* translation, Vec3f* src, Vec3f* dst) {
+ Lib_Vec3f_TranslateAndRotateY(translation, this->actor.shape.rot.y, src, dst);
+}
+
+// Player_GetPosInACertainDirectionFromARadiusAway
+void func_80835BF8(Vec3f* srcPos, s16 rotY, f32 radius, Vec3f* dstPos) {
+ dstPos->x = Math_SinS(rotY) * radius + srcPos->x;
+ dstPos->z = Math_CosS(rotY) * radius + srcPos->z;
+}
+
+Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3f* arg3, s32 elfParams) {
+ Vec3f pos;
+
+ Player_TranslateAndRotateY(this, translation, arg3, &pos);
+
+ return Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, pos.x, pos.y, pos.z, 0, 0, 0, elfParams);
+}
+
+f32 func_80835CD8(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos, CollisionPoly** outPoly, s32* outBgId) {
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, pos);
+ return BgCheck_EntityRaycastFloor5(&play->colCtx, outPoly, outBgId, &this->actor, pos);
+}
+
+f32 func_80835D2C(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos) {
+ CollisionPoly* poly;
+ s32 bgId;
+
+ return func_80835CD8(play, this, arg2, pos, &poly, &bgId);
+}
+
+s32 func_80835D58(PlayState* play, Player* this, Vec3f* arg2, CollisionPoly** outPoly, s32* bgId, Vec3f* posResult) {
+ Vec3f posA;
+ Vec3f posB;
+
+ posA.x = this->actor.world.pos.x;
+ posA.y = this->actor.world.pos.y + arg2->y;
+ posA.z = this->actor.world.pos.z;
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, &posB);
+
+ return BgCheck_EntityLineTest2(&play->colCtx, &posA, &posB, posResult, outPoly, true, false, false, true, bgId,
+ &this->actor);
+}
+
+Vec3f D_8085D100 = { 0.0f, 50.0f, 0.0f };
+
+s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* outBgId) {
+ Vec3f pos;
+ f32 yIntersect = func_80835CD8(play, this, &D_8085D100, &pos, outPoly, outBgId);
+
+ if ((*outBgId == BGCHECK_SCENE) && (fabsf(this->actor.world.pos.y - yIntersect) < 10.0f)) {
+ func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId));
+ return true;
+ }
+ return false;
+}
+
+/**
+ * PLAYER_DOORTYPE_STAIRCASE: DoorSpiral
+ */
+void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) {
+ static Vec3f D_8085D10C = { 20.0f, 0.0f, 20.0f };
+ DoorSpiral* doorStaircase = (DoorSpiral*)door;
+
+ this->currentYaw = doorStaircase->actor.home.rot.y + 0x8000;
+ this->actor.shape.rot.y = this->currentYaw;
+ if (this->linearVelocity <= 0.0f) {
+ this->linearVelocity = 0.1f;
+ }
+ func_80835324(play, this, 50.0f, this->actor.shape.rot.y);
+
+ this->unk_397 = this->doorType;
+ this->unk_AE7 = 0;
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0);
+
+ D_8085D10C.x = (this->doorDirection != 0) ? -400.0f : 400.0f;
+ D_8085D10C.z = 200.0f;
+ Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D10C, &this->unk_3AC);
+
+ doorStaircase->shouldClimb = true;
+
+ func_8082DAD4(this);
+
+ if (this->doorTimer != 0) {
+ this->unk_AE8 = 0;
+ func_8082E438(play, this, func_8082ED20(this));
+ this->skelAnime.endFrame = 0.0f;
+ } else {
+ this->linearVelocity = 0.1f;
+ }
+
+ Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0);
+ this->doorBgCamIndex =
+ play->transitionActors.list[DOOR_GET_TRANSITION_ID(&doorStaircase->actor)].sides[0].bgCamIndex;
+ Actor_DeactivateLens(play);
+ this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG;
+}
+
+/**
+ * PLAYER_DOORTYPE_SLIDING: DoorShutter, BgOpenShutter
+ */
+void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) {
+ SlidingDoorActor* doorSliding = (SlidingDoorActor*)door;
+ Vec3f sp38;
+
+ this->currentYaw = doorSliding->dyna.actor.home.rot.y;
+ if (this->doorDirection > 0) {
+ this->currentYaw -= 0x8000;
+ }
+ this->actor.shape.rot.y = this->currentYaw;
+ if (this->linearVelocity <= 0.0f) {
+ this->linearVelocity = 0.1f;
+ }
+
+ func_80835324(play, this, 50.0f, this->actor.shape.rot.y);
+ this->unk_AE7 = 0;
+ this->unk_397 = this->doorType;
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos);
+
+ func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y,
+ (42.0f - fabsf(sp38.z)) * this->doorDirection, &this->actor.world.pos);
+ func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * 20.0f,
+ &this->unk_3A0);
+ func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * -120.0f,
+ &this->unk_3AC);
+
+ doorSliding->unk_15C = 1;
+ func_8082DAD4(this);
+
+ if (this->doorTimer != 0) {
+ this->unk_AE8 = 0;
+ func_8082E438(play, this, func_8082ED20(this));
+ this->skelAnime.endFrame = 0.0f;
+ } else {
+ this->linearVelocity = 0.1f;
+ }
+
+ if (doorSliding->dyna.actor.category == ACTORCAT_DOOR) {
+ this->doorBgCamIndex = play->transitionActors.list[DOOR_GET_TRANSITION_ID(&doorSliding->dyna.actor)]
+ .sides[this->doorDirection > 0 ? 0 : 1]
+ .bgCamIndex;
+ Actor_DeactivateLens(play);
+ }
+}
+
+// sPlayerOpenDoorLeftAnimPerForm
+PlayerAnimationHeader* D_8085D118[] = {
+ &gPlayerAnim_pg_doorA_open, // PLAYER_FORM_GORON
+ &gPlayerAnim_pz_doorA_open, // PLAYER_FORM_ZORA
+ &gPlayerAnim_pn_doorA_open, // PLAYER_FORM_DEKU
+};
+// sPlayerOpenDoorRightAnimPerForm
+PlayerAnimationHeader* D_8085D124[] = {
+ &gPlayerAnim_pg_doorB_open, // PLAYER_FORM_GORON
+ &gPlayerAnim_pz_doorB_open, // PLAYER_FORM_ZORA
+ &gPlayerAnim_pn_doorB_open, // PLAYER_FORM_DEKU
+};
+
+/**
+ * PLAYER_DOORTYPE_TALKING: EnDoorEtc
+ * PLAYER_DOORTYPE_HANDLE: EnDoor
+ * PLAYER_DOORTYPE_FAKE:
+ * PLAYER_DOORTYPE_PROXIMITY: EnDoor
+ */
+void Player_Door_Knob(PlayState* play, Player* this, Actor* door) {
+ s32 temp = this->transformation - 1;
+ PlayerAnimationHeader* anim;
+ f32 temp_fv0; // sp5C
+ KnobDoorActor* doorHandle = (KnobDoorActor*)door;
+
+ doorHandle->animIndex = this->transformation;
+
+ if (this->doorDirection < 0) {
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_8][this->modelAnimType];
+ } else if (this->transformation == PLAYER_FORM_HUMAN) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_9][this->modelAnimType];
+ } else {
+ anim = D_8085D118[temp];
+ }
+ } else {
+ doorHandle->animIndex += 5;
+
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_10][this->modelAnimType];
+ } else if (this->transformation == PLAYER_FORM_HUMAN) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_11][this->modelAnimType];
+ } else {
+ anim = D_8085D124[temp];
+ }
+ }
+
+ Player_SetAction(play, this, func_8084E034, 0);
+ this->stateFlags2 |= PLAYER_STATE2_800000;
+ func_8082DE14(play, this);
+ if (this->doorDirection < 0) {
+ this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y;
+ } else {
+ this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y - 0x8000;
+ }
+
+ this->currentYaw = this->actor.shape.rot.y;
+ temp_fv0 = this->doorDirection * 22.0f;
+ func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, temp_fv0,
+ &this->actor.world.pos);
+ func_8082EC9C(play, this, anim);
+
+ if (this->doorTimer != 0) {
+ this->skelAnime.endFrame = 0.0f;
+ }
+
+ func_8082DAD4(this);
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200);
+ doorHandle->playOpenAnim = true;
+ if (this->doorType != PLAYER_DOORTYPE_FAKE) {
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f pos;
+ s32 enDoorType = ENDOOR_GET_TYPE(&doorHandle->dyna.actor);
+
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+
+ if (this->actor.category == ACTORCAT_PLAYER) {
+ Actor_DeactivateLens(play);
+ func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, -temp_fv0, &pos);
+ pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f;
+ BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos);
+
+ if (func_8083562C(play, this, poly, BGCHECK_SCENE)) {
+ gSaveContext.entranceSpeed = 2.0f;
+ } else if (enDoorType != ENDOOR_TYPE_7) {
+ Camera* mainCam;
+
+ this->unk_AE7 = 38.0f * D_8085C3E8;
+ mainCam = Play_GetCamera(play, CAM_ID_MAIN);
+
+ Camera_ChangeDoorCam(mainCam, &doorHandle->dyna.actor,
+ play->transitionActors.list[DOOR_GET_TRANSITION_ID(&doorHandle->dyna.actor)]
+ .sides[(this->doorDirection > 0) ? 0 : 1]
+ .bgCamIndex,
+ 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8);
+ }
+ }
+ }
+}
+
+// door stuff
+s32 func_808365DC(Player* this, PlayState* play) {
+ if ((gSaveContext.save.saveInfo.playerData.health != 0) && (this->doorType != PLAYER_DOORTYPE_NONE)) {
+ if ((this->actor.category != ACTORCAT_PLAYER) ||
+ ((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) ||
+ ((this->doorType >= PLAYER_DOORTYPE_HANDLE) && CutsceneManager_IsNext(CS_ID_GLOBAL_DOOR))) &&
+ (!(this->stateFlags1 & PLAYER_STATE1_800) &&
+ (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || (func_8085437C == this->actionFunc) ||
+ (this->doorType == PLAYER_DOORTYPE_STAIRCASE) || (this->doorType == PLAYER_DOORTYPE_PROXIMITY))))) {
+ Actor* doorActor = this->doorActor;
+ Actor* var_v0_3;
+
+ if (this->doorType <= PLAYER_DOORTYPE_TALKING) {
+ Player_TalkWithPlayer(play, doorActor);
+ if (doorActor->textId == 0x1821) {
+ doorActor->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ }
+ return true;
+ }
+
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 0;
+
+ if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) {
+ Player_Door_Staircase(play, this, doorActor);
+ } else if (this->doorType == PLAYER_DOORTYPE_SLIDING) {
+ Player_Door_Sliding(play, this, doorActor);
+ } else {
+ Player_Door_Knob(play, this, doorActor);
+ }
+
+ if (this->actor.category == ACTORCAT_PLAYER) {
+ this->csId = CS_ID_GLOBAL_DOOR;
+ CutsceneManager_Start(this->csId, &this->actor);
+ }
+
+ if (this->actor.category == ACTORCAT_PLAYER) {
+ if ((this->doorType < PLAYER_DOORTYPE_FAKE) && (doorActor->category == ACTORCAT_DOOR) &&
+ ((this->doorType != PLAYER_DOORTYPE_HANDLE) || (ENDOOR_GET_TYPE(doorActor) != ENDOOR_TYPE_7))) {
+ s8 roomNum = play->transitionActors.list[DOOR_GET_TRANSITION_ID(doorActor)]
+ .sides[(this->doorDirection > 0) ? 0 : 1]
+ .room;
+
+ if ((roomNum >= 0) && (roomNum != play->roomCtx.curRoom.num)) {
+ Room_StartRoomTransition(play, &play->roomCtx, roomNum);
+ }
+ }
+ }
+
+ doorActor->room = play->roomCtx.curRoom.num;
+ if (((var_v0_3 = doorActor->child) != NULL) || ((var_v0_3 = doorActor->parent) != NULL)) {
+ var_v0_3->room = play->roomCtx.curRoom.num;
+ }
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void func_80836888(Player* this, PlayState* play) {
+ PlayerAnimationHeader* anim;
+
+ Player_SetAction(play, this, func_80849A9C, 1);
+
+ if (this->unk_B40 < 0.5f) {
+ anim = func_8082EF54(this);
+ this->unk_B40 = 0.0f;
+ } else {
+ anim = func_8082EF9C(this);
+ this->unk_B40 = 1.0f;
+ }
+
+ this->unk_B44 = this->unk_B40;
+ Player_AnimationPlayLoop(play, this, anim);
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_8083692C(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_80849DD0, 1);
+ func_8082E438(play, this, func_8082ED20(this));
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_80836988(Player* this, PlayState* play) {
+ if (func_80123420(this)) {
+ func_80836888(this, play);
+ } else if (func_80123434(this)) {
+ func_8083692C(this, play);
+ } else {
+ func_8085B384(this, play);
+ }
+}
+
+void func_808369F4(Player* this, PlayState* play) {
+ PlayerActionFunc actionFunc;
+
+ if (func_80123420(this)) {
+ actionFunc = func_80849A9C;
+ } else if (func_80123434(this)) {
+ actionFunc = func_80849DD0;
+ } else {
+ actionFunc = func_80849FE0;
+ }
+ Player_SetAction(play, this, actionFunc, 1);
+}
+
+void func_80836A5C(Player* this, PlayState* play) {
+ func_808369F4(this, play);
+ if (func_80123420(this)) {
+ this->unk_AE8 = 1;
+ }
+}
+
+void func_80836A98(Player* this, PlayerAnimationHeader* anim, PlayState* play) {
+ func_80836A5C(this, play);
+ func_8082EC9C(play, this, anim);
+}
+
+void func_80836AD8(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_80857BE8, 0);
+ this->unk_B28 = 0;
+ this->unk_B86[1] = 0;
+ this->unk_AF0[0].x = 0.0f;
+ this->unk_AF0[0].y = 0.0f;
+ this->unk_AF0[0].z = 0.0f;
+ this->unk_B08 = 0.0f;
+ this->unk_B0C = 0.0f;
+ Player_PlaySfx(this, NA_SE_PL_GORON_TO_BALL);
+}
+
+void func_80836B3C(PlayState* play, Player* this, f32 arg2) {
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+
+ if (this->transformation == PLAYER_FORM_GORON) {
+ func_80836AD8(play, this);
+ PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType],
+ 1.5f * D_8085C3E4, 0.0f, 6.0f, ANIMMODE_ONCE, 0.0f);
+ } else {
+ PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType];
+
+ Player_SetAction(play, this, func_8084C6EC, 0);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.25f * D_8085C3E4, arg2, Animation_GetLastFrame(anim),
+ ANIMMODE_ONCE, 0.0f);
+ }
+}
+
+void func_80836C70(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex) {
+ static Vec3f D_8085D130 = { 0, 0, 0 };
+ s32 i;
+
+ for (i = 0; i < 4; i++) {
+ Vec3f velocity;
+
+ velocity.x = Rand_CenteredFloat(4.0f);
+ velocity.y = Rand_ZeroFloat(2.0f);
+ velocity.z = Rand_CenteredFloat(4.0f);
+ D_8085D130.y = -0.2f;
+ EffectSsHahen_Spawn(play, &this->bodyPartsPos[bodyPartIndex], &velocity, &D_8085D130, 0, 10, OBJECT_LINK_NUTS,
+ 16, object_link_nuts_DL_008860);
+ }
+}
+
+void func_80836D8C(Player* this) {
+ this->actor.focus.rot.x = 0;
+ this->actor.focus.rot.z = 0;
+ this->headLimbRot.x = 0;
+ this->headLimbRot.y = 0;
+ this->headLimbRot.z = 0;
+ this->upperLimbRot.x = 0;
+ this->upperLimbRot.y = 0;
+ this->upperLimbRot.z = 0;
+ this->actor.shape.rot.y = this->actor.focus.rot.y;
+ this->currentYaw = this->actor.focus.rot.y;
+}
+
+s32 func_80836DC0(PlayState* play, Player* this) {
+ if ((MREG(48) != 0) || func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
+ Player_SetAction(play, this, func_808561B0, 0);
+ this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000);
+ func_8082E438(play, this, &gPlayerAnim_pn_attack);
+ Player_StopHorizontalMovement(this);
+ func_80836D8C(this);
+ this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
+ this->unk_B48 = -2000.0f;
+ this->actor.shape.shadowScale = 13.0f;
+ func_8082E1F0(this, NA_SE_PL_DEKUNUTS_IN_GRD);
+ return true;
+ }
+
+ return false;
+}
+
+void Player_RequestQuake(PlayState* play, u16 speed, s16 y, s16 duration) {
+ s16 quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3);
+
+ Quake_SetSpeed(quakeIndex, speed);
+ Quake_SetPerturbations(quakeIndex, y, 0, 0, 0);
+ Quake_SetDuration(quakeIndex, duration);
+}
+
+FallImpactInfo sFallImpactInfos[] = {
+ { -8, 180, 40, 100, NA_SE_VO_LI_LAND_DAMAGE_S },
+ { -16, 255, 140, 150, NA_SE_VO_LI_LAND_DAMAGE_S },
+};
+
+// Player_FallAgainstTheFloor, Player_LetTheBodiesHitTheFloor, Player_ImpactFloor, Player_ProcessFallDamage,
+// Player_DamageOnFloorImpact, Player_CalculateFallDamage
+s32 func_80836F10(PlayState* play, Player* this) {
+ s32 fallDistance;
+
+ if ((sPlayerCurrentFloorType == FLOOR_TYPE_6) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) ||
+ (this->csMode != PLAYER_CSMODE_0)) {
+ fallDistance = 0;
+ } else {
+ fallDistance = this->fallDistance;
+ }
+
+ Math_StepToF(&this->linearVelocity, 0.0f, 1.0f);
+ this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000);
+
+ // Height enough for fall damage
+ if (fallDistance >= 400) {
+ s32 index;
+ FallImpactInfo* entry;
+
+ if (this->fallDistance < 800) {
+ // small fall
+ index = 0;
+ } else {
+ // big fall
+ index = 1;
+ }
+
+ Player_PlaySfx(this, NA_SE_PL_BODY_HIT);
+
+ entry = &sFallImpactInfos[index];
+ Player_AnimSfx_PlayVoice(this, entry->sfxId);
+
+ if (Player_InflictDamage(play, entry->damage)) {
+ // Player's dead
+ return -1;
+ }
+
+ func_80833998(this, 40);
+ Player_RequestQuake(play, 32967, 2, 30);
+ Player_RequestRumble(play, this, entry->sourceIntensity, entry->decayTimer, entry->decayStep, SQ(0));
+
+ return index + 1;
+ }
+
+ // Tiny fall, won't damage player
+ if (fallDistance > 200) {
+ fallDistance = fallDistance * 2;
+ fallDistance = CLAMP_MAX(fallDistance, 255);
+
+ Player_RequestRumble(play, this, fallDistance, fallDistance * 0.1f, fallDistance, SQ(0));
+ if (sPlayerCurrentFloorType == FLOOR_TYPE_6) {
+ //! @bug unreachable code: When sPlayerCurrentFloorType is equal to FLOOR_TYPE_6 then fallDistance is
+ //! ignored (set to zero), so the previous check based on said variable will always fail, producing this
+ //! current check to always be false.
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END);
+ }
+ }
+
+ Player_AnimSfx_PlayFloorLand(this);
+ return 0;
+}
+
+s32 func_808370D4(PlayState* play, Player* this) {
+ if ((this->fallDistance < 800) && (this->unk_AE3[this->unk_ADE] == 0) && !(this->stateFlags1 & PLAYER_STATE1_800)) {
+ func_80836B3C(play, this, 0.0f);
+
+ return true;
+ }
+ return false;
+}
+
+void func_80837134(PlayState* play, Player* this) {
+ PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType];
+ s32 temp_v0_2; // sp28
+
+ this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000);
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ s32 var_v1 = false;
+
+ if ((this->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) ||
+ (this->skelAnime.animation == &gPlayerAnim_pn_kakkufinish)) {
+ func_80836C70(play, this, PLAYER_BODYPART_LEFT_HAND);
+ func_80836C70(play, this, PLAYER_BODYPART_RIGHT_HAND);
+ var_v1 = true;
+ }
+
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && func_80836DC0(play, this)) {
+ return;
+ }
+
+ if (var_v1) {
+ func_80836A98(this, anim, play);
+ Player_AnimSfx_PlayFloorLand(this);
+ return;
+ }
+ } else if (this->stateFlags2 & PLAYER_STATE2_80000) {
+ if (func_80123420(this)) {
+ anim = D_8085C2A4[this->unk_AE7].unk_8;
+ } else {
+ anim = D_8085C2A4[this->unk_AE7].unk_4;
+ }
+ } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) {
+ anim = &gPlayerAnim_link_normal_run_jump_end;
+ } else if (func_80123420(this)) {
+ anim = &gPlayerAnim_link_anchor_landingR;
+ func_8082FC60(this);
+ } else if (this->fallDistance <= 80) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType];
+ } else if (func_808370D4(play, this)) {
+ return;
+ }
+
+ temp_v0_2 = func_80836F10(play, this);
+ if (temp_v0_2 > 0) { // Player suffered damage because of this fall
+ func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType], play);
+ this->skelAnime.endFrame = 8.0f;
+
+ if (temp_v0_2 == 1) {
+ this->unk_AE8 = 0xA;
+ } else {
+ this->unk_AE8 = 0x14;
+ }
+ } else if (temp_v0_2 == 0) {
+ func_80836A98(this, anim, play);
+ }
+}
+
+void func_808373A4(PlayState* play, Player* this) {
+ func_8082E438(play, this, &gPlayerAnim_pn_attack);
+ this->unk_B10[0] = 20000.0f;
+ this->unk_B10[1] = 0x30000;
+ Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_ATTACK);
+}
+
+s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) {
+ PlayerAnimationHeader* anim;
+ f32 speed;
+ s16 yawDiff = this->currentYaw - this->actor.shape.rot.y;
+
+ if ((IREG(66) / 100.0f) < this->linearVelocity) {
+ speed = IREG(67) / 100.0f;
+ } else {
+ speed = (IREG(68) / 100.0f + (IREG(69) * this->linearVelocity) / 1000.0f);
+
+ if ((this->transformation == PLAYER_FORM_DEKU) && (speed < 8.0f)) {
+ speed = 8.0f;
+ } else if (speed < 5.0f) {
+ speed = 5.0f;
+ }
+ }
+
+ if ((ABS_ALT(yawDiff) >= 0x1000) || (this->linearVelocity <= 4.0f)) {
+ anim = &gPlayerAnim_link_normal_jump;
+ } else {
+ s32 var_v1;
+
+ if ((this->transformation != PLAYER_FORM_DEKU) &&
+ (((sPlayerPrevFloorProperty == FLOOR_PROPERTY_1)) || (sPlayerPrevFloorProperty == FLOOR_PROPERTY_2))) {
+ if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_1) {
+ var_v1 = 4;
+ } else {
+ var_v1 = 5;
+ }
+
+ func_80834D50(play, this, D_8085C2A4[var_v1].unk_0, speed, ((var_v1 == 4) ? NA_SE_VO_LI_SWORD_N : sfxId));
+ this->unk_AE8 = -1;
+ this->stateFlags2 |= PLAYER_STATE2_80000;
+ this->unk_AE7 = var_v1;
+ return true;
+ }
+ anim = &gPlayerAnim_link_normal_run_jump;
+ }
+
+ // Deku hopping
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ speed *= 0.3f + ((5 - this->remainingHopsCounter) * 0.18f);
+ if (speed < 4.0f) {
+ speed = 4.0f;
+ }
+
+ if ((this->actor.depthInWater > 0.0f) && (this->remainingHopsCounter != 0)) {
+ this->actor.world.pos.y += this->actor.depthInWater;
+ func_80834D50(play, this, anim, speed, NA_SE_NONE);
+ this->unk_AE8 = 1;
+ this->stateFlags3 |= PLAYER_STATE3_200000;
+ Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter));
+ Player_AnimSfx_PlayVoice(this, sfxId);
+ this->remainingHopsCounter--;
+ if (this->remainingHopsCounter == 0) {
+ this->stateFlags2 |= PLAYER_STATE2_80000;
+ func_808373A4(play, this);
+ }
+
+ return true;
+ }
+
+ if (this->actor.velocity.y > 0.0f) {
+ sfxId = NA_SE_NONE;
+ }
+ }
+
+ func_80834D50(play, this, anim, speed, sfxId);
+ this->unk_AE8 = 1;
+
+ return true;
+}
+
+s32 func_80837730(PlayState* play, Player* this, f32 arg2, s32 scale) {
+ f32 sp3C = fabsf(arg2);
+
+ if (sp3C > 2.0f) {
+ WaterBox* waterBox;
+ f32 sp34;
+ Vec3f pos;
+
+ Math_Vec3f_Copy(&pos, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]);
+ pos.y += 20.0f;
+ if (WaterBox_GetSurface1(play, &play->colCtx, pos.x, pos.z, &pos.y, &waterBox)) {
+ sp34 = pos.y - this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y;
+ if ((sp34 > -2.0f) && (sp34 < 100.0f)) {
+ EffectSsGSplash_Spawn(play, &pos, NULL, NULL,
+ (sp3C <= 10.0f) ? EFFSSGSPLASH_TYPE_0 : EFFSSGSPLASH_TYPE_1, scale);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 func_8083784C(Player* this) {
+ if (this->actor.velocity.y < 0.0f) {
+ if ((this->actor.depthInWater > 0.0f) &&
+ ((this->ageProperties->unk_2C - this->actor.depthInWater) < D_80862B18)) {
+ if ((this->remainingHopsCounter != 0) && (gSaveContext.save.saveInfo.playerData.health != 0) &&
+ !(this->stateFlags1 & PLAYER_STATE1_4000000)) {
+ if (((this->talkActor == NULL) || !(this->talkActor->flags & ACTOR_FLAG_10000))) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+void func_808378FC(PlayState* play, Player* this) {
+ if (!func_8082FC24(this)) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ }
+
+ if (func_8083784C(this) && func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP)) {
+ func_80837730(play, this, 20.0f, this->actor.velocity.y * 50.0f);
+ }
+}
+
+s32 func_8083798C(Player* this) {
+ return (this->interactRangeActor != NULL) && (this->heldActor == NULL) &&
+ (this->transformation != PLAYER_FORM_DEKU);
+}
+
+void func_808379C0(PlayState* play, Player* this) {
+ if (func_8083798C(this)) {
+ Actor* interactRangeActor = this->interactRangeActor;
+ PlayerAnimationHeader* anim;
+
+ if ((interactRangeActor->id == ACTOR_EN_ISHI) && (ENISHI_GET_1(interactRangeActor) != 0)) {
+ Player_SetAction(play, this, func_8084E334, 0);
+ anim = &gPlayerAnim_link_silver_carry;
+ } else if (((interactRangeActor->id == ACTOR_EN_BOMBF) || (interactRangeActor->id == ACTOR_EN_KUSA) ||
+ (interactRangeActor->id == ACTOR_EN_KUSA2) || (interactRangeActor->id == ACTOR_OBJ_GRASS_CARRY)) &&
+ (Player_GetStrength() <= PLAYER_STRENGTH_DEKU)) {
+ Player_SetAction(play, this, func_8084E4E4, 0);
+ anim = &gPlayerAnim_link_normal_nocarry_free;
+
+ this->actor.world.pos.x =
+ (Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x;
+ this->actor.world.pos.z =
+ (Math_CosS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.z;
+
+ this->currentYaw = this->actor.shape.rot.y = interactRangeActor->yawTowardsPlayer + 0x8000;
+ } else {
+ Player_SetAction(play, this, func_8084E25C, 0);
+ anim = D_8085BE84[PLAYER_ANIMGROUP_12][this->modelAnimType];
+ }
+
+ Player_AnimationPlayOnce(play, this, anim);
+ } else {
+ func_80836988(this, play);
+ this->stateFlags1 &= ~PLAYER_STATE1_800;
+ }
+}
+
+void func_80837B60(PlayState* play, Player* this) {
+ func_8083172C(play, this, func_8084E980, 0);
+
+ this->exchangeItemId = PLAYER_IA_NONE;
+ this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000);
+ if (this->actor.textId != 0) {
+ Message_StartTextbox(play, this->actor.textId, this->talkActor);
+ }
+ this->targetedActor = this->talkActor;
+}
+
+void func_80837BD0(PlayState* play, Player* this) {
+ func_8083172C(play, this, func_8084FE7C, 0);
+}
+
+void func_80837BF8(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_8084ED9C, 0);
+}
+
+void func_80837C20(PlayState* play, Player* this) {
+ s32 sp1C = this->unk_AE8;
+ s32 sp18 = this->unk_AE7;
+
+ func_8083172C(play, this, func_8084F4E8, 0);
+ this->actor.velocity.y = 0.0f;
+
+ this->unk_AE8 = sp1C;
+ this->unk_AE7 = sp18;
+}
+
+void func_80837C78(PlayState* play, Player* this) {
+ func_8083172C(play, this, func_80852C04, 0);
+ this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000);
+
+ if (this->getItemId == GI_HEART_CONTAINER) {
+ this->unk_AE8 = 20;
+ } else if (this->getItemId >= GI_NONE) {
+ this->unk_AE8 = 1;
+ } else {
+ this->getItemId = -this->getItemId;
+ }
+}
+
+void func_80837CEC(PlayState* play, Player* this, CollisionPoly* arg2, f32 arg3, PlayerAnimationHeader* anim) {
+ f32 nx = COLPOLY_GET_NORMAL(arg2->normal.x);
+ f32 nz = COLPOLY_GET_NORMAL(arg2->normal.z);
+
+ Player_SetAction(play, this, func_8084F1B8, 0);
+ func_8082DE50(play, this);
+ Player_AnimationPlayOnce(play, this, anim);
+
+ this->actor.world.pos.x -= (arg3 + 1.0f) * nx;
+ this->actor.world.pos.z -= (arg3 + 1.0f) * nz;
+ this->actor.shape.rot.y = Math_Atan2S_XY(nz, nx);
+ this->currentYaw = this->actor.shape.rot.y;
+
+ func_8082DAD4(this);
+ this->actor.velocity.y = 0.0f;
+ func_8082E6D0(this);
+}
+
+s32 func_80837DEC(Player* this, PlayState* play) {
+ if ((this->transformation != PLAYER_FORM_GORON) && (this->transformation != PLAYER_FORM_DEKU) &&
+ (this->actor.depthInWater < -80.0f)) {
+ if ((ABS_ALT(this->unk_B6C)) < 0xAAA && (ABS_ALT(this->unk_B6E) < 0xAAA)) {
+ CollisionPoly* entityPoly;
+ CollisionPoly* sp90;
+ s32 entityBgId;
+ s32 sp88;
+ Vec3f sp7C;
+ Vec3f sp70;
+ f32 temp_fv1_2;
+ f32 entityNormalX;
+ f32 entityNormalY;
+ f32 entityNormalZ;
+ f32 temp_fv0_2;
+ f32 var_fv1;
+
+ sp7C.x = this->actor.prevPos.x - this->actor.world.pos.x;
+ sp7C.z = this->actor.prevPos.z - this->actor.world.pos.z;
+
+ var_fv1 = sqrtf(SQXZ(sp7C));
+ if (var_fv1 != 0.0f) {
+ var_fv1 = 5.0f / var_fv1;
+ } else {
+ var_fv1 = 0.0f;
+ }
+
+ sp7C.x = this->actor.prevPos.x + (sp7C.x * var_fv1);
+ sp7C.y = this->actor.world.pos.y;
+ sp7C.z = this->actor.prevPos.z + (sp7C.z * var_fv1);
+
+ if (BgCheck_EntityLineTest2(&play->colCtx, &this->actor.world.pos, &sp7C, &sp70, &entityPoly, true, false,
+ false, true, &entityBgId, &this->actor)) {
+ if (ABS_ALT(entityPoly->normal.y) < 0x258) {
+ s32 var_v1_2; // sp54
+
+ entityNormalX = COLPOLY_GET_NORMAL(entityPoly->normal.x);
+ entityNormalY = COLPOLY_GET_NORMAL(entityPoly->normal.y);
+ entityNormalZ = COLPOLY_GET_NORMAL(entityPoly->normal.z);
+
+ temp_fv0_2 = Math3D_UDistPlaneToPos(entityNormalX, entityNormalY, entityNormalZ, entityPoly->dist,
+ &this->actor.world.pos);
+
+ sp70.x = this->actor.world.pos.x - ((temp_fv0_2 + 1.0f) * entityNormalX);
+ sp70.z = this->actor.world.pos.z - ((temp_fv0_2 + 1.0f) * entityNormalZ);
+ sp70.y = this->actor.world.pos.y + 268 * 0.1f;
+
+ temp_fv1_2 = this->actor.world.pos.y -
+ BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp88, &this->actor, &sp70);
+ if ((temp_fv1_2 >= -11.0f) && (temp_fv1_2 <= 0.0f)) {
+ var_v1_2 = sPlayerPrevFloorProperty == FLOOR_PROPERTY_6;
+ if (!var_v1_2) {
+ if (SurfaceType_GetWallFlags(&play->colCtx, entityPoly, entityBgId) & WALL_FLAG_3) {
+ var_v1_2 = true;
+ }
+ }
+
+ func_80837CEC(play, this, entityPoly, temp_fv0_2,
+ var_v1_2 ? &gPlayerAnim_link_normal_Fclimb_startB
+ : &gPlayerAnim_link_normal_fall);
+ if (var_v1_2) {
+ func_80832558(play, this, func_80837C20);
+
+ this->actor.shape.rot.y = this->currentYaw += 0x8000;
+ this->stateFlags1 |= PLAYER_STATE1_200000;
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 |
+ ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+ this->unk_AE8 = -1;
+ this->unk_AE7 = var_v1_2;
+ } else {
+ this->stateFlags1 |= PLAYER_STATE1_2000;
+ this->stateFlags1 &= ~PLAYER_STATE1_20000;
+ }
+
+ Player_PlaySfx(this, NA_SE_PL_SLIPDOWN);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG);
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+void func_808381A0(Player* this, PlayerAnimationHeader* anim, PlayState* play) {
+ Player_SetAction(play, this, func_8084F3DC, 0);
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f);
+}
+
+Vec3f D_8085D148 = { 0.0f, 50.0f, 0.0f };
+
+s32 func_808381F8(PlayState* play, Player* this) {
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f pos;
+ f32 yIntersect;
+
+ Player_TranslateAndRotateY(this, &this->actor.prevPos, &D_8085D148, &pos);
+
+ yIntersect = BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos);
+
+ return fabsf(yIntersect - this->actor.world.pos.y) < 10.0f;
+}
+
+Vec3f D_8085D154 = { 0.0f, 0.0f, 100.0f };
+
+void func_8083827C(Player* this, PlayState* play) {
+ s32 temp_t0; // sp64
+ CollisionPoly* sp60;
+ s32 sp5C;
+ WaterBox* sp58;
+ Vec3f sp4C;
+ f32 sp48;
+ f32 sp44;
+
+ this->fallDistance = this->fallStartHeight - (s32)this->actor.world.pos.y;
+ if (!(this->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) &&
+ ((this->stateFlags1 & PLAYER_STATE1_80000000) ||
+ !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ if (func_80835428(play, this)) {
+ return;
+ }
+
+ if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_8) {
+ this->actor.world.pos.x = this->actor.prevPos.x;
+ this->actor.world.pos.z = this->actor.prevPos.z;
+ return;
+ }
+
+ if ((this->stateFlags3 & PLAYER_STATE3_2) || (this->skelAnime.moveFlags & ANIM_FLAG_80)) {
+ return;
+ }
+
+ if ((func_8084C16C == this->actionFunc) || (func_8084C94C == this->actionFunc) ||
+ (func_8084CA24 == this->actionFunc) || (func_80857BE8 == this->actionFunc) ||
+ (func_808546D0 == this->actionFunc) || (func_80854800 == this->actionFunc)) {
+ return;
+ }
+
+ if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_7) || (this->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
+ ((this->skelAnime.moveFlags & ANIM_FLAG_8) && func_808381F8(play, this))) {
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
+ if (this->linearVelocity > 0.0f) {
+ Player_StopHorizontalMovement(this);
+ }
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH;
+ return;
+ }
+
+ temp_t0 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y);
+ Player_SetAction(play, this, func_8084C16C, 1);
+ func_8082DD2C(play, this);
+
+ this->floorSfxOffset = this->unk_D66;
+ if ((this->transformation != PLAYER_FORM_GORON) &&
+ ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0)) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ if ((sPlayerPrevFloorProperty != FLOOR_PROPERTY_6) && (sPlayerPrevFloorProperty != FLOOR_PROPERTY_9) &&
+ (D_80862B18 > 20.0f) && (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0)) {
+ if ((ABS_ALT(temp_t0) < 0x2000) && (this->linearVelocity > 3.0f)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800)) {
+ if (((this->transformation == PLAYER_FORM_ZORA) &&
+ CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
+ ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_11) &&
+ (this->transformation != PLAYER_FORM_GORON) &&
+ (this->transformation != PLAYER_FORM_DEKU))) {
+
+ sp48 = func_80835CD8(play, this, &D_8085D154, &sp4C, &sp60, &sp5C);
+ sp44 = this->actor.world.pos.y;
+
+ if (WaterBox_GetSurface1(play, &play->colCtx, sp4C.x, sp4C.z, &sp44, &sp58) &&
+ ((sp44 - sp48) > 50.0f)) {
+ func_80834DB8(this, &gPlayerAnim_link_normal_run_jump_water_fall, 6.0f, play);
+ Player_SetAction(play, this, func_8084C94C, 0);
+ return;
+ }
+ }
+ }
+ func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP);
+ return;
+ }
+ }
+ }
+ }
+
+ // Checking if the ledge is tall enough for Player to hang from
+ if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_9) || (D_80862B18 <= this->ageProperties->unk_34) ||
+ !func_80837DEC(this, play)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait);
+ }
+ } else {
+ this->fallStartHeight = this->actor.world.pos.y;
+ this->remainingHopsCounter = 5;
+ }
+}
+
+s32 func_8083868C(PlayState* play, Player* this) {
+ s32 camMode;
+ Camera* camera;
+
+ if (this->unk_AA5 == PLAYER_UNKAA5_3) {
+ if (func_800B7118(this)) {
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ camMode = CAM_MODE_SLINGSHOT;
+ } else if (this->transformation == PLAYER_FORM_DEKU) {
+ camMode = CAM_MODE_DEKUSHOOT;
+ } else {
+ camMode = CAM_MODE_BOWARROW;
+ }
+ } else {
+ camMode = CAM_MODE_ZORAFIN;
+ }
+ } else {
+ camMode = CAM_MODE_FIRSTPERSON;
+ }
+
+ camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN)
+ : Play_GetCamera(play, ((EnTest3*)this)->subCamId);
+
+ return Camera_ChangeMode(camera, camMode);
+}
+
+void Player_StopCutscene(Player* this) {
+ if (this->csId > CS_ID_NONE) {
+ CutsceneManager_Stop(this->csId);
+ this->csId = CS_ID_NONE;
+ }
+}
+
+s32 func_808387A0(PlayState* play, Player* this) {
+ if (this->unk_AA5 == PLAYER_UNKAA5_4) {
+ Player_StopCutscene(this);
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
+ Player_SetAction(play, this, func_8085B08C, 0);
+ if (this->doorBgCamIndex != 0) {
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ }
+ func_8082DC38(this);
+
+ return true;
+ }
+ return false;
+}
+
+void func_80838830(Player* this, s16 objectId) {
+ s32 pad[2];
+
+ if (objectId != OBJECT_UNSET_0) {
+ this->giObjectLoading = true;
+ osCreateMesgQueue(&this->giObjectLoadQueue, &this->giObjectLoadMsg, 1);
+ DmaMgr_SendRequestImpl(&this->giObjectDmaRequest, this->giObjectSegment, gObjectTable[objectId].vromStart,
+ gObjectTable[objectId].vromEnd - gObjectTable[objectId].vromStart, 0,
+ &this->giObjectLoadQueue, NULL);
+ }
+}
+
+PlayerAnimationHeader* D_8085D160[PLAYER_FORM_MAX] = {
+ &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_FIERCE_DEITY
+ &gPlayerAnim_pg_maskoffstart, // PLAYER_FORM_GORON
+ &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_ZORA
+ &gPlayerAnim_pn_maskoffstart, // PLAYER_FORM_DEKU
+ &gPlayerAnim_cl_setmask, // PLAYER_FORM_HUMAN
+};
+
+void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerForm) {
+ func_8082DE50(play, this);
+ func_80831760(play, this, func_808553F4, 0);
+ func_8082E4A4(play, this, D_8085D160[this->transformation]);
+ gSaveContext.save.playerForm = playerForm;
+ this->stateFlags1 |= PLAYER_STATE1_2;
+
+ D_80862B50 = play->envCtx.lightSettings;
+ this->actor.velocity.y = 0.0f;
+ Actor_DeactivateLens(play);
+}
+
+void func_808389BC(PlayState* play, Player* this) {
+ func_80831760(play, this, func_80855AF4, 0);
+ func_8082E4A4(play, this, &gPlayerAnim_cl_setmask);
+ this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000);
+ func_8082DAD4(this);
+}
+
+void func_80838A20(PlayState* play, Player* this) {
+ func_80831760(play, this, func_80855B9C, 0);
+ func_8082DB90(play, this, &gPlayerAnim_cl_maskoff);
+ this->currentMask = PLAYER_MASK_NONE;
+ this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000);
+ func_8082DAD4(this);
+ Magic_Reset(play);
+}
+
+u8 sPlayerMass[PLAYER_FORM_MAX] = {
+ 100, // PLAYER_FORM_FIERCE_DEITY
+ 200, // PLAYER_FORM_GORON
+ 80, // PLAYER_FORM_ZORA
+ 20, // PLAYER_FORM_DEKU
+ 50, // PLAYER_FORM_HUMAN
+};
+
+PlayerAnimationHeader* D_8085D17C[PLAYER_FORM_MAX] = {
+ &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_FIERCE_DEITY
+ &gPlayerAnim_pg_gakkistart, // PLAYER_FORM_GORON
+ &gPlayerAnim_pz_gakkistart, // PLAYER_FORM_ZORA
+ &gPlayerAnim_pn_gakkistart, // PLAYER_FORM_DEKU
+ &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_HUMAN
+};
+PlayerAnimationHeader* D_8085D190[PLAYER_FORM_MAX] = {
+ &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_FIERCE_DEITY
+ &gPlayerAnim_pg_gakkiplay, // PLAYER_FORM_GORON
+ &gPlayerAnim_pz_gakkiplay, // PLAYER_FORM_ZORA
+ &gPlayerAnim_pn_gakkiplay, // PLAYER_FORM_DEKU
+ &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_HUMAN
+};
+
+u8 D_8085D1A4[PLAYER_IA_MAX] = {
+ GI_NONE, // PLAYER_IA_NONE
+ GI_NONE, // PLAYER_IA_LAST_USED
+ GI_NONE, // PLAYER_IA_FISHING_ROD
+ GI_SWORD_KOKIRI, // PLAYER_IA_SWORD_KOKIRI
+ GI_SWORD_RAZOR, // PLAYER_IA_SWORD_RAZOR
+ GI_SWORD_GILDED, // PLAYER_IA_SWORD_GILDED
+ GI_SWORD_GREAT_FAIRY, // PLAYER_IA_SWORD_TWO_HANDED
+ GI_STICKS_1, // PLAYER_IA_STICK
+ GI_SWORD_KOKIRI, // PLAYER_IA_ZORA_FINS
+ GI_QUIVER_30, // PLAYER_IA_BOW
+ GI_ARROW_FIRE, // PLAYER_IA_BOW_FIRE
+ GI_ARROW_ICE, // PLAYER_IA_BOW_ICE
+ GI_ARROW_LIGHT, // PLAYER_IA_BOW_LIGHT
+ GI_HOOKSHOT, // PLAYER_IA_HOOKSHOT
+ GI_BOMBS_1, // PLAYER_IA_BOMB
+ GI_POWDER_KEG, // PLAYER_IA_POWDER_KEG
+ GI_BOMBCHUS_10, // PLAYER_IA_BOMBCHU
+ GI_40, // PLAYER_IA_11
+ GI_NUTS_1, // PLAYER_IA_NUT
+ GI_PICTO_BOX, // PLAYER_IA_PICTO_BOX
+ GI_OCARINA, // PLAYER_IA_OCARINA
+ GI_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY
+ GI_FISH, // PLAYER_IA_BOTTLE_FISH
+ GI_75, // PLAYER_IA_BOTTLE_SPRING_WATER
+ GI_ICE_TRAP, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER
+ GI_ZORA_EGG, // PLAYER_IA_BOTTLE_ZORA_EGG
+ GI_GOLD_DUST, // PLAYER_IA_BOTTLE_DEKU_PRINCESS
+ GI_6C, // PLAYER_IA_BOTTLE_GOLD_DUST
+ GI_SEAHORSE, // PLAYER_IA_BOTTLE_1C
+ GI_MUSHROOM, // PLAYER_IA_BOTTLE_SEAHORSE
+ GI_HYLIAN_LOACH, // PLAYER_IA_BOTTLE_MUSHROOM
+ GI_DEKU_PRINCESS, // PLAYER_IA_BOTTLE_HYLIAN_LOACH
+ GI_BUG, // PLAYER_IA_BOTTLE_BUG
+ GI_POE, // PLAYER_IA_BOTTLE_POE
+ GI_BIG_POE, // PLAYER_IA_BOTTLE_BIG_POE
+ GI_POTION_RED, // PLAYER_IA_BOTTLE_POTION_RED
+ GI_POTION_BLUE, // PLAYER_IA_BOTTLE_POTION_BLUE
+ GI_POTION_GREEN, // PLAYER_IA_BOTTLE_POTION_GREEN
+ GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK
+ GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK_HALF
+ GI_CHATEAU, // PLAYER_IA_BOTTLE_CHATEAU
+ GI_FAIRY, // PLAYER_IA_BOTTLE_FAIRY
+ GI_MOON_TEAR, // PLAYER_IA_MOON_TEAR
+ GI_DEED_LAND, // PLAYER_IA_DEED_LAND
+ GI_ROOM_KEY, // PLAYER_IA_ROOM_KEY
+ GI_LETTER_TO_KAFEI, // PLAYER_IA_LETTER_TO_KAFEI
+ GI_MAGIC_BEANS, // PLAYER_IA_MAGIC_BEANS
+ GI_DEED_SWAMP, // PLAYER_IA_DEED_SWAMP
+ GI_DEED_MOUNTAIN, // PLAYER_IA_DEED_MOUNTAIN
+ GI_DEED_OCEAN, // PLAYER_IA_DEED_OCEAN
+ GI_MOON_TEAR, // PLAYER_IA_32
+ GI_LETTER_TO_MAMA, // PLAYER_IA_LETTER_MAMA
+ GI_A7, // PLAYER_IA_34
+ GI_A8, // PLAYER_IA_35
+ GI_PENDANT_OF_MEMORIES, // PLAYER_IA_PENDANT_OF_MEMORIES
+ GI_PENDANT_OF_MEMORIES, // PLAYER_IA_37
+ GI_PENDANT_OF_MEMORIES, // PLAYER_IA_38
+ GI_PENDANT_OF_MEMORIES, // PLAYER_IA_39
+ GI_MASK_TRUTH, // PLAYER_IA_MASK_TRUTH
+ GI_MASK_KAFEIS_MASK, // PLAYER_IA_MASK_KAFEIS_MASK
+ GI_MASK_ALL_NIGHT, // PLAYER_IA_MASK_ALL_NIGHT
+ GI_MASK_BUNNY, // PLAYER_IA_MASK_BUNNY
+ GI_MASK_KEATON, // PLAYER_IA_MASK_KEATON
+ GI_MASK_GARO, // PLAYER_IA_MASK_GARO
+ GI_MASK_ROMANI, // PLAYER_IA_MASK_ROMANI
+ GI_MASK_CIRCUS_LEADER, // PLAYER_IA_MASK_CIRCUS_LEADER
+ GI_MASK_POSTMAN, // PLAYER_IA_MASK_POSTMAN
+ GI_MASK_COUPLE, // PLAYER_IA_MASK_COUPLE
+ GI_MASK_GREAT_FAIRY, // PLAYER_IA_MASK_GREAT_FAIRY
+ GI_MASK_GIBDO, // PLAYER_IA_MASK_GIBDO
+ GI_MASK_DON_GERO, // PLAYER_IA_MASK_DON_GERO
+ GI_MASK_KAMARO, // PLAYER_IA_MASK_KAMARO
+ GI_MASK_CAPTAIN, // PLAYER_IA_MASK_CAPTAIN
+ GI_MASK_STONE, // PLAYER_IA_MASK_STONE
+ GI_MASK_BREMEN, // PLAYER_IA_MASK_BREMEN
+ GI_MASK_BLAST, // PLAYER_IA_MASK_BLAST
+ GI_MASK_SCENTS, // PLAYER_IA_MASK_SCENTS
+ GI_MASK_GIANT, // PLAYER_IA_MASK_GIANT
+ GI_MASK_FIERCE_DEITY, // PLAYER_IA_MASK_FIERCE_DEITY
+ GI_MASK_GORON, // PLAYER_IA_MASK_GORON
+ GI_MASK_ZORA, // PLAYER_IA_MASK_ZORA
+ GI_MASK_DEKU, // PLAYER_IA_MASK_DEKU
+ GI_LENS, // PLAYER_IA_LENS
+};
+
+PlayerAnimationHeader* D_8085D1F8[] = {
+ &gPlayerAnim_link_normal_give_other,
+ &gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here"
+};
+
+s32 func_80838A90(Player* this, PlayState* play) {
+ PlayerBottle bottleAction;
+
+ if (this->unk_AA5 != PLAYER_UNKAA5_0) {
+ if (!(this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) &&
+ !(this->stateFlags1 & PLAYER_STATE1_8000000) && !(this->stateFlags1 & PLAYER_STATE1_800000) &&
+ !(this->stateFlags3 & PLAYER_STATE3_8) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) {
+ Player_StopCutscene(this);
+ func_80833AA0(this, play);
+ return true;
+ }
+ if (!func_808387A0(play, this)) {
+ if (this->unk_AA5 == PLAYER_UNKAA5_5) {
+ if ((this->itemAction >= PLAYER_IA_MASK_MIN) && (this->itemAction <= PLAYER_IA_MASK_MAX)) {
+ PlayerMask maskId = GET_MASK_FROM_IA(this->itemAction);
+
+ this->prevMask = this->currentMask;
+ if ((u32)(maskId == this->currentMask) || (this->itemAction < PLAYER_IA_MASK_GIANT) ||
+ ((this->itemAction == PLAYER_IA_MASK_GIANT) && (this->transformation != PLAYER_FORM_HUMAN))) {
+ if (maskId == this->currentMask) {
+ this->currentMask = PLAYER_MASK_NONE;
+ } else {
+ this->currentMask = maskId;
+ }
+
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ func_80838A20(play, this);
+ return true;
+ }
+
+ func_808388B8(play, this, PLAYER_FORM_HUMAN);
+ } else {
+ this->currentMask = maskId;
+ if (this->currentMask == PLAYER_MASK_GIANT) {
+ func_808389BC(play, this);
+ return true;
+ }
+ func_808388B8(play, this, this->itemAction - PLAYER_IA_MASK_FIERCE_DEITY);
+ }
+ gSaveContext.save.equippedMask = this->currentMask;
+ } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) ||
+ (this->itemAction == PLAYER_IA_PICTO_BOX) ||
+ ((this->itemAction != this->unk_B2B) &&
+ ((this->itemAction == PLAYER_IA_BOTTLE_BIG_POE) ||
+ ((this->itemAction >= PLAYER_IA_BOTTLE_ZORA_EGG) &&
+ (this->itemAction <= PLAYER_IA_BOTTLE_HYLIAN_LOACH)) ||
+ (this->itemAction > PLAYER_IA_BOTTLE_FAIRY) ||
+ ((this->talkActor != NULL) && (this->exchangeItemId > PLAYER_IA_NONE) &&
+ (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) &&
+ (this->itemAction == PLAYER_IA_MAGIC_BEANS)) ||
+ ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) &&
+ (Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE))))))) {
+ Actor* talkActor;
+ s32 heldItemTemp = this->itemAction;
+
+ Player_StopCutscene(this);
+ this->itemAction = PLAYER_IA_NONE;
+ func_80831760(play, this, func_80853A5C, 0);
+ talkActor = this->talkActor;
+ this->itemAction = heldItemTemp;
+ this->csId = CS_ID_NONE;
+
+ if ((talkActor != NULL) && (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) &&
+ (this->itemAction == PLAYER_IA_MAGIC_BEANS)) ||
+ ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) &&
+ (this->exchangeItemId > PLAYER_IA_NONE)))) {
+ this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_40);
+ if (this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) {
+ Inventory_ChangeAmmo(ITEM_MAGIC_BEANS, -1);
+ func_80831760(play, this, func_8084B4A8, 0);
+ this->currentYaw = talkActor->yawTowardsPlayer + 0x8000;
+ this->actor.shape.rot.y = this->currentYaw;
+ if (talkActor->xzDistToPlayer < 40.0f) {
+ func_8082DB90(play, this, &gPlayerAnim_link_normal_backspace);
+ func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE);
+ } else {
+ func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]);
+ }
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->unk_AE8 = 80;
+ this->unk_AE7 = -1;
+ this->targetedActor = this->talkActor;
+ } else {
+ this->csId = CS_ID_GLOBAL_TALK;
+ }
+
+ talkActor->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ this->actor.textId = 0;
+ this->targetedActor = this->talkActor;
+ } else {
+ this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40);
+ this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW];
+ this->unk_AE7 = 1;
+ this->actor.textId = 0xFE;
+ }
+ this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED;
+ this->exchangeItemId = this->itemAction;
+ if (this->unk_AE7 >= 0) {
+ Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]);
+ }
+ func_8082DAD4(this);
+ return true;
+ } else {
+ bottleAction = Player_BottleFromIA(this, this->itemAction);
+
+ if (bottleAction > PLAYER_BOTTLE_NONE) {
+ Player_StopCutscene(this);
+ if (bottleAction >= PLAYER_BOTTLE_FAIRY) {
+ func_80831760(play, this, func_80853754, 0);
+ func_8082DB90(play, this, &gPlayerAnim_link_bottle_bug_out);
+ } else if ((bottleAction > PLAYER_BOTTLE_EMPTY) && (bottleAction < PLAYER_BOTTLE_POE)) {
+ func_80831760(play, this, func_80853850, 0);
+ func_8082DB90(play, this, &gPlayerAnim_link_bottle_fish_out);
+ this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE];
+ } else {
+ func_80831760(play, this, func_80853194, 0);
+ func_8082E4A4(play, this,
+ (this->transformation == PLAYER_FORM_DEKU)
+ ? &gPlayerAnim_pn_drinkstart
+ : &gPlayerAnim_link_bottle_drink_demo_start);
+ }
+ } else {
+ Actor* actorUnkA90 = this->unk_A90;
+
+ if ((actorUnkA90 == NULL) || (actorUnkA90->id == ACTOR_EN_ZOT) ||
+ (actorUnkA90->csId == CS_ID_NONE)) {
+ if (!func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA])) {
+ return false;
+ }
+ } else {
+ this->csId = CS_ID_NONE;
+ }
+ func_80831760(play, this, func_8085269C, 0);
+ if ((this->skelAnime.playSpeed < 0.0f) ||
+ ((this->skelAnime.animation != D_8085D17C[this->transformation]) &&
+ (this->skelAnime.animation != D_8085D190[this->transformation]))) {
+ func_8082DB90(play, this, D_8085D17C[this->transformation]);
+ }
+ this->stateFlags2 |= PLAYER_STATE2_8000000;
+ if (actorUnkA90 != NULL) {
+ this->actor.flags |= ACTOR_FLAG_20000000;
+ if (actorUnkA90->id == ACTOR_EN_ZOT) {
+ this->unk_A94 = -1.0f;
+ } else {
+ actorUnkA90->flags |= ACTOR_FLAG_20000000;
+ }
+ }
+ }
+ }
+ } else {
+ if (func_8083868C(play, this) != CAM_MODE_NORMAL) {
+ Player_StopCutscene(this);
+ if (!(this->stateFlags1 & PLAYER_STATE1_800000)) {
+ Player_SetAction(play, this, func_8084E724, 1);
+ this->unk_AE8 = 13;
+ func_80836D8C(this);
+ if (this->unk_AA5 == PLAYER_UNKAA5_2) {
+ play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON;
+ }
+ }
+ this->stateFlags1 |= PLAYER_STATE1_100000;
+ play_sound(NA_SE_SY_CAMERA_ZOOM_UP);
+ Player_StopHorizontalMovement(this);
+ return true;
+ }
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ play_sound(NA_SE_SY_ERROR);
+ return false;
+ }
+ this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000);
+ func_8082DAD4(this);
+ }
+ return true;
+ }
+ return false;
+}
+
+s32 func_808391D8(Player* this, PlayState* play) {
+ if (gSaveContext.save.saveInfo.playerData.health != 0) {
+ Actor* talkActor = this->talkActor;
+ Actor* targetedActor = this->targetedActor;
+ Actor* var_a1 = NULL;
+ s32 var_t1 = false;
+ s32 var_t2 = false;
+
+ if (this->tatlActor != NULL) {
+ var_t2 =
+ (targetedActor != NULL) && (CHECK_FLAG_ALL(targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) ||
+ (targetedActor->hintId != TATL_HINT_ID_NONE));
+
+ if (var_t2 || (this->tatlTextId != 0)) {
+ //! @bug The comparison `((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000)` always evaluates to `true`
+ var_t1 = (this->tatlTextId < 0) && ((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000);
+
+ if (var_t1 || !var_t2) {
+ var_a1 = this->tatlActor;
+ if (var_t1) {
+ targetedActor = NULL;
+ talkActor = NULL;
+ }
+ } else {
+ var_a1 = targetedActor;
+ }
+ }
+ }
+
+ if ((talkActor != NULL) || (var_a1 != NULL)) {
+ if ((targetedActor == NULL) || (targetedActor == talkActor) || (targetedActor == var_a1)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800) ||
+ ((this->heldActor != NULL) &&
+ (var_t1 || (talkActor == this->heldActor) || (var_a1 == this->heldActor) ||
+ ((talkActor != NULL) && (talkActor->flags & ACTOR_FLAG_10000))))) {
+ if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->stateFlags1 & PLAYER_STATE1_800000) || func_801242B4(this))) {
+ if (talkActor != NULL) {
+ if ((targetedActor == NULL) || (targetedActor == talkActor)) {
+ this->stateFlags2 |= PLAYER_STATE2_2;
+ }
+
+ if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ return false;
+ }
+
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) ||
+ (talkActor->flags & ACTOR_FLAG_10000)) {
+ var_a1 = NULL;
+ } else if (var_a1 == NULL) {
+ return false;
+ }
+ }
+
+ if (var_a1 != NULL) {
+ if (!var_t1) {
+ this->stateFlags2 |= PLAYER_STATE2_200000;
+ if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK) ||
+ !CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP)) {
+ return false;
+ }
+ }
+
+ talkActor = var_a1;
+ this->talkActor = NULL;
+
+ if (var_t1 || !var_t2) {
+ var_a1->textId = ABS_ALT(this->tatlTextId);
+ } else if (var_a1->hintId != 0xFF) {
+ var_a1->textId = var_a1->hintId + 0x1900;
+ }
+ }
+
+ this->currentMask = D_80862B2C;
+ gSaveContext.save.equippedMask = this->currentMask;
+ Player_TalkWithPlayer(play, talkActor);
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 func_80839518(Player* this, PlayState* play) {
+ if (this->unk_AA5 != PLAYER_UNKAA5_0) {
+ func_80838A90(this, play);
+ return true;
+ } else if ((this->targetedActor != NULL) &&
+ (CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) ||
+ (this->targetedActor->hintId != TATL_HINT_ID_NONE))) {
+ this->stateFlags2 |= PLAYER_STATE2_200000;
+ } else if ((this->tatlTextId == 0) && !func_80123420(this) &&
+ CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) &&
+ !func_80831814(this, play, PLAYER_UNKAA5_1)) {
+ play_sound(NA_SE_SY_ERROR);
+ }
+ return false;
+}
+
+// Jumpslash/Jumpkick start
+void func_808395F0(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim, f32 linearVelocity,
+ f32 yVelocity) {
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ linearVelocity *= 1.1f;
+ meleeWeaponAnim = PLAYER_MWA_ZORA_JUMPKICK_START;
+ yVelocity *= 0.9f;
+ }
+
+ func_80833864(play, this, meleeWeaponAnim);
+ Player_SetAction(play, this, func_8084CB58, 0);
+ this->stateFlags3 |= PLAYER_STATE3_2;
+ this->linearVelocity = linearVelocity;
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.velocity.y = yVelocity;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ Player_AnimSfx_PlayFloorJump(this);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L);
+}
+
+s32 func_808396B8(PlayState* play, Player* this) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_400000) &&
+ (((this->actor.id != ACTOR_PLAYER) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) ||
+ ((Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) &&
+ ((this->transformation != PLAYER_FORM_GORON) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) &&
+ ((this->transformation != PLAYER_FORM_ZORA) || !(this->stateFlags1 & PLAYER_STATE1_2000000)) &&
+ (D_80862B48 != 0)))) {
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_80839770(Player* this, PlayState* play) {
+ if (func_808396B8(play, this)) {
+ if ((this->transformation != PLAYER_FORM_GORON) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) {
+ func_808395F0(play, this,
+ (this->transformation == PLAYER_FORM_ZORA) ? PLAYER_MWA_ZORA_JUMPKICK_START
+ : PLAYER_MWA_JUMPSLASH_START,
+ 3.0f, 4.5f);
+ return true;
+ }
+ }
+ return false;
+}
+
+s32 func_80839800(Player* this, PlayState* play) {
+ if ((this->unk_AE3[this->unk_ADE] == 0) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) {
+ func_80836B3C(play, this, 0.0f);
+ return true;
+ }
+ return false;
+}
+
+void func_80839860(Player* this, PlayState* play, s32 arg2) {
+ s32 pad;
+ f32 speed = (!(arg2 & 1) ? 5.8f : 3.5f);
+
+ if (this->currentBoots == PLAYER_BOOTS_GIANT) {
+ speed /= 2.0f;
+ }
+
+ //! FAKE
+ if (arg2 == 2) {}
+
+ func_80834D50(play, this, D_8085C2A4[arg2].unk_0, speed, NA_SE_VO_LI_SWORD_N);
+
+ this->unk_AE8 = 1;
+ this->unk_AE7 = arg2;
+
+ this->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE);
+ this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f;
+
+ this->stateFlags2 |= PLAYER_STATE2_80000;
+ Player_PlaySfx(this, ((arg2 << 0xE) == 0x8000) ? NA_SE_PL_ROLL : NA_SE_PL_SKIP);
+}
+
+void func_80839978(PlayState* play, Player* this) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->itemAction = PLAYER_IA_OCARINA;
+ func_80831760(play, this, func_8084AC84, 0);
+ func_8082DB60(play, this, &gPlayerAnim_clink_normal_okarina_walk);
+ func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_200);
+ this->stateFlags3 |= PLAYER_STATE3_20000000;
+ this->unk_B48 = this->linearVelocity;
+ Audio_PlayFanfare(NA_BGM_BREMEN_MARCH);
+ }
+}
+
+void func_80839A10(PlayState* play, Player* this) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->itemAction = PLAYER_IA_NONE;
+ func_80831760(play, this, func_8084AEEC, 0);
+ func_8082DB60(play, this, &gPlayerAnim_alink_dance_loop);
+ this->stateFlags2 |= PLAYER_STATE2_2000000;
+ Audio_PlayFanfare(NA_BGM_KAMARO_DANCE);
+ }
+}
+
+s32 func_80839A84(PlayState* play, Player* this) {
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ if (func_80836DC0(play, this)) {
+ return true;
+ }
+ } else {
+ return false;
+ }
+
+ Player_SetAction(play, this, func_808573A4, 0);
+ this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000);
+ this->unk_ADC = 4;
+ func_808373A4(play, this);
+ return true;
+}
+
+s32 func_80839B18(Player* this, PlayState* play) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) &&
+ (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerCurrentFloorType != FLOOR_TYPE_7) &&
+ (D_80862B40 != FLOOR_EFFECT_1)) {
+ s32 temp_a2 = this->unk_AE3[this->unk_ADE];
+
+ if (temp_a2 <= 0) {
+ if (func_8082FBE8(this)) {
+ if (this->actor.category != ACTORCAT_PLAYER) {
+ if (temp_a2 < 0) {
+ func_80834DB8(this, &gPlayerAnim_link_normal_jump, REG(69) / 100.0f, play);
+ } else {
+ func_80836B3C(play, this, 0.0f);
+ }
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && func_80832090(this) &&
+ (this->transformation != PLAYER_FORM_GORON)) {
+ func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f);
+ } else if (!func_80839A84(play, this)) {
+ func_80836B3C(play, this, 0.0f);
+ }
+
+ return true;
+ }
+ } else {
+ func_80839860(this, play, temp_a2);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void func_80839CD8(Player* this, PlayState* play) {
+ PlayerAnimationHeader* anim;
+ f32 var_fv0 = this->unk_B38 - 3.0f;
+
+ if (var_fv0 < 0.0f) {
+ var_fv0 += 29.0f;
+ }
+
+ if (var_fv0 < 14.0f) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_17][this->modelAnimType];
+ var_fv0 = 11.0f - var_fv0;
+ if (var_fv0 < 0.0f) {
+ var_fv0 = -var_fv0 * 1.375f;
+ }
+ var_fv0 = var_fv0 / 11.0f;
+ } else {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_18][this->modelAnimType];
+ var_fv0 = 26.0f - var_fv0;
+ if (var_fv0 < 0.0f) {
+ var_fv0 = -var_fv0 * 2;
+ }
+ var_fv0 = var_fv0 / 12.0f;
+ }
+
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE,
+ 4.0f * var_fv0);
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_80839E3C(Player* this, PlayState* play) {
+ func_808369F4(this, play);
+ func_80839CD8(this, play);
+}
+
+void func_80839E74(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_80849FE0, 1);
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_80839ED0(Player* this, PlayState* play) {
+ if (!(this->stateFlags3 & PLAYER_STATE3_80) && (func_80852B28 != this->actionFunc) && !func_8083213C(this)) {
+ func_80836D8C(this);
+ if (!(this->stateFlags1 & PLAYER_STATE1_40)) {
+ if (func_801242B4(this)) {
+ func_808353DC(play, this);
+ } else {
+ func_80836988(this, play);
+ }
+ }
+ if (this->unk_AA5 < PLAYER_UNKAA5_5) {
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ }
+ }
+ this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000);
+}
+
+s32 func_80839F98(PlayState* play, Player* this) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ if (this->linearVelocity != 0.0f) {
+ func_80836B3C(play, this, 0.0f);
+ return true;
+ }
+ func_80836AD8(play, this);
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, 2.0f / 3.0f, 0.0f, 7.0f,
+ ANIMMODE_ONCE, 0.0f);
+ return true;
+ }
+ return false;
+}
+
+// Toggles swimming/walking underwater as Zora
+void func_8083A04C(Player* this) {
+ if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ this->currentBoots = PLAYER_BOOTS_ZORA_LAND;
+ }
+ if (func_808508C8 == this->actionFunc) {
+ this->unk_AE8 = 20;
+ }
+ } else {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
+ this->currentBoots = PLAYER_BOOTS_ZORA_UNDERWATER;
+ }
+ }
+}
+
+s32 func_8083A0CC(Player* this, PlayState* play) {
+ if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) {
+ func_8083A04C(this);
+ }
+ return false;
+}
+
+s32 func_8083A114(Player* this, PlayState* play) {
+ if (!D_80862B04 && !(this->stateFlags1 & PLAYER_STATE1_800000) && !func_8082FB68(this)) {
+ if ((this->transformation == PLAYER_FORM_ZORA) && (this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ func_8083A04C(this);
+ } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && !func_8082FB68(this)) {
+ if (this->transformation == PLAYER_FORM_GORON) {
+ if (func_80839F98(play, this)) {
+ return true;
+ }
+ } else if (func_80839A84(play, this) || func_80839800(this, play)) {
+ return true;
+ }
+
+ if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) &&
+ (this->transformation != PLAYER_FORM_FIERCE_DEITY)) {
+ func_80831990(play, this, ITEM_NONE);
+ } else {
+ this->stateFlags2 ^= PLAYER_STATE2_100000;
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 func_8083A274(Player* this, PlayState* play) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R) && (this->unk_AA5 == PLAYER_UNKAA5_0) &&
+ (play->unk_1887C == 0)) {
+ if (Player_IsGoronOrDeku(this) ||
+ ((((this->transformation == PLAYER_FORM_ZORA) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) ||
+ ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) &&
+ !func_80123434(this) && (this->targetedActor == NULL))) {
+ func_8082DC38(this);
+ func_8082DCA0(play, this);
+ if (Player_SetAction(play, this, func_8084B5C0, 0)) {
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ if (this->transformation != PLAYER_FORM_GORON) {
+ PlayerAnimationHeader* anim;
+ f32 endFrame;
+
+ if (!Player_IsGoronOrDeku(this)) {
+ Player_SetModelsForHoldingShield(this);
+ anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType];
+ } else {
+ anim = (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_gurd
+ : &gPlayerAnim_clink_normal_defense_ALL;
+ }
+
+ if (anim != this->skelAnime.animation) {
+ if (func_80123420(this)) {
+ this->unk_B3C = 1.0f;
+ } else {
+ this->unk_B3C = 0.0f;
+ func_8082FC60(this);
+ }
+ this->upperLimbRot.x = 0;
+ this->upperLimbRot.y = 0;
+ this->upperLimbRot.z = 0;
+ }
+
+ endFrame = Animation_GetLastFrame(anim);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f,
+ (anim == &gPlayerAnim_pn_gurd) ? 0.0f : endFrame, endFrame, ANIMMODE_ONCE,
+ 0.0f);
+ }
+ func_80830AE8(this);
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+s32 func_8083A4A4(Player* this, f32* arg1, s16* arg2, f32 arg3) {
+ s16 yaw = this->currentYaw - *arg2;
+
+ if (ABS_ALT(yaw) > 0x6000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, arg3)) {
+ *arg1 = 0.0f;
+ *arg2 = this->currentYaw;
+ } else {
+ return true;
+ }
+ }
+ return false;
+}
+
+void func_8083A548(Player* this) {
+ if ((this->unk_ADC > 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ this->unk_ADC = -this->unk_ADC;
+ }
+}
+
+s32 func_8083A580(Player* this, PlayState* play) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_400000) &&
+ (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) {
+ if ((this->unk_ADC > 0) && (((this->transformation == PLAYER_FORM_ZORA)) ||
+ ((this->unk_ADC == 1) && (this->heldItemAction != PLAYER_IA_STICK)))) {
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ func_80830E30(this, play);
+ } else {
+ func_808335B0(play, this);
+ }
+ return true;
+ }
+ }
+ } else {
+ func_8083A548(this);
+ }
+ return false;
+}
+
+s32 func_8083A658(PlayState* play, Player* this) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Player_SetAction(play, this, func_80852B28, 0);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_light_bom);
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ return true;
+ }
+ return false;
+}
+
+struct_8085D200 D_8085D200[] = {
+ { &gPlayerAnim_link_bottle_bug_miss, &gPlayerAnim_link_bottle_bug_in, 2, 3 },
+ { &gPlayerAnim_link_bottle_fish_miss, &gPlayerAnim_link_bottle_fish_in, 5, 3 },
+};
+
+s32 func_8083A6C0(PlayState* play, Player* this) {
+ if (D_80862B48 != 0) {
+ if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) {
+ Player_SetAction(play, this, func_808534C0, 0);
+ if (this->actor.depthInWater > 12.0f) {
+ this->unk_AE8 = 1;
+ }
+ func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0);
+ Player_PlaySfx(this, NA_SE_IT_SWORD_SWING);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP);
+ return true;
+ }
+ return false;
+ }
+ return false;
+}
+
+void func_8083A794(Player* this, PlayState* play) {
+ if ((func_8084AF9C != this->actionFunc) && (func_8084B0EC != this->actionFunc)) {
+ this->unk_B70 = 0;
+ this->unk_B34 = 0.0f;
+ this->unk_B38 = 0.0f;
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]);
+ }
+
+ Player_SetAction(play, this, func_8082FBE8(this) ? func_8084B0EC : func_8084AF9C, 1);
+}
+
+void func_8083A844(Player* this, PlayState* play, s16 currentYaw) {
+ this->currentYaw = currentYaw;
+ this->actor.shape.rot.y = this->currentYaw;
+ func_8083A794(this, play);
+}
+
+s32 func_8083A878(PlayState* play, Player* this, f32 arg2) {
+ WaterBox* waterBox;
+ f32 ySurface = this->actor.world.pos.y;
+
+ if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface,
+ &waterBox)) {
+ ySurface -= this->actor.world.pos.y;
+ if (this->ageProperties->unk_24 <= ySurface) {
+ Player_SetAction(play, this, func_80850B18, 0);
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
+ this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000);
+ this->unk_AE8 = 20;
+ this->linearVelocity = 2.0f;
+ func_80123140(play, this);
+ return false;
+ }
+ }
+ func_80835324(play, this, arg2, this->actor.shape.rot.y);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ return true;
+}
+
+/**
+ * Update for using telescopes. SCENE_AYASHIISHOP acts quite differently: it has a different camera mode and cannot use
+ * zooming.
+ *
+ * - Stick inputs move the view; shape.rot.y is used as a base position which cannot be looked too far away from. (This
+ * is not necessarily the same as the original angle of the spawn.)
+ * - A can be used to zoom (except in SCENE_AYASHIISHOP)
+ * - B exits, using the RESPAWN_MODE_DOWN entrance
+ */
+void func_8083A98C(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ Player* this = THIS;
+ s32 camMode;
+
+ if (play->csCtx.state != CS_STATE_IDLE) {
+ return;
+ }
+
+ if (DECR(this->unk_AE8) != 0) {
+ camMode = (play->sceneId != SCENE_AYASHIISHOP) ? CAM_MODE_FIRSTPERSON : CAM_MODE_DEKUHIDE;
+
+ // Show controls overlay. SCENE_AYASHIISHOP does not have Zoom, so has a different one.
+ if (this->unk_AE8 == 1) {
+ Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL);
+ }
+ } else {
+ sPlayerControlInput = play->state.input;
+ if (play->view.fovy >= 25.0f) {
+ s16 prevFocusX = thisx->focus.rot.x;
+ s16 prevFocusY = thisx->focus.rot.y;
+ s16 inputY;
+ s16 inputX;
+ s16 newYaw; // from base position shape.rot.y
+
+ // Pitch:
+ inputY = sPlayerControlInput->rel.stick_y * 4;
+ // Add input, clamped to prevent turning too fast
+ thisx->focus.rot.x += CLAMP(inputY, -0x12C, 0x12C);
+ // Prevent looking too far up or down
+ thisx->focus.rot.x = CLAMP(thisx->focus.rot.x, -0x2EE0, 0x2EE0);
+
+ // Yaw: shape.rot.y is used as a fixed starting position
+ inputX = sPlayerControlInput->rel.stick_x * -4;
+ // Start from current position: no input -> no change
+ newYaw = thisx->focus.rot.y - thisx->shape.rot.y;
+ // Add input, clamped to prevent turning too fast
+ newYaw += CLAMP(inputX, -0x12C, 0x12C);
+ // Prevent looking too far left or right of base position
+ newYaw = CLAMP(newYaw, -0x3E80, 0x3E80);
+ thisx->focus.rot.y = thisx->shape.rot.y + newYaw;
+
+ if (play->sceneId == SCENE_00KEIKOKU) {
+ f32 focusDeltaX = (s16)(thisx->focus.rot.x - prevFocusX);
+ f32 focusDeltaY = (s16)(thisx->focus.rot.y - prevFocusY);
+
+ func_8019FAD8(&gSfxDefaultPos, NA_SE_PL_TELESCOPE_MOVEMENT - SFX_FLAG,
+ sqrtf(SQ(focusDeltaX) + SQ(focusDeltaY)) / 300.0f);
+ }
+ }
+
+ if (play->sceneId == SCENE_AYASHIISHOP) {
+ camMode = CAM_MODE_DEKUHIDE;
+ } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { // Zoom
+ camMode = CAM_MODE_TARGET;
+ } else {
+ camMode = CAM_MODE_NORMAL;
+ }
+
+ // Exit
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
+ Message_CloseTextbox(play);
+
+ if (play->sceneId == SCENE_00KEIKOKU) {
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(ASTRAL_OBSERVATORY, 2);
+ } else {
+ u16 entrance;
+
+ if (play->sceneId == SCENE_AYASHIISHOP) {
+ entrance = ENTRANCE(CURIOSITY_SHOP, 3);
+ } else {
+ entrance = ENTRANCE(PIRATES_FORTRESS_INTERIOR, 8);
+ }
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = entrance;
+ }
+
+ func_80169EFC(&play->state);
+ gSaveContext.respawnFlag = -2;
+ play->transitionType = TRANS_TYPE_CIRCLE;
+ }
+ }
+
+ Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_TELESCOPE);
+ Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), camMode);
+}
+
+// Set up using a telescope
+void Player_InitMode_Telescope(PlayState* play, Player* this) {
+ this->actor.update = func_8083A98C;
+ this->actor.draw = NULL;
+ if (play->sceneId == SCENE_00KEIKOKU) {
+ this->actor.focus.rot.x = 0xBD8;
+ this->actor.focus.rot.y = -0x4D74;
+ this->unk_AE8 = 20;
+ } else if (play->sceneId == SCENE_AYASHIISHOP) {
+ this->actor.focus.rot.x = 0x9A6;
+ this->actor.focus.rot.y = 0x2102;
+ this->unk_AE8 = 2;
+ } else {
+ this->actor.focus.rot.x = 0x9A6;
+ this->actor.focus.rot.y = 0x2102;
+ this->unk_AE8 = 20;
+ }
+ play->actorCtx.flags |= ACTORCTX_FLAG_1;
+}
+
+void Player_InitMode_B(PlayState* play, Player* this) {
+ func_8085B384(this, play);
+}
+
+void Player_InitMode_D(PlayState* play, Player* this) {
+ if (func_8083A878(play, this, 180.0f)) {
+ this->unk_AE8 = -20;
+ }
+}
+
+// InitModes 0xA and 0xE
+void func_8083ADF0(PlayState* play, Player* this) {
+ this->linearVelocity = 2.0f;
+ gSaveContext.entranceSpeed = 2.0f;
+
+ if (func_8083A878(play, this, 120.0f)) {
+ this->unk_AE8 = -15;
+ }
+}
+
+void Player_InitMode_F(PlayState* play, Player* this) {
+ if (gSaveContext.entranceSpeed < 0.1f) {
+ gSaveContext.entranceSpeed = 0.1f;
+ }
+
+ this->linearVelocity = gSaveContext.entranceSpeed;
+ if (func_8083A878(play, this, 800.0f)) {
+ this->unk_AE8 = -80.0f / this->linearVelocity;
+ if (this->unk_AE8 < -20) {
+ this->unk_AE8 = -20;
+ }
+ }
+}
+
+void func_8083AECC(Player* this, s16 currentYaw, PlayState* play) {
+ Player_SetAction(play, this, func_8084A5C0, 1);
+ PlayerAnimation_CopyJointToMorph(play, &this->skelAnime);
+ this->unk_B38 = 0.0f;
+ this->unk_B34 = 0.0f;
+ this->currentYaw = currentYaw;
+}
+
+void func_8083AF30(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084A26C, 1);
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType]);
+}
+
+void func_8083AF8C(Player* this, s16 currentYaw, PlayState* play) {
+ Player_SetAction(play, this, func_8084B288, 1);
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_walk, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_anchor_back_walk), ANIMMODE_ONCE, -6.0f);
+ this->linearVelocity = 8.0f;
+ this->currentYaw = currentYaw;
+}
+
+void func_8083B030(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084A8E8, 1);
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]);
+ this->unk_B38 = 0.0f;
+}
+
+void func_8083B090(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084B3B8, 1);
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_brake, 6.0f / 3.0f);
+}
+
+void func_8083B0E4(PlayState* play, Player* this, s16 currentYaw) {
+ this->currentYaw = currentYaw;
+ Player_SetAction(play, this, func_8084AB4C, 1);
+ this->unk_B4E = 1200;
+ this->unk_B4E *= D_8085C3E4;
+ PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 1.0f, 0.0f,
+ 0.0f, ANIMMODE_LOOP, -6.0f);
+}
+
+void func_8083B1A0(Player* this, PlayState* play) {
+ PlayerAnimationHeader* anim;
+
+ Player_SetAction(play, this, func_80849FE0, 1);
+ if (this->unk_B40 < 0.5f) {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_27][this->modelAnimType];
+ } else {
+ anim = D_8085BE84[PLAYER_ANIMGROUP_26][this->modelAnimType];
+ }
+ Player_AnimationPlayOnce(play, this, anim);
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_8083B23C(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_80849A9C, 1);
+ func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]);
+ this->unk_AE8 = 1;
+}
+
+void func_8083B29C(Player* this, PlayState* play) {
+ if (this->linearVelocity != 0.0f) {
+ func_8083A794(this, play);
+ } else {
+ func_8083B1A0(this, play);
+ }
+}
+
+void func_8083B2E4(Player* this, PlayState* play) {
+ if (this->linearVelocity != 0.0f) {
+ func_8083A794(this, play);
+ } else {
+ func_80836988(this, play);
+ }
+}
+
+void func_8083B32C(PlayState* play, Player* this, f32 arg2) {
+ this->stateFlags1 |= PLAYER_STATE1_40000;
+ this->stateFlags1 &= ~PLAYER_STATE1_8000000;
+ func_8082DC64(play, this);
+
+ if (func_80837730(play, this, arg2, 500)) {
+ Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER);
+ }
+ func_80123140(play, this);
+}
+
+s32 func_8083B3B4(PlayState* play, Player* this, Input* input) {
+ if ((!(this->stateFlags1 & PLAYER_STATE1_400) && !(this->stateFlags2 & PLAYER_STATE2_400) &&
+ (this->transformation != PLAYER_FORM_ZORA)) &&
+ ((input == NULL) ||
+ ((((this->interactRangeActor == NULL) || (this->interactRangeActor->id != ACTOR_EN_ZOG)) &&
+ CHECK_BTN_ALL(input->press.button, BTN_A)) &&
+ ((ABS_ALT(this->unk_AAA) < 0x2EE0) && (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) &&
+ ((s32)SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) <=
+ CONVEYOR_SPEED_SLOW))))) {
+ if (func_8085B08C != this->actionFunc) {
+ Player_SetAction(play, this, func_808516B4, 0);
+ }
+
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_swimer_swim_deep_start);
+ this->unk_AAA = 0;
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ this->actor.velocity.y = 0.0f;
+ if (input != NULL) {
+ this->stateFlags2 |= PLAYER_STATE2_800;
+ Player_PlaySfx(this, NA_SE_PL_DIVE_BUBBLE);
+ }
+
+ return true;
+ }
+
+ if ((this->transformation != PLAYER_FORM_DEKU) &&
+ ((this->stateFlags1 & PLAYER_STATE1_400) ||
+ ((this->stateFlags2 & PLAYER_STATE2_400) &&
+ (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) ||
+ (this->unk_AAA < -0x1555)))) &&
+ ((this->actor.depthInWater - this->actor.velocity.y) < this->ageProperties->unk_30)) {
+ s32 temp_v0_3;
+ s16 sp2A;
+ f32 sp24;
+
+ this->stateFlags2 &= ~PLAYER_STATE2_400;
+ func_8082DC64(play, this);
+ temp_v0_3 = func_80837730(play, this, this->actor.velocity.y, 0x1F4);
+ if (this->stateFlags3 & PLAYER_STATE3_8000) {
+ sp2A = this->unk_B86[1];
+ sp24 = this->unk_B48 * 1.5f;
+ Player_SetAction(play, this, func_8084CA24, 1);
+ this->stateFlags3 |= PLAYER_STATE3_8000;
+ this->stateFlags1 &= ~PLAYER_STATE1_8000000;
+ sp24 = CLAMP_MAX(sp24, 13.5f);
+ this->linearVelocity = Math_CosS(this->unk_AAA) * sp24;
+ this->actor.velocity.y = -Math_SinS(this->unk_AAA) * sp24;
+ this->unk_B86[1] = sp2A;
+ Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER);
+ return true;
+ }
+
+ if (temp_v0_3) {
+ Player_PlaySfx(this, NA_SE_PL_FACE_UP);
+ } else {
+ Player_PlaySfx(this, NA_SE_PL_FACE_UP);
+ }
+
+ if (input != NULL) {
+ Player_SetAction(play, this, func_808519FC, 1);
+ if (this->stateFlags1 & PLAYER_STATE1_400) {
+ this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000);
+ }
+ this->unk_AE8 = 2;
+ }
+
+ func_8082E438(play, this,
+ (this->stateFlags1 & PLAYER_STATE1_800) ? &gPlayerAnim_link_swimer_swim_get
+ : &gPlayerAnim_link_swimer_swim_deep_end);
+ return true;
+ }
+
+ return false;
+}
+
+void func_8083B73C(PlayState* play, Player* this, s16 currentYaw) {
+ Player_SetAction(play, this, func_808513EC, 0);
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
+ this->actor.shape.rot.y = currentYaw;
+ this->currentYaw = currentYaw;
+}
+
+void func_8083B798(PlayState* play, Player* this) {
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ Player_SetAction(play, this, func_808513EC, 0);
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim, 1.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim), 0.0f, ANIMMODE_LOOP, 0.0f);
+ this->unk_B48 = 2.0f;
+ } else {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim);
+ this->unk_AE8 = 1;
+ }
+
+ this->unk_AAA = 0x3E80;
+}
+
+void func_8083B850(PlayState* play, Player* this) {
+ this->currentBoots = PLAYER_BOOTS_ZORA_LAND;
+ this->prevBoots = PLAYER_BOOTS_ZORA_LAND;
+ Player_SetAction(play, this, func_80850D68, 0);
+ this->unk_B48 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y));
+ Player_OverrideBlureColors(play, this, 1, 8);
+ this->currentBoots = PLAYER_BOOTS_ZORA_LAND;
+ this->prevBoots = PLAYER_BOOTS_ZORA_LAND;
+}
+
+void func_8083B8D0(PlayState* play, Player* this) {
+ if (func_80837730(play, this, this->actor.velocity.y, 500)) {
+ Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER);
+ if (this->fallDistance > 800) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END);
+ }
+ }
+}
+
+void func_8083B930(PlayState* play, Player* this) {
+ PlayerAnimationHeader* var_a2;
+
+ if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (func_80857BE8 == this->actionFunc)) {
+ func_8082DE50(play, this);
+
+ if (func_8084CA24 == this->actionFunc) {
+ func_8083B850(play, this);
+ this->stateFlags3 |= PLAYER_STATE3_8000;
+ } else if ((this->transformation == PLAYER_FORM_ZORA) && (func_8084C94C == this->actionFunc)) {
+ func_8083B850(play, this);
+ this->stateFlags3 |= PLAYER_STATE3_8000;
+ func_8082DB60(play, this, &gPlayerAnim_pz_fishswim);
+ } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && (this->stateFlags2 & PLAYER_STATE2_400)) {
+ this->stateFlags2 &= ~PLAYER_STATE2_400;
+ func_8083B3B4(play, this, NULL);
+ this->unk_AE7 = 1;
+ } else if (func_8084C94C == this->actionFunc) {
+ Player_SetAction(play, this, func_808516B4, 0);
+ func_8083B798(play, this);
+ } else {
+ Player_SetAction(play, this, func_808508C8, 1);
+ func_8082E438(play, this,
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ? &gPlayerAnim_link_swimer_wait2swim_wait
+ : &gPlayerAnim_link_swimer_land2swim_wait);
+ }
+ }
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->actor.depthInWater < this->ageProperties->unk_2C)) {
+ func_8083B8D0(play, this);
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_8000000;
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000);
+
+ this->unk_AEC = 0.0f;
+ func_80123140(play, this);
+}
+
+void func_8083BB4C(PlayState* play, Player* this) {
+ f32 sp1C = this->actor.depthInWater - this->ageProperties->unk_2C;
+
+ if (sp1C < 0.0f) {
+ this->underwaterTimer = 0;
+ if ((this->transformation == PLAYER_FORM_ZORA) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ this->currentBoots = PLAYER_BOOTS_ZORA_LAND;
+ }
+ func_801A3E38(0);
+ } else {
+ func_801A3E38(0x20);
+ if ((this->transformation == PLAYER_FORM_ZORA) || (sp1C < 10.0f)) {
+ this->underwaterTimer = 0;
+ } else if (this->underwaterTimer < 300) {
+ this->underwaterTimer++;
+ }
+ }
+
+ if ((this->actor.parent == NULL) && (func_8084D4EC != this->actionFunc) && (func_8084F3DC != this->actionFunc) &&
+ ((func_8084CA24 != this->actionFunc) || (this->actor.velocity.y < -2.0f))) {
+ if (this->ageProperties->unk_2C < this->actor.depthInWater) {
+ if (this->transformation == PLAYER_FORM_GORON) {
+ func_80834140(play, this, &gPlayerAnim_link_swimer_swim_down);
+ func_808345C8();
+ func_8083B8D0(play, this);
+ } else if (this->transformation == PLAYER_FORM_DEKU) {
+ if (this->remainingHopsCounter != 0) {
+ func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP);
+ } else {
+ if ((play->sceneId == SCENE_20SICHITAI) && (this->unk_3CF == 0)) {
+ if (CHECK_EVENTINF(EVENTINF_50)) {
+ play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 2);
+ } else {
+ play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1);
+ }
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
+ this->stateFlags1 |= PLAYER_STATE1_200;
+ play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED);
+ } else if ((this->unk_3CF == 0) &&
+ ((play->sceneId == SCENE_30GYOSON) || (play->sceneId == SCENE_31MISAKI) ||
+ (play->sceneId == SCENE_TORIDE))) {
+ func_80169EFC(&play->state);
+ func_808345C8();
+ } else {
+ Player_SetAction(play, this, func_808497A0, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ }
+ func_8083B8D0(play, this);
+ }
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) ||
+ (((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) ||
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) &&
+ (func_8084E724 != this->actionFunc) && (func_80851B58 != this->actionFunc) &&
+ (func_80851BD4 != this->actionFunc) && (func_808508C8 != this->actionFunc) &&
+ (func_808513EC != this->actionFunc) && (func_80851588 != this->actionFunc) &&
+ (func_808516B4 != this->actionFunc) && (func_808519FC != this->actionFunc) &&
+ (func_80850B18 != this->actionFunc) && (func_80850D68 != this->actionFunc))) {
+ func_8083B930(play, this);
+ }
+ } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (this->actor.depthInWater < this->ageProperties->unk_24) &&
+ (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ if (this->skelAnime.moveFlags == 0) {
+ func_8083B0E4(play, this, this->actor.shape.rot.y);
+ }
+ func_8083B32C(play, this, this->actor.velocity.y);
+ }
+ }
+}
+
+void func_8083BF54(PlayState* play, Player* this) {
+ Vec3f sp84;
+ s32 temp_v0;
+ s32 var_a2;
+
+ this->actor.terminalVelocity = -20.0f;
+ this->actor.gravity = REG(68) / 100.0f;
+
+ var_a2 = false;
+ temp_v0 = func_808340D4(sPlayerCurrentFloorType);
+
+ if (temp_v0 ||
+ (((var_a2 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) || (sPlayerCurrentFloorType == FLOOR_TYPE_15))) ||
+ (sPlayerCurrentFloorType == FLOOR_TYPE_13))) {
+ f32 temp_fv1_2;
+ f32 var_fa1;
+ f32 var_ft4;
+ f32 var_fv0;
+ u16 sfxId;
+
+ var_ft4 = fabsf(this->linearVelocity + D_80862B3C) * 20.0f;
+ if (temp_v0) {
+ if (sPlayerCurrentFloorType == FLOOR_TYPE_4) {
+ var_fa1 = 1300.0f;
+ } else if (sPlayerCurrentFloorType == FLOOR_TYPE_7) {
+ var_fa1 = 20000.0f;
+ var_ft4 = 0.0f;
+ } else {
+ var_fa1 = 10000.0f;
+ var_ft4 *= 1.6f;
+ }
+ sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG;
+ } else if (var_a2) {
+ if (sPlayerCurrentFloorType == FLOOR_TYPE_14) {
+ var_fa1 = 400.0f;
+ var_ft4 *= 10.0f;
+ } else {
+ var_fa1 = 1300.0f;
+ var_ft4 = 0.0f;
+ }
+ sfxId = NA_SE_PL_SINK_ON_SNOW - SFX_FLAG;
+ } else {
+ var_fa1 = (this->transformation == PLAYER_FORM_GORON) ? 10000.0f : 1000.0f;
+ var_ft4 = 0.0f;
+ sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG;
+ }
+
+ var_fa1 = CLAMP_MIN(var_fa1, this->unk_AB8);
+
+ var_fv0 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) ? 200.0f : (var_fa1 - this->unk_AB8) * 0.02f;
+ var_fv0 = CLAMP(var_fv0, 0.0f, 300.0f);
+
+ temp_fv1_2 = this->unk_AB8;
+ this->unk_AB8 += var_fv0 - var_ft4;
+ this->unk_AB8 = CLAMP(this->unk_AB8, 0.0f, var_fa1);
+
+ if ((this->linearVelocity == 0.0f) && (fabsf(this->unk_AB8 - temp_fv1_2) > 2.0f)) {
+ func_800B8F98(&this->actor, sfxId);
+ }
+
+ this->actor.gravity -= this->unk_AB8 * 0.004f;
+ } else {
+ this->unk_AB8 = 0.0f;
+ }
+
+ if ((this->stateFlags3 & PLAYER_STATE3_10) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
+ if (this->actor.depthInWater < 50.0f) {
+ f32 temp_fv1_5;
+ Vec3f* bodyPartsPos;
+ f32 var_fa0_3;
+ f32 var_ft4_2;
+
+ var_ft4_2 = fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].x - this->unk_D6C.x) +
+ fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].y - this->unk_D6C.y) +
+ fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].z - this->unk_D6C.z);
+ var_ft4_2 = CLAMP_MAX(var_ft4_2, 4.0f);
+
+ this->unk_AEC += var_ft4_2;
+ if (this->unk_AEC > 15.0f) {
+ this->unk_AEC = 0.0f;
+ sp84.x = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.x;
+ sp84.y = this->actor.world.pos.y + this->actor.depthInWater;
+ sp84.z = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.z;
+
+ EffectSsGRipple_Spawn(play, &sp84, 100, 500, 0);
+
+ if ((this->linearVelocity > 4.0f) && !func_801242B4(this) &&
+ ((this->actor.world.pos.y + this->actor.depthInWater) <
+ this->bodyPartsPos[PLAYER_BODYPART_WAIST].y)) {
+ func_80837730(play, this, 20.0f,
+ (fabsf(this->linearVelocity) * 50.0f) + (this->actor.depthInWater * 5.0f));
+ } else if (this->stateFlags3 & PLAYER_STATE3_8000) {
+ s32 i;
+
+ var_fa0_3 = (this->actor.world.pos.y + this->actor.depthInWater) - 5.0f;
+ bodyPartsPos = this->bodyPartsPos;
+
+ for (i = 0; i < PLAYER_BODYPART_MAX; i++, bodyPartsPos++) {
+ temp_fv1_5 = bodyPartsPos->y - var_fa0_3;
+
+ if (temp_fv1_5 > 0.0f) {
+ func_80837730(play, this, 20.0f,
+ fabsf(this->linearVelocity) * 20.0f + (temp_fv1_5 * 10.0f));
+ }
+ }
+ }
+ }
+ }
+
+ if (this->ageProperties->unk_2C < this->actor.depthInWater) {
+ s32 numBubbles = 0;
+ s32 i;
+ f32 var_fv1;
+
+ var_fv1 = (this->stateFlags1 & PLAYER_STATE1_4000000)
+ ? -fabsf(this->linearVelocity)
+ : ((func_80850D68 == this->actionFunc)
+ ? (ABS_ALT(this->unk_B8A) * -0.004f) + (this->unk_B48 * -0.38f)
+ : this->actor.velocity.y);
+
+ if ((var_fv1 > -1.0f) || ((this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ if (Rand_ZeroOne() < 0.2f) {
+ numBubbles = 1;
+ }
+ } else {
+ numBubbles = var_fv1 * -0.3f;
+ if (numBubbles > 8) {
+ numBubbles = 8;
+ }
+ }
+
+ for (i = 0; i < numBubbles; i++) {
+ EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 10.0f, 20.0f, 0.13f);
+ }
+ }
+ }
+}
+
+s32 func_8083C62C(Player* this, s32 arg1) {
+ Actor* targetedActor = this->targetedActor;
+ Vec3f headPos;
+ s16 pitchTarget;
+ s16 yawTarget;
+
+ headPos.x = this->actor.world.pos.x;
+ headPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
+ headPos.z = this->actor.world.pos.z;
+
+ pitchTarget = Math_Vec3f_Pitch(&headPos, &targetedActor->focus.pos);
+ yawTarget = Math_Vec3f_Yaw(&headPos, &targetedActor->focus.pos);
+
+ Math_SmoothStepToS(&this->actor.focus.rot.y, yawTarget, 4, 0x2710, 0);
+ Math_SmoothStepToS(&this->actor.focus.rot.x, pitchTarget, 4, 0x2710, 0);
+
+ this->unk_AA6 |= 2;
+
+ return func_80832754(this, arg1);
+}
+
+Vec3f D_8085D218 = { 0.0f, 100.0f, 40.0f };
+
+void func_8083C6E8(Player* this, PlayState* play) {
+ if (this->targetedActor != NULL) {
+ if (func_800B7128(this) || func_8082EF20(this)) {
+ func_8083C62C(this, true);
+ } else {
+ func_8083C62C(this, false);
+ }
+ return;
+ }
+
+ if (sPlayerCurrentFloorType == FLOOR_TYPE_11) {
+ Math_SmoothStepToS(&this->actor.focus.rot.x, -20000, 10, 4000, 800);
+ } else {
+ s16 sp46 = 0;
+ f32 yIntersect;
+ Vec3f pos;
+ s16 temp_v0;
+
+ yIntersect = func_80835D2C(play, this, &D_8085D218, &pos);
+ if (yIntersect > BGCHECK_Y_MIN) {
+ temp_v0 = Math_Atan2S_XY(40.0f, this->actor.world.pos.y - yIntersect);
+ sp46 = CLAMP(temp_v0, -4000, 4000);
+ }
+ this->actor.focus.rot.y = this->actor.shape.rot.y;
+ Math_SmoothStepToS(&this->actor.focus.rot.x, sp46, 14, 4000, 30);
+ }
+
+ func_80832754(this, func_800B7128(this) || func_8082EF20(this));
+}
+
+void func_8083C85C(Player* this) {
+ Math_ScaledStepToS(&this->upperLimbRot.x, D_80862B3C * -500.0f, 900);
+ this->headLimbRot.x = (-(f32)this->upperLimbRot.x * 0.5f);
+ this->unk_AA6 |= 0x48;
+}
+
+void func_8083C8E8(Player* this, PlayState* play) {
+ if (!func_800B7128(this) && !func_8082EF20(this) && ((this->linearVelocity > 5.0f) || (D_80862B3C != 0.0f))) {
+ s16 temp1;
+ s16 temp2;
+
+ temp1 = this->linearVelocity * 200.0f;
+ temp2 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) * this->linearVelocity * 0.1f;
+
+ temp1 = CLAMP(temp1, -0xFA0, 0xFA0);
+
+ temp1 += (s16)(s32)(D_80862B3C * -500.0f);
+
+ temp1 = CLAMP(temp1, -0x2EE0, 0x2EE0);
+
+ temp2 = CLAMP(-temp2, -0xFA0, 0xFA0);
+
+ Math_ScaledStepToS(&this->upperLimbRot.x, temp1, 0x384);
+ this->headLimbRot.x = -(f32)this->upperLimbRot.x * 0.5f;
+ Math_ScaledStepToS(&this->headLimbRot.z, temp2, 0x12C);
+ Math_ScaledStepToS(&this->upperLimbRot.z, temp2, 0xC8);
+ this->unk_AA6 |= 0x168;
+ } else {
+ func_8083C6E8(this, play);
+ }
+}
+
+void func_8083CB04(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, s16 arg5) {
+ Math_AsymStepToF(&this->linearVelocity, arg1, arg3, arg4);
+ Math_ScaledStepToS(&this->currentYaw, arg2, arg5);
+}
+
+void func_8083CB58(Player* this, f32 arg1, s16 arg2) {
+ func_8083CB04(this, arg1, arg2, REG(19) / 100.0f, 1.5f, REG(27));
+}
+
+s32 func_8083CBC4(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6) {
+ s16 temp_v0 = this->currentYaw - arg2;
+
+ if ((this->unk_B50 * 1.5f) < fabsf(this->linearVelocity)) {
+ arg5 *= 4.0f;
+ arg3 *= 4.0f;
+ }
+
+ if (ABS_ALT(temp_v0) > 0x6000) {
+ if (!Math_StepToF(&this->linearVelocity, 0.0f, arg3)) {
+ return false;
+ }
+
+ this->currentYaw = arg2;
+ } else {
+ Math_AsymStepToF(&this->linearVelocity, arg1, arg4, arg5);
+ Math_ScaledStepToS(&this->currentYaw, arg2, arg6);
+ }
+
+ return true;
+}
+
+struct_8085D224 D_8085D224[][2] = {
+ {
+ { &gPlayerAnim_link_uma_left_up, 35.17f, 6.6099997f },
+ { &gPlayerAnim_link_uma_right_up, -34.16f, 7.91f },
+ },
+ {
+ { &gPlayerAnim_cl_uma_leftup, 22.718237f, 2.3294117f },
+ { &gPlayerAnim_cl_uma_rightup, -22.0f, 1.9800001f },
+ },
+};
+
+u16 D_8085D254[] = {
+ 0x1804, // PLAYER_FORM_GORON
+ 0x1805, // PLAYER_FORM_ZORA
+ 0x1806, // PLAYER_FORM_DEKU
+ 0x1806, // PLAYER_FORM_HUMAN
+};
+
+u16 D_8085D25C[] = {
+ 0x1804, // PLAYER_FORM_FIERCE_DEITY
+ 0x1804, // PLAYER_FORM_GORON
+ 0x1805, // PLAYER_FORM_ZORA
+ 0x1806, // PLAYER_FORM_DEKU
+};
+
+// Player_MountHorse
+s32 func_8083CCB4(Player* this, PlayState* play) {
+ EnHorse* rideActor = (EnHorse*)this->rideActor;
+
+ if (rideActor != NULL) {
+ if ((rideActor->type != HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ rideActor->actor.textId = D_8085D254[this->transformation - 1];
+ Player_TalkWithPlayer(play, &rideActor->actor);
+ return true;
+ }
+ }
+
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
+ } else if ((rideActor->type == HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_HUMAN)) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ rideActor->actor.textId = D_8085D25C[this->transformation];
+ Player_TalkWithPlayer(play, &rideActor->actor);
+ return true;
+ }
+ }
+
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
+ } else {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ s32 pad[2];
+ f32 sp28 = Math_CosS(rideActor->actor.shape.rot.y);
+ f32 sp24 = Math_SinS(rideActor->actor.shape.rot.y);
+ struct_8085D224* entry;
+ f32 temp_fv0;
+ f32 temp_fv1;
+
+ func_80832558(play, this, func_80837BD0);
+
+ this->stateFlags1 |= PLAYER_STATE1_800000;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER;
+ this->isBurning = false;
+
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
+ entry = D_8085D224[0];
+ } else {
+ entry = D_8085D224[1];
+ }
+ if (this->mountSide >= 0) {
+ entry++;
+ }
+
+ temp_fv0 = entry->unk_4;
+ temp_fv1 = entry->unk_8;
+ this->actor.world.pos.x =
+ rideActor->actor.world.pos.x + rideActor->riderPos.x + ((temp_fv0 * sp28) + (temp_fv1 * sp24));
+ this->actor.world.pos.z =
+ rideActor->actor.world.pos.z + rideActor->riderPos.z + ((temp_fv1 * sp28) - (temp_fv0 * sp24));
+ this->unk_B48 = rideActor->actor.world.pos.y - this->actor.world.pos.y;
+
+ this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y;
+
+ Actor_MountHorse(play, this, &rideActor->actor);
+ Player_AnimationPlayOnce(play, this, entry->anim);
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+ this->actor.parent = this->rideActor;
+ func_8082DAD4(this);
+ Actor_DeactivateLens(play);
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+PlayerAnimationHeader* D_8085D264[] = {
+ &gPlayerAnim_link_normal_down_slope_slip,
+ &gPlayerAnim_link_normal_up_slope_slip,
+};
+
+s32 func_8083CF68(PlayState* play, Player* this) {
+ if (!Player_InBlockingCsMode(play, this) && !(this->cylinder.base.ocFlags1 & OC1_HIT)) {
+ if ((func_80853D68 != this->actionFunc) && (func_80857BE8 != this->actionFunc) &&
+ (D_80862B40 == FLOOR_EFFECT_1)) {
+ s16 playerVelYaw = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
+ Vec3f slopeNormal;
+ s16 downwardSlopeYaw;
+ s16 velYawToDownwardSlope;
+ f32 slopeSlowdownSpeed;
+ f32 temp_fv1;
+ f32 var_fa1;
+ f32 slopeSlowdownSpeedStep;
+
+ Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw);
+ velYawToDownwardSlope = downwardSlopeYaw - playerVelYaw;
+
+ if (ABS_ALT(velYawToDownwardSlope) > 0x3E80) { // 87.9 degrees
+ var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->unk_B6C) : slopeNormal.y;
+ slopeSlowdownSpeed = (1.0f - var_fa1) * 40.0f;
+ temp_fv1 = fabsf(this->actor.speed) + slopeSlowdownSpeed;
+ slopeSlowdownSpeedStep = SQ(temp_fv1) * 0.011f;
+ slopeSlowdownSpeedStep = CLAMP_MIN(slopeSlowdownSpeedStep, 2.2f);
+
+ // slows down speed as player is climbing a slope
+ this->pushedYaw = downwardSlopeYaw;
+ Math_StepToF(&this->pushedSpeed, slopeSlowdownSpeed, slopeSlowdownSpeedStep);
+ } else {
+ Player_SetAction(play, this, func_80853D68, 0);
+ func_8082DE50(play, this);
+ func_8082E514(play, this, D_8085D264[this->unk_AE7]);
+ this->linearVelocity = sqrtf(SQXZ(this->actor.velocity));
+ this->currentYaw = downwardSlopeYaw;
+ if (D_80862B28 >= 0) {
+ this->unk_AE7 = 1;
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG);
+ }
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) {
+ Item00Type dropType = GIFIELD_GET_DROP_TYPE(giEntry->field);
+
+ if (!(giEntry->field & GIFIELD_NO_COLLECTIBLE)) {
+ Item_DropCollectible(play, &this->actor.world.pos, dropType | 0x8000);
+
+ if ((dropType == ITEM00_BOMBS_A) || (dropType == ITEM00_ARROWS_30) || (dropType == ITEM00_ARROWS_40) ||
+ (dropType == ITEM00_ARROWS_50) || (dropType == ITEM00_RUPEE_GREEN) || (dropType == ITEM00_RUPEE_BLUE) ||
+ (dropType == ITEM00_RUPEE_RED) || (dropType == ITEM00_RUPEE_PURPLE) || (dropType == ITEM00_RUPEE_HUGE)) {
+ return;
+ }
+ }
+
+ Item_Give(play, giEntry->itemId);
+ play_sound((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM);
+}
+
+s32 func_8083D23C(Player* this, PlayState* play) {
+ if (gSaveContext.save.saveInfo.playerData.health != 0) {
+ Actor* interactRangeActor = this->interactRangeActor;
+
+ if (interactRangeActor != NULL) {
+ if (this->getItemId > GI_NONE) {
+ if (this->getItemId < GI_MAX) {
+ GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
+
+ interactRangeActor->parent = &this->actor;
+ if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) ||
+ ((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) {
+ func_8082DCA0(play, this);
+ func_80838830(this, giEntry->objectId);
+
+ if (!(this->stateFlags2 & PLAYER_STATE2_400) ||
+ (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER)) {
+ Player_StopCutscene(this);
+ func_808324EC(play, this, func_80837C78, play->playerCsIds[PLAYER_CS_ID_ITEM_GET]);
+ func_8082DB90(play, this,
+ (this->transformation == PLAYER_FORM_DEKU)
+ ? &gPlayerAnim_pn_getB
+ : &gPlayerAnim_link_demo_get_itemB);
+ }
+
+ this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000);
+ func_8082DAD4(this);
+
+ return true;
+ }
+
+ func_8083D168(play, this, giEntry);
+ this->getItemId = GI_NONE;
+ }
+ } else if (this->csMode == PLAYER_CSMODE_0) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800)) {
+ if (this->getItemId != GI_NONE) {
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ GetItemEntry* giEntry = &sGetItemTable[-this->getItemId - 1];
+ EnBox* chest = (EnBox*)interactRangeActor;
+
+ if ((giEntry->itemId != ITEM_NONE) &&
+ (((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) &&
+ (giEntry->field & GIFIELD_40)) ||
+ (((Item_CheckObtainability(giEntry->itemId) != ITEM_NONE)) &&
+ (giEntry->field & GIFIELD_20)))) {
+ this->getItemId =
+ (giEntry->itemId == ITEM_MASK_CAPTAIN) ? -GI_RECOVERY_HEART : -GI_RUPEE_BLUE;
+ giEntry = &sGetItemTable[-this->getItemId - 1];
+ }
+
+ func_80832558(play, this, func_80837C78);
+ this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000);
+ func_80838830(this, giEntry->objectId);
+
+ this->actor.world.pos.x =
+ interactRangeActor->world.pos.x -
+ (Math_SinS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C);
+ this->actor.world.pos.z =
+ interactRangeActor->world.pos.z -
+ (Math_CosS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C);
+ this->actor.world.pos.y = interactRangeActor->world.pos.y;
+ this->currentYaw = this->actor.shape.rot.y = interactRangeActor->shape.rot.y;
+
+ func_8082DAD4(this);
+ if ((giEntry->itemId != ITEM_NONE) && (giEntry->gid >= 0) &&
+ (Item_CheckObtainability(giEntry->itemId) == ITEM_NONE)) {
+ this->csId = chest->csId2;
+ func_8082DB90(play, this, this->ageProperties->openChestAnim);
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 |
+ ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER;
+ chest->unk_1EC = 1;
+ } else {
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_box_kick);
+ chest->unk_1EC = -1;
+ }
+
+ return true;
+ }
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (this->transformation != PLAYER_FORM_DEKU)) {
+ if ((this->heldActor == NULL) || Player_IsHoldingHookshot(this)) {
+ EnBom* bomb = (EnBom*)interactRangeActor;
+
+ if (((this->transformation != PLAYER_FORM_GORON) &&
+ (((bomb->actor.id == ACTOR_EN_BOM) && bomb->isPowderKeg) ||
+ ((interactRangeActor->id == ACTOR_EN_ISHI) && (interactRangeActor->params & 1)) ||
+ (interactRangeActor->id == ACTOR_EN_MM)))) {
+ return false;
+ }
+
+ this->stateFlags2 |= PLAYER_STATE2_10000;
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ func_80832558(play, this, func_808379C0);
+ func_8082DAD4(this);
+ this->stateFlags1 |= PLAYER_STATE1_800;
+
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+// Player_SetAction_Throwing
+void func_8083D6DC(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084E65C, 1);
+ Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_28][this->modelAnimType]);
+}
+
+// Determines whether a held actor should be dropped or thrown: false implies droppable.
+s32 func_8083D738(Player* this, Actor* heldActor) {
+ if ((heldActor != NULL) && !(heldActor->flags & ACTOR_FLAG_800000) &&
+ ((this->linearVelocity < 1.1f) || (heldActor->id == ACTOR_EN_BOM_CHU))) {
+ return false;
+ }
+ return true;
+}
+
+s32 func_8083D78C(Player* this, PlayState* play) {
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ if ((this->heldActor != NULL) &&
+ CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) {
+ if (!func_808313A8(play, this, this->heldActor)) {
+ if (!func_8083D738(this, this->heldActor)) {
+ Player_SetAction(play, this, func_8084E58C, 1);
+ Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_29][this->modelAnimType]);
+ return true;
+ }
+ func_8083D6DC(this, play);
+ }
+
+ return true;
+ }
+ }
+ return false;
+}
+
+s32 func_8083D860(Player* this, PlayState* play) {
+ if ((this->wallHeight >= 79.0f) &&
+ (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) ||
+ (this->actor.depthInWater < this->ageProperties->unk_2C))) {
+ s32 var_t0 = (sPlayerCurrentWallFlags & WALL_FLAG_3) ? 2 : 0;
+ s32 temp_t2 = sPlayerCurrentWallFlags & WALL_FLAG_1;
+
+ if ((var_t0 != 0) || temp_t2 ||
+ SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) {
+ CollisionPoly* wallPoly = this->actor.wallPoly;
+ f32 sp78;
+ f32 sp74;
+ f32 zOut;
+ f32 yOut;
+ Vec3f sp48[3];
+ s32 i;
+ f32 sp40;
+ Vec3f* sp3C;
+ f32 xOut;
+
+ yOut = xOut = 0.0f;
+ if (var_t0 != 0) {
+ sp78 = this->actor.world.pos.x;
+ sp74 = this->actor.world.pos.z;
+ } else {
+ sp3C = sp48;
+ CollisionPoly_GetVerticesByBgId(wallPoly, this->actor.wallBgId, &play->colCtx, sp48);
+ sp78 = xOut = sp48[0].x;
+ sp74 = zOut = sp48[0].z;
+ yOut = sp48[0].y;
+
+ for (i = 1; i < ARRAY_COUNT(sp48); i++) {
+ sp3C++;
+
+ if (sp78 > sp3C->x) {
+ sp78 = sp3C->x;
+ } else if (xOut < sp3C->x) {
+ xOut = sp3C->x;
+ }
+
+ if (sp74 > sp3C->z) {
+ sp74 = sp3C->z;
+ } else if (zOut < sp3C->z) {
+ zOut = sp3C->z;
+ }
+
+ if (yOut > sp3C->y) {
+ yOut = sp3C->y;
+ }
+ }
+
+ sp78 = (sp78 + xOut) * 0.5f;
+ sp74 = (sp74 + zOut) * 0.5f;
+
+ xOut = ((this->actor.world.pos.x - sp78) * COLPOLY_GET_NORMAL(wallPoly->normal.z)) -
+ ((this->actor.world.pos.z - sp74) * COLPOLY_GET_NORMAL(wallPoly->normal.x));
+
+ sp40 = this->actor.world.pos.y - yOut;
+ yOut = ((s32)((sp40 / 15.0f) + 0.5f) * 15.0f) - sp40;
+ xOut = fabsf(xOut);
+ }
+
+ if (xOut < 8.0f) {
+ f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x);
+ f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z);
+ f32 wallDistance = this->wallDistance;
+ PlayerAnimationHeader* anim;
+
+ func_80832558(play, this, func_80837C20);
+
+ this->stateFlags1 |= PLAYER_STATE1_200000;
+ this->stateFlags1 &= ~PLAYER_STATE1_8000000;
+
+ if ((var_t0 != 0) || temp_t2) {
+ if ((this->unk_AE7 = var_t0) != 0) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ anim = &gPlayerAnim_link_normal_Fclimb_startA;
+
+ } else {
+ anim = &gPlayerAnim_link_normal_Fclimb_hold2upL;
+ }
+ wallDistance = (this->ageProperties->unk_3C + 4.0f) - wallDistance;
+ } else {
+ anim = this->ageProperties->unk_AC;
+ wallDistance = 20.5f;
+ }
+
+ this->unk_AE8 = -2;
+ this->actor.world.pos.y += yOut;
+
+ this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000;
+ } else {
+ anim = this->ageProperties->unk_B0;
+ wallDistance = (this->ageProperties->unk_38 - this->ageProperties->unk_3C) + 17.0f;
+ this->unk_AE8 = -4;
+
+ this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE
+ }
+
+ this->actor.world.pos.x = (wallDistance * wallPolyNormalX) + sp78;
+ this->actor.world.pos.z = (wallDistance * wallPolyNormalZ) + sp74;
+ func_8082DAD4(this);
+ Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos);
+ Player_AnimationPlayOnce(play, this, anim);
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE |
+ ANIM_FLAG_80);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+void func_8083DCC4(Player* this, PlayerAnimationHeader* anim, PlayState* play) {
+ func_8083172C(play, this, func_8084FC0C, 0);
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 4.0f / 3.0f);
+}
+
+s32 func_8083DD1C(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, f32 arg5) {
+ CollisionPoly* wallPoly;
+ s32 bgId;
+ Vec3f sp74;
+ Vec3f sp68;
+ Vec3f sp5C;
+ f32 cos = Math_CosS(this->actor.shape.rot.y);
+ f32 sin = Math_SinS(this->actor.shape.rot.y);
+
+ sp74.x = this->actor.world.pos.x + (arg5 * sin);
+ sp74.z = this->actor.world.pos.z + (arg5 * cos);
+ sp68.x = this->actor.world.pos.x + (arg4 * sin);
+ sp68.z = this->actor.world.pos.z + (arg4 * cos);
+ sp74.y = sp68.y = this->actor.world.pos.y + arg2;
+
+ if (BgCheck_EntityLineTest2(&play->colCtx, &sp74, &sp68, &sp5C, &this->actor.wallPoly, true, false, false, true,
+ &bgId, &this->actor)) {
+ f32 wallPolyNormalX;
+ f32 wallPolyNormalZ;
+
+ wallPoly = this->actor.wallPoly;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT;
+ this->actor.wallBgId = bgId;
+ sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, bgId);
+
+ wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x);
+ wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z);
+
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Math_Atan2S_XY(-wallPolyNormalZ, -wallPolyNormalX), 0x320);
+
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.world.pos.x = sp5C.x - (Math_SinS(this->actor.shape.rot.y) * arg3);
+ this->actor.world.pos.z = sp5C.z - (Math_CosS(this->actor.shape.rot.y) * arg3);
+
+ return true;
+ }
+
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT;
+ return false;
+}
+
+void func_8083DEE4(PlayState* play, Player* this) {
+ f32 temp_fv0 = this->ageProperties->unk_38;
+
+ func_8083DD1C(play, this, 268 * 0.1f, temp_fv0 + 5.0f, temp_fv0 + 15.0f, 0.0f);
+}
+
+void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) {
+ if (!func_80832558(play, this, func_80837BF8)) {
+ Player_SetAction(play, this, func_8084ED9C, 0);
+ }
+
+ Player_AnimationPlayOnce(play, this, anim);
+ func_8082DAD4(this);
+
+ this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000;
+}
+
+s32 func_8083DFC4(Player* this, PlayState* play) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
+ (D_80862B20 < 0x3000)) {
+ if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) {
+ return true;
+ }
+
+ if (!func_801242B4(this) && ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_4)) &&
+ (sPlayerCurrentWallFlags & WALL_FLAG_6) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (this->wallHeight >= 39.0f)) {
+ this->stateFlags2 |= PLAYER_STATE2_1;
+
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) {
+ DynaPolyActor* dyna;
+
+ if ((this->actor.wallBgId != BGCHECK_SCENE) &&
+ ((dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId)) != NULL)) {
+ this->rightHandActor = &dyna->actor;
+ } else {
+ this->rightHandActor = NULL;
+ }
+
+ func_8083DF38(this, &gPlayerAnim_link_normal_push_wait, play);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 func_8083E14C(PlayState* play, Player* this) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
+ ((this->stateFlags2 & PLAYER_STATE2_10) || CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) {
+ DynaPolyActor* var_v1 = NULL;
+
+ if (this->actor.wallBgId != BGCHECK_SCENE) {
+ var_v1 = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId);
+ }
+
+ if (&var_v1->actor == this->rightHandActor) {
+ if (this->stateFlags2 & PLAYER_STATE2_10) {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ func_808369F4(this, play);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_wait_end);
+ this->stateFlags2 &= ~PLAYER_STATE2_10;
+ return true;
+}
+
+void func_8083E234(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084EE50, 0);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_start);
+ this->stateFlags2 |= PLAYER_STATE2_10;
+}
+
+void func_8083E28C(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084EF9C, 0);
+ Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_34][this->modelAnimType]);
+ this->stateFlags2 |= PLAYER_STATE2_10;
+}
+
+void func_8083E2F4(Player* this, PlayState* play) {
+ this->stateFlags1 &= ~(PLAYER_STATE1_200000 | PLAYER_STATE1_8000000);
+ func_80833AA0(this, play);
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ this->linearVelocity = -1.7f;
+ } else {
+ this->linearVelocity = -0.4f;
+ }
+}
+
+s32 func_8083E354(Player* this, PlayState* play) {
+ if (!CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT)) {
+ if ((sPlayerCurrentWallFlags & WALL_FLAG_3) || (sPlayerCurrentWallFlags & WALL_FLAG_1) ||
+ SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) {
+ return false;
+ }
+ }
+
+ func_8083E2F4(this, play);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP);
+ return true;
+}
+
+s32 func_8083E404(Player* this, f32 arg1, s16 arg2) {
+ f32 sp1C = BINANG_SUB(arg2, this->actor.shape.rot.y);
+ f32 temp_fv1;
+
+ if (this->targetedActor != NULL) {
+ func_8083C62C(this, func_800B7128(this) || func_8082EF20(this));
+ }
+
+ temp_fv1 = fabsf(sp1C) / 0x8000;
+ if (((SQ(temp_fv1) * 50.0f) + 6.0f) < arg1) {
+ return 1;
+ }
+
+ if ((((1.0f - temp_fv1) * 10.0f) + 6.8f) < arg1) {
+ return -1;
+ }
+ return 0;
+}
+
+s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) {
+ s16 temp_v1 = *arg3 - this->targetYaw;
+ u16 var_a2 = ABS_ALT(temp_v1);
+
+ if ((func_800B7128(this) || func_8082EF20(this)) && (this->targetedActor == NULL)) {
+ *arg2 *= Math_SinS(var_a2);
+
+ if (*arg2 != 0.0f) {
+ *arg3 = (((temp_v1 >= 0) ? 1 : -1) * 0x4000) + this->actor.shape.rot.y;
+ } else {
+ *arg3 = this->actor.shape.rot.y;
+ }
+
+ if (this->targetedActor != NULL) {
+ func_8083C62C(this, true);
+ } else {
+ Math_SmoothStepToS(&this->actor.focus.rot.x, (sPlayerControlInput->rel.stick_y * 240.0f), 0xE, 0xFA0, 0x1E);
+ func_80832754(this, true);
+ }
+ } else {
+ if (this->targetedActor != NULL) {
+ return func_8083E404(this, *arg2, *arg3);
+ }
+
+ func_8083C6E8(this, play);
+ if ((*arg2 != 0.0f) && (var_a2 < 0x1770)) {
+ return 1;
+ }
+
+ if ((Math_SinS(0x4000 - (var_a2 >> 1)) * 200.0f) < *arg2) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+s32 func_8083E758(Player* this, f32* arg1, s16* arg2) {
+ f32 temp_fv0;
+ u16 temp_v0;
+ s16 var_v1;
+
+ var_v1 = *arg2 - this->actor.shape.rot.y;
+ temp_v0 = ABS_ALT(var_v1);
+ temp_fv0 = Math_CosS(temp_v0);
+ *arg1 *= temp_fv0;
+
+ // Can't be (*arg1 != 0.0f)
+ if (*arg1 != 0) {
+ if (temp_fv0 > 0.0f) {
+ return 1;
+ }
+ return -1;
+ }
+ return 0;
+}
+
+s32 func_8083E7F8(Player* this, f32* arg1, s16* arg2, PlayState* play) {
+ func_8083C6E8(this, play);
+
+ if ((*arg1 != 0.0f) || (ABS_ALT(this->unk_B4C) > 0x190)) {
+ s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ u16 temp;
+
+ temp = (ABS_ALT(temp_a0) - 0x2000);
+ if ((temp < 0x4000) || (this->unk_B4C != 0)) {
+ return -1;
+ }
+ return 1;
+ }
+
+ return 0;
+}
+
+void func_8083E8E0(Player* this, f32 arg1, s16 arg2) {
+ s16 temp = arg2 - this->actor.shape.rot.y;
+
+ if (arg1 > 0.0f) {
+ if (temp < 0) {
+ this->unk_B44 = 0.0f;
+ } else {
+ this->unk_B44 = 1.0f;
+ }
+ }
+
+ Math_StepToF(&this->unk_B40, this->unk_B44, 0.3f);
+}
+
+void func_8083E958(PlayState* play, Player* this) {
+ PlayerAnimation_BlendToJoint(play, &this->skelAnime, func_8082EF54(this), this->unk_B38, func_8082EF9C(this),
+ this->unk_B38, this->unk_B40, this->blendTableBuffer);
+}
+
+s32 func_8083E9C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) {
+ f32 temp_fv0;
+
+ if ((arg3 == 0.0f) && (arg1 > 0.0f)) {
+ arg3 = arg2;
+ }
+ temp_fv0 = (arg0 + arg1) - arg3;
+ if (((temp_fv0 * arg1) >= 0.0f) && (((temp_fv0 - arg1) * arg1) < 0.0f)) {
+ return true;
+ }
+ return false;
+}
+
+void func_8083EA44(Player* this, f32 arg1) {
+ s32 sp24;
+ f32 updateScale = R_UPDATE_RATE / 2.0f;
+
+ arg1 *= updateScale;
+ if (arg1 < -7.25f) {
+ arg1 = -7.25f;
+ } else if (arg1 > 7.25f) {
+ arg1 = 7.25f;
+ }
+
+ sp24 = func_8083E9C4(this->unk_B38, arg1, 29.0f, 10.0f);
+
+ if (sp24 || func_8083E9C4(this->unk_B38, arg1, 29.0f, 24.0f)) {
+ Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity);
+ if (this->linearVelocity > 4.0f) {
+ this->stateFlags2 |= PLAYER_STATE2_8;
+ }
+ this->actor.shape.unk_17 = sp24 ? 1 : 2;
+ }
+
+ this->unk_B38 += arg1;
+ if (this->unk_B38 < 0.0f) {
+ this->unk_B38 += 29.0f;
+ } else if (this->unk_B38 >= 29.0f) {
+ this->unk_B38 -= 29.0f;
+ }
+}
+
+void Player_ChooseIdleAnim(PlayState* play, Player* this) {
+ PlayerAnimationHeader* anim;
+ u32 healthIsCritical;
+ PlayerAnimationHeader** animPtr;
+ s32 animIndex;
+ s32 rand;
+ f32 morphFrames;
+ s16 lastFrame;
+
+ if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) ||
+ ((this->actor.id == ACTOR_PLAYER) &&
+ (((this->targetedActor != NULL) ||
+ ((this->transformation != PLAYER_FORM_FIERCE_DEITY) && (this->transformation != PLAYER_FORM_HUMAN)) ||
+ (this->currentMask == PLAYER_MASK_SCENTS)) ||
+ (!(healthIsCritical = LifeMeter_IsCritical()) && (this->unk_AA4 = ((this->unk_AA4 + 1) & 1)))))) {
+ this->stateFlags2 &= ~PLAYER_STATE2_10000000;
+ anim = func_8082ED20(this);
+ } else {
+ this->stateFlags2 |= PLAYER_STATE2_10000000;
+
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ anim = func_8082ED20(this);
+ } else {
+ animIndex = play->roomCtx.curRoom.behaviorType2;
+
+ if (healthIsCritical) {
+ if (this->unk_AA4 >= 0) {
+ animIndex = 7;
+ this->unk_AA4 = -1;
+ } else {
+ animIndex = 8;
+ }
+ } else {
+ rand = Rand_ZeroOne() * 5.0f;
+ if (rand < 4) {
+ if (((rand != 0) && (rand != 3)) ||
+ ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) &&
+ ((rand == 3) || (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)))) {
+ if ((rand == 0) && Player_IsHoldingTwoHandedWeapon(this)) {
+ rand = 4;
+ }
+ animIndex = rand + 9;
+ }
+ }
+ }
+
+ animPtr = &sPlayerIdleAnimations[animIndex][0];
+ if (this->modelAnimType != PLAYER_ANIMTYPE_1) {
+ animPtr = &sPlayerIdleAnimations[animIndex][1];
+ }
+ anim = *animPtr;
+ }
+ }
+
+ lastFrame = Animation_GetLastFrame(anim);
+ if ((this->skelAnime.animation == anim) || (this->skelAnime.animation == &gPlayerAnim_pz_attackAend) ||
+ (this->skelAnime.animation == &gPlayerAnim_pz_attackBend) ||
+ (this->skelAnime.animation == &gPlayerAnim_pz_attackCend)) {
+ morphFrames = 0.0f;
+ } else {
+ morphFrames = -6.0f;
+ }
+
+ PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE,
+ morphFrames);
+}
+
+void func_8083EE60(Player* this, PlayState* play) {
+ f32 temp_fv0;
+ f32 var_fs0;
+
+ if (this->unk_B34 < 1.0f) {
+ f32 temp_fs0 = R_UPDATE_RATE / 2.0f;
+
+ func_8083EA44(this, REG(35) / 1000.0f);
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType],
+ this->unk_B38);
+ this->unk_B34 += (1.0f * 1.0f) * temp_fs0;
+ if (this->unk_B34 >= 1.0f) {
+ this->unk_B34 = 1.0f;
+ }
+ var_fs0 = this->unk_B34;
+ } else {
+ temp_fv0 = this->linearVelocity - (REG(48) / 100.0f);
+
+ if (temp_fv0 < 0.0f) {
+ var_fs0 = 1.0f;
+ func_8083EA44(this, ((REG(35)) / 1000.0f) + (((REG(36)) / 1000.0f) * this->linearVelocity));
+
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType],
+ this->unk_B38);
+ } else {
+ var_fs0 = (REG(37) / 1000.0f) * temp_fv0;
+ if (var_fs0 < 1.0f) {
+ func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity));
+ } else {
+ var_fs0 = 1.0f;
+ func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0));
+ }
+
+ PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType],
+ this->unk_B38);
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, &gPlayerAnim_link_normal_back_run,
+ this->unk_B38 * (16.0f / 29.0f));
+ }
+ }
+ if (var_fs0 < 1.0f) {
+ PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0);
+ }
+}
+
+void func_8083F144(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084A794, 1);
+ func_8082E438(play, this, &gPlayerAnim_link_normal_back_brake);
+}
+
+s32 func_8083F190(Player* this, f32* arg1, s16* arg2, PlayState* play) {
+ if (this->linearVelocity > 6.0f) {
+ func_8083F144(this, play);
+ return true;
+ }
+
+ if (*arg1 != 0.0f) {
+ if (func_80832F24(this)) {
+ *arg1 = 0.0f;
+ *arg2 = this->currentYaw;
+ } else {
+ return true;
+ }
+ }
+ return false;
+}
+
+void func_8083F230(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084A884, 1);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_brake_end);
+}
+
+void func_8083F27C(PlayState* play, Player* this) {
+ f32 temp_fv0;
+ PlayerAnimationHeader* sp38;
+ PlayerAnimationHeader* sp34;
+
+ sp38 = D_8085BE84[PLAYER_ANIMGROUP_23][this->modelAnimType];
+ sp34 = D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType];
+
+ this->skelAnime.animation = sp38;
+
+ func_8083EA44(this, (REG(30) / 1000.0f) + ((REG(32) / 1000.0f) * this->linearVelocity));
+
+ temp_fv0 = this->unk_B38 * (16.0f / 29.0f);
+ PlayerAnimation_BlendToJoint(play, &this->skelAnime, sp34, temp_fv0, sp38, temp_fv0, this->unk_B40,
+ this->blendTableBuffer);
+}
+
+void func_8083F358(Player* this, s32 arg1, PlayState* play) {
+ PlayerAnimationHeader* climbAnim;
+ f32 var_fv1;
+ s16 var_a1;
+
+ if (ABS_ALT(D_80862B28) < 0xE38) {
+ var_a1 = 0;
+ } else {
+ var_a1 = CLAMP(D_80862B28, -0x2AAA, 0x2AAA);
+ }
+
+ Math_ScaledStepToS(&this->unk_B70, var_a1, 0x190);
+ if ((this->modelAnimType == PLAYER_ANIMTYPE_3) || ((this->unk_B70 == 0) && (this->unk_AB8 <= 0.0f))) {
+ if (arg1 == 0) {
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType],
+ this->unk_B38);
+ } else {
+ PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType],
+ this->unk_B38);
+ }
+ return;
+ }
+
+ if (this->unk_B70 != 0) {
+ var_fv1 = this->unk_B70 / (f32)0x2AAA;
+ } else {
+ var_fv1 = this->unk_AB8 * 0.0006f;
+ }
+
+ var_fv1 *= fabsf(this->linearVelocity) * 0.5f;
+ if (var_fv1 > 1.0f) {
+ var_fv1 = 1.0f;
+ }
+
+ if (var_fv1 < 0.0f) {
+ climbAnim = &gPlayerAnim_link_normal_climb_down;
+ var_fv1 = -var_fv1;
+ } else {
+ climbAnim = &gPlayerAnim_link_normal_climb_up;
+ }
+
+ if (arg1 == 0) {
+ PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType],
+ this->unk_B38, climbAnim, this->unk_B38, var_fv1, this->blendTableBuffer);
+ } else {
+ PlayerAnimation_BlendToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType],
+ this->unk_B38, climbAnim, this->unk_B38, var_fv1, this->blendTableBuffer);
+ }
+}
+
+void func_8083F57C(Player* this, PlayState* play) {
+ f32 temp_fv0;
+ f32 var_fs0;
+
+ if (this->unk_B34 < 1.0f) {
+ f32 temp_fs0;
+
+ temp_fs0 = R_UPDATE_RATE / 2.0f;
+ func_8083EA44(this, REG(35) / 1000.0f);
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType],
+ this->unk_B38);
+
+ // required
+ this->unk_B34 += 1 * temp_fs0;
+ if (this->unk_B34 >= 1.0f) {
+ this->unk_B34 = 1.0f;
+ }
+ var_fs0 = this->unk_B34;
+ } else {
+ temp_fv0 = (this->linearVelocity - (REG(48) / 100.0f));
+ if (temp_fv0 < 0.0f) {
+ var_fs0 = 1.0f;
+ func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity));
+ func_8083F358(this, 0, play);
+ } else {
+ var_fs0 = (REG(37) / 1000.0f) * temp_fv0;
+ if (var_fs0 < 1.0f) {
+ func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity));
+ } else {
+ var_fs0 = 1.0f;
+ func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0));
+ }
+ func_8083F358(this, 1, play);
+ PlayerAnimation_LoadToJoint(play, &this->skelAnime, func_8082EEE0(this), this->unk_B38 * (20.0f / 29.0f));
+ }
+ }
+
+ if (var_fs0 < 1.0f) {
+ PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0);
+ }
+}
+
+void func_8083F828(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) {
+ arg1->x = Rand_CenteredFloat(arg3) + arg0->x;
+ arg1->y = Rand_CenteredFloat(arg4) + (arg0->y + arg2);
+ arg1->z = Rand_CenteredFloat(arg3) + arg0->z;
+}
+
+Color_RGBA8 D_8085D26C = { 255, 255, 255, 255 };
+Vec3f D_8085D270 = { 0.0f, 0.04f, 0.0f };
+
+s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 randAccelWeight, s32 scale,
+ s32 scaleStep, s32 useLighting) {
+ static Vec3f D_8085D27C = { 0.0f, 0.0f, 0.0f };
+ static Vec3f D_8085D288 = { 0.0f, 0.0f, 0.0f };
+
+ if ((countMax < 0) || (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG)) {
+ s32 count = func_80173B48(&play->state) / 20000000;
+ Vec3f pos;
+ s32 i;
+
+ count = (count >= ABS_ALT(countMax)) ? ABS_ALT(countMax) : count;
+ for (i = 0; i < count; i++) {
+ func_8083F828(&this->actor.world.pos, &pos, 0.0f, 40.0f, 10.0f);
+ D_8085D27C.x = Rand_CenteredFloat(3.0f);
+ D_8085D27C.z = Rand_CenteredFloat(3.0f);
+ EffectSsDust_Spawn(play, 0, &pos, &D_8085D27C, &D_8085D270, &D_8085D26C, &D_8085D26C, scale, scaleStep, 42,
+ 0);
+ }
+
+ return true;
+ } else if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) ||
+ (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) {
+ s32 count = func_80173B48(&play->state) / 12000000;
+
+ if (count > 0) {
+ Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, radius,
+ (count < countMax) ? count : countMax, randAccelWeight, scale, scaleStep,
+ useLighting);
+
+ return true;
+ }
+ } else if (this->floorSfxOffset == NA_SE_PL_WALK_GRASS - SFX_FLAG) {
+ s32 count = func_80173B48(&play->state) / 12000000;
+ Vec3f velocity;
+ Vec3f pos;
+ s32 i;
+
+ count = (count >= countMax) ? countMax : count;
+ for (i = 0; i < count; i++) {
+ func_8083F828(&this->actor.world.pos, &pos, 0.0f, 20.0f, 20.0f);
+ velocity.x = Rand_CenteredFloat(3.0f);
+ velocity.y = Rand_ZeroFloat(2.0f);
+ velocity.z = Rand_CenteredFloat(3.0f);
+ D_8085D288.y = -0.1f;
+ EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip);
+ }
+ }
+
+ return false;
+}
+
+s32 func_8083FBC4(PlayState* play, Player* this) {
+ if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) ||
+ (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) {
+ Vec3f* feetPos = this->actor.shape.feetPos;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) {
+ func_800B1210(play, feetPos, &gZeroVec3f, &gZeroVec3f, 50, 30);
+ feetPos++;
+ }
+
+ return true;
+ }
+
+ if (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) {
+ Vec3f* feetPos = this->actor.shape.feetPos;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) {
+ EffectSsDust_Spawn(play, 0, feetPos, &gZeroVec3f, &D_8085D270, &D_8085D26C, &D_8085D26C, 100, 40, 17, 0);
+ feetPos++;
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) {
+ if (arg4 < this->skelAnime.curFrame) {
+ func_8082DC38(this);
+ } else if (arg2 <= this->skelAnime.curFrame) {
+ this->stateFlags3 |= PLAYER_STATE3_2000000;
+ func_8082FA5C(play, this,
+ (arg3 <= this->skelAnime.curFrame) ? PLAYER_MELEE_WEAPON_STATE_1
+ : PLAYER_MELEE_WEAPON_STATE_MINUS_1);
+ return true;
+ }
+ return false;
+}
+
+// Crouch-stabbing
+s32 func_8083FD80(Player* this, PlayState* play) {
+ if (!Player_IsGoronOrDeku(this) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) &&
+ (this->transformation != PLAYER_FORM_ZORA) && (D_80862B48 != 0)) {
+ //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab".
+ func_8083375C(this, PLAYER_MWA_STAB_1H);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru);
+ this->unk_AE7 = 1;
+ this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H;
+ this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y;
+ this->unk_ADD = 0;
+ return true;
+ }
+ return false;
+}
+
+s32 func_8083FE38(Player* this, PlayState* play) {
+ return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play);
+}
+
+void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) {
+ Player_RequestQuake(play, 27767, 7, 20);
+ Player_RequestRumble(play, this, 255, 20, 150, SQ(0));
+ Player_PlaySfx(this, sfxId);
+}
+
+void func_8083FEF4(PlayState* play, Player* this) {
+ Inventory_ChangeAmmo(ITEM_STICK, -1);
+ func_80831990(play, this, ITEM_NONE);
+}
+
+s32 func_8083FF30(PlayState* play, Player* this) {
+ if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B0C > 0.5f)) {
+ if (AMMO(ITEM_STICK) != 0) {
+ EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND],
+ BINANG_ADD(this->actor.shape.rot.y, 0x8000));
+ this->unk_B0C = 0.5f;
+ func_8083FEF4(play, this);
+ Player_PlaySfx(this, NA_SE_IT_WOODSTICK_BROKEN);
+ }
+ return true;
+ }
+
+ return false;
+}
+
+// handles razor sword health and breaking
+s32 func_8083FFEC(PlayState* play, Player* this) {
+ if (this->heldItemAction == PLAYER_IA_SWORD_RAZOR) {
+ if (gSaveContext.save.saveInfo.playerData.swordHealth > 0) {
+ gSaveContext.save.saveInfo.playerData.swordHealth--;
+ if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) {
+ Item_Give(play, ITEM_SWORD_KOKIRI);
+ func_80831990(play, this, ITEM_SWORD_KOKIRI);
+ Player_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN);
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
+ Message_StartTextbox(play, 0xF9, NULL);
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+// Could return the last function, but never used as such
+void func_80840094(PlayState* play, Player* this) {
+ func_8083FF30(play, this);
+ func_8083FFEC(play, this);
+}
+
+PlayerAnimationHeader* D_8085D294[] = {
+ &gPlayerAnim_link_fighter_rebound,
+ &gPlayerAnim_link_fighter_rebound_long,
+ &gPlayerAnim_link_fighter_reboundR,
+ &gPlayerAnim_link_fighter_rebound_longR,
+};
+
+void func_808400CC(PlayState* play, Player* this) {
+ if (func_8084B5C0 != this->actionFunc) {
+ func_8082DD2C(play, this);
+ if ((this->transformation != PLAYER_FORM_HUMAN) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) {
+ u8 moveFlags = this->skelAnime.moveFlags;
+ s32 pad;
+
+ this->skelAnime.moveFlags = 0;
+ Player_SetAction(play, this, func_80854C70, 0);
+ this->skelAnime.moveFlags = moveFlags;
+ } else {
+ s32 var_v1;
+ s32 pad;
+
+ Player_SetAction(play, this, func_80854C70, 0);
+ if (func_80123420(this)) {
+ var_v1 = 2;
+ } else {
+ var_v1 = 0;
+ }
+ func_8082DB90(play, this, D_8085D294[Player_IsHoldingTwoHandedWeapon(this) + var_v1]);
+ }
+ }
+
+ Player_RequestRumble(play, this, 180, 20, 100, SQ(0));
+ this->linearVelocity = -18.0f;
+ func_80840094(play, this);
+}
+
+s32 func_808401F4(PlayState* play, Player* this) {
+ if (this->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) {
+ s32 temp_v0_3;
+
+ if (this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) {
+ if (!(this->meleeWeaponQuads[0].base.atFlags & AT_BOUNCED) &&
+ !(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) {
+ if (this->skelAnime.curFrame >= 2.0f) {
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f spC8;
+ Vec3f pos;
+ Vec3f spB0;
+ Vec3f* var_a1;
+ Vec3f* temp_a0 = &this->meleeWeaponInfo[0].tip;
+ f32 var_fv1;
+
+ if (this->linearVelocity >= 0.0f) {
+ var_a1 = &this->meleeWeaponInfo[0].base;
+ if ((this->transformation == PLAYER_FORM_GORON) || (this->actor.id == ACTOR_EN_TEST3)) {
+ var_a1 = &this->unk_AF0[1];
+ }
+
+ var_fv1 = Math_Vec3f_DistXYZAndStoreDiff(temp_a0, var_a1, &spB0);
+ if (var_fv1 != 0.0f) {
+ var_fv1 = (var_fv1 + 10.0f) / var_fv1;
+ }
+
+ spC8.x = temp_a0->x + (spB0.x * var_fv1);
+ spC8.y = temp_a0->y + (spB0.y * var_fv1);
+ spC8.z = temp_a0->z + (spB0.z * var_fv1);
+ if (BgCheck_EntityLineTest2(&play->colCtx, &spC8, temp_a0, &pos, &poly, 1, 0, 0, 1, &bgId,
+ &this->actor)) {
+ if (!SurfaceType_IsIgnoredByEntities(&play->colCtx, poly, bgId) &&
+ (SurfaceType_GetFloorType(&play->colCtx, poly, bgId) != FLOOR_TYPE_6) &&
+ !func_800B90AC(play, &this->actor, poly, bgId, &pos)) {
+ if (this->transformation == PLAYER_FORM_GORON) {
+ MtxF sp64;
+ Vec3s actorRot;
+ DynaPolyActor* temp_v0;
+
+ func_8082DF2C(play);
+ Player_RequestQuakeAndRumble(play, this, NA_SE_IT_HAMMER_HIT);
+ if (this->transformation == PLAYER_FORM_GORON) {
+ Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f,
+ &this->actor.world.pos);
+ func_800C0094(poly, pos.x, pos.y, pos.z, &sp64);
+ Matrix_MtxFToYXZRot(&sp64, &actorRot, true);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, pos.x, pos.y, pos.z,
+ actorRot.x, actorRot.y, actorRot.z, 500);
+ }
+
+ if (bgId != BGCHECK_SCENE) {
+ temp_v0 = DynaPoly_GetActor(&play->colCtx, bgId);
+
+ if (((this->meleeWeaponQuads[0].base.atFlags & AT_HIT) &&
+ (&temp_v0->actor == this->meleeWeaponQuads[0].base.at)) ||
+ ((this->meleeWeaponQuads[1].base.atFlags & AT_HIT) &&
+ (&temp_v0->actor == this->meleeWeaponQuads[1].base.at))) {
+ return false;
+ }
+ }
+
+ func_808400CC(play, this);
+ if (this->transformation != PLAYER_FORM_GORON) {
+ return true;
+ }
+ return false;
+ }
+
+ if (this->linearVelocity >= 0.0f) {
+ SurfaceMaterial surfaceMaterial =
+ SurfaceType_GetMaterial(&play->colCtx, poly, bgId);
+
+ if (surfaceMaterial == SURFACE_MATERIAL_WOOD) {
+ CollisionCheck_SpawnShieldParticlesWood(play, &pos, &this->actor.projectedPos);
+ } else {
+ pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.x);
+ pos.y += 8.0f * COLPOLY_GET_NORMAL(poly->normal.y);
+ pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.z);
+ CollisionCheck_SpawnShieldParticles(play, &pos);
+
+ if (surfaceMaterial == SURFACE_MATERIAL_DIRT_SOFT) {
+ Player_PlaySfx(this, NA_SE_IT_WALL_HIT_SOFT);
+ } else {
+ Player_PlaySfx(this, NA_SE_IT_WALL_HIT_HARD);
+ }
+ }
+
+ func_80840094(play, this);
+ Player_RequestRumble(play, this, 180, 20, 100, SQ(0));
+ this->linearVelocity = -14.0f;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ func_808400CC(play, this);
+ func_8082DF2C(play);
+ return true;
+ }
+ }
+
+ temp_v0_3 = (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) != 0;
+ if (temp_v0_3 || (this->meleeWeaponQuads[1].base.atFlags & AT_HIT)) {
+ if ((this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) &&
+ (this->transformation != PLAYER_FORM_GORON)) {
+ Actor* temp_v1 = this->meleeWeaponQuads[temp_v0_3 ? 0 : 1].base.at;
+
+ if ((temp_v1 != NULL) && (temp_v1->id != ACTOR_EN_KANBAN)) {
+ func_8082DF2C(play);
+ }
+ }
+
+ if (!func_8083FF30(play, this)) {
+ func_8083FFEC(play, this);
+ if (this->actor.colChkInfo.atHitEffect == 1) {
+ this->actor.colChkInfo.damage = 8;
+ func_80833B18(play, this, 4, 0.0f, 0.0f, this->actor.shape.rot.y, 20);
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+Vec3f D_8085D2A4 = { 0.0f, 0.0f, 5.0f };
+
+void func_80840770(PlayState* play, Player* this) {
+ if (this->unk_AE8 != 0) {
+ if (this->unk_AE8 > 0) {
+ this->unk_AE8--;
+ if (this->unk_AE8 == 0) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_wait, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_wait), ANIMMODE_ONCE,
+ -16.0f);
+ } else {
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_derth_rebirth, 1.0f, 99.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_derth_rebirth), ANIMMODE_ONCE,
+ 0.0f);
+ }
+ gSaveContext.healthAccumulator = 0xA0;
+ this->unk_AE8 = -1;
+ }
+ } else if (gSaveContext.healthAccumulator == 0) {
+ Player_StopCutscene(this);
+
+ this->stateFlags1 &= ~PLAYER_STATE1_80;
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ func_808353DC(play, this);
+ } else {
+ func_8085B384(this, play);
+ }
+
+ this->unk_D6B = 20;
+ func_808339B4(this, -20);
+ Audio_SetBgmVolumeOn();
+ }
+ } else if (this->unk_AE7 != 0) {
+ Player_StopCutscene(this);
+ this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE];
+ this->unk_AE8 = 60;
+ Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, 5);
+ Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
+ } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) {
+ play->gameOverCtx.state = GAMEOVER_DEATH_FADE_OUT;
+ }
+}
+
+void func_80840980(Player* this, u16 sfxId) {
+ Player_AnimSfx_PlayVoice(this, sfxId);
+}
+
+void func_808409A8(PlayState* play, Player* this, f32 speed, f32 yVelocity) {
+ Actor* heldActor = this->heldActor;
+
+ if (!func_808313A8(play, this, heldActor)) {
+ heldActor->world.rot.y = this->actor.shape.rot.y;
+ heldActor->speed = speed;
+ heldActor->velocity.y = yVelocity;
+ func_808309CC(play, this);
+ Player_PlaySfx(this, NA_SE_PL_THROW);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ }
+}
+
+// Check if bonked and if so, rumble, play sound, etc.
+s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) {
+ Actor* cylinderOc = NULL;
+
+ if (arg3 <= *arg2) {
+ // If interacting with a wall and close to facing it
+ if (((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B24 < 0x1C00)) ||
+ // or, impacting something's cylinder
+ (((this->cylinder.base.ocFlags1 & OC1_HIT) && (cylinderOc = this->cylinder.base.oc) != NULL) &&
+ // and that something is a Beaver Race ring,
+ ((cylinderOc->id == ACTOR_EN_TWIG) ||
+ // or something is a tree and `this` is close to facing it (note the this actor's facing direction would
+ // be antiparallel to the cylinder's actor's yaw if this was directly facing it)
+ (((cylinderOc->id == ACTOR_EN_WOOD02) || (cylinderOc->id == ACTOR_EN_SNOWWD) ||
+ (cylinderOc->id == ACTOR_OBJ_TREE)) &&
+ (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, cylinderOc->yawTowardsPlayer)) > 0x6000))))) {
+
+ if (!func_8082DA90(play)) {
+ if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) {
+ func_8085B384(this, play);
+ return true;
+ }
+
+ if (cylinderOc != NULL) {
+ cylinderOc->home.rot.y = 1;
+ } else if (this->actor.wallBgId != BGCHECK_SCENE) { // i.e. was an actor
+ DynaPolyActor* wallPolyActor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId);
+
+ // Large crates, barrels and palm trees
+ if ((wallPolyActor != NULL) &&
+ ((wallPolyActor->actor.id == ACTOR_OBJ_KIBAKO2) ||
+ (wallPolyActor->actor.id == ACTOR_OBJ_TARU) || (wallPolyActor->actor.id == ACTOR_OBJ_YASI))) {
+ wallPolyActor->actor.home.rot.z = 1;
+ }
+ }
+
+ if (!(this->stateFlags3 & PLAYER_STATE3_1000)) {
+ if ((this->stateFlags3 & PLAYER_STATE3_8000) && (func_8084CA24 != this->actionFunc)) {
+ Player_SetAction(play, this, func_80851B58, 0);
+ func_8082DB90(play, this, &gPlayerAnim_link_swimer_swim_hit);
+ func_8082DD2C(play, this);
+ this->linearVelocity *= 0.2f;
+ } else {
+ Player_SetAction(play, this, func_8084C6EC, 0);
+ Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]);
+ this->unk_AE8 = 1;
+ }
+ }
+
+ this->linearVelocity = -this->linearVelocity;
+ Player_RequestQuake(play, 33267, 3, 12);
+ Player_RequestRumble(play, this, 255, 20, 150, SQ(0));
+ Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f, &this->actor.world.pos);
+ Player_PlaySfx(this, NA_SE_PL_BODY_HIT);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+s32 func_80840CD4(Player* this, PlayState* play) {
+ if (func_808387A0(play, this)) {
+ this->stateFlags2 |= PLAYER_STATE2_20000;
+ } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ PlayerMeleeWeaponAnimation meleeWeaponAnim;
+
+ if ((this->unk_B08 >= 0.85f) || func_808333CC(this)) {
+ meleeWeaponAnim = D_8085CF84[Player_IsHoldingTwoHandedWeapon(this)];
+ } else {
+ meleeWeaponAnim = D_8085CF80[Player_IsHoldingTwoHandedWeapon(this)];
+ }
+ func_80833864(play, this, meleeWeaponAnim);
+ func_808339B4(this, -8);
+ this->stateFlags2 |= PLAYER_STATE2_20000;
+ if (this->unk_AE3[this->unk_ADE] == 0) {
+ this->stateFlags2 |= PLAYER_STATE2_40000000;
+ }
+ } else {
+ return false;
+ }
+
+ return true;
+}
+
+void func_80840DEC(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084CE84, 1);
+}
+
+void func_80840E24(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084D18C, 1);
+}
+
+void func_80840E5C(Player* this, PlayState* play) {
+ func_808369F4(this, play);
+ func_8082DC38(this);
+ func_8082E438(play, this, D_8085CF68[Player_IsHoldingTwoHandedWeapon(this)]);
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_80840EC0(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_8084CCEC, 1);
+ Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]);
+ this->unk_AE8 = 1;
+ this->unk_B38 = 0.0f;
+}
+
+// Spin attack size
+void func_80840F34(Player* this) {
+ Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f);
+}
+
+s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* playerAction, f32 arg3, s16 arg4, s32 arg5) {
+ if ((arg5 != 0) && (this->linearVelocity == 0.0f)) {
+ return PlayerAnimation_Update(play, &this->skelAnime);
+ }
+
+ if (arg5 != 2) {
+ f32 halfUpdateRate = R_UPDATE_RATE / 2.0f;
+ f32 curDiffX = playerAction->endPos.x - this->actor.world.pos.x;
+ f32 curDiffZ = playerAction->endPos.z - this->actor.world.pos.z;
+ f32 scaledCurDist = sqrtf(SQ(curDiffX) + SQ(curDiffZ)) / halfUpdateRate;
+ s32 framesLeft = (playerAction->endFrame - play->csCtx.curFrame) + 1;
+
+ arg4 = Math_Atan2S_XY(curDiffZ, curDiffX);
+
+ if (arg5 == 1) {
+ f32 distX = playerAction->endPos.x - playerAction->startPos.x;
+ f32 distZ = playerAction->endPos.z - playerAction->startPos.z;
+ s32 temp = (((sqrtf(SQ(distX) + SQ(distZ)) / halfUpdateRate) /
+ (playerAction->endFrame - playerAction->startFrame)) /
+ 1.5f) *
+ 4.0f;
+ if (temp >= framesLeft) {
+ arg3 = 0.0f;
+ arg4 = this->actor.shape.rot.y;
+ } else {
+ arg3 = scaledCurDist / ((framesLeft - temp) + 1);
+ }
+ } else {
+ arg3 = scaledCurDist / framesLeft;
+ }
+ }
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ func_8083F57C(this, play);
+ func_8083CB58(this, arg3, arg4);
+ if ((arg3 == 0.0f) && (this->linearVelocity == 0.0f)) {
+ func_80839CD8(this, play);
+ }
+
+ return false;
+}
+
+s32 func_808411D4(PlayState* play, Player* this, f32* arg2, s32 arg3) {
+ f32 xDiff = this->unk_3A0.x - this->actor.world.pos.x;
+ f32 yDiff = this->unk_3A0.z - this->actor.world.pos.z;
+ s32 sp2C;
+ s32 pad2;
+ s16 var_v1;
+
+ sp2C = sqrtf(SQ(xDiff) + SQ(yDiff));
+ var_v1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0);
+ if (sp2C < arg3) {
+ *arg2 = 0.0f;
+ var_v1 = this->actor.shape.rot.y;
+ }
+ if (func_80840F90(play, this, NULL, *arg2, var_v1, 2)) {
+ return 0;
+ }
+ return sp2C;
+}
+
+void Player_InitMode_0(PlayState* play, Player* this) {
+ this->actor.update = func_801229EC;
+ this->actor.draw = NULL;
+}
+
+void Player_InitMode_2(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_80854118, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_okarina_warp_goal, 2.0f / 3.0f, 0.0f, 24.0f,
+ ANIMMODE_ONCE, 0.0f);
+ this->actor.world.pos.y += 800.0f;
+}
+
+u8 D_8085D2B0[] = {
+ ITEM_SWORD_RAZOR,
+ ITEM_SWORD_KOKIRI,
+};
+
+// OoT leftover?
+void func_80841358(PlayState* play, Player* this, s32 arg2) {
+ ItemId item;
+ PlayerItemAction itemAction;
+
+ //! @bug OoB read if player is goron, deku or human
+ item = D_8085D2B0[this->transformation];
+ itemAction = sItemItemActions[item];
+ func_808317C4(this);
+ func_8082DCA0(play, this);
+ this->heldItemId = item;
+ this->nextModelGroup = Player_ActionToModelGroup(this, itemAction);
+ func_8082F8BC(play, this, itemAction);
+ func_808309CC(play, this);
+ if (arg2) {
+ Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT);
+ }
+}
+
+Vec3f D_8085D2B4 = { -1.0f, 69.0f, 20.0f };
+
+void Player_InitMode_1(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_80852FD4, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ Math_Vec3f_Copy(&this->actor.world.pos, &D_8085D2B4);
+ this->currentYaw = this->actor.shape.rot.y = -0x8000;
+ PlayerAnimation_Change(play, &this->skelAnime, this->ageProperties->unk_A8, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE,
+ 0.0f);
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200);
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {
+ func_80841358(play, this, false);
+ }
+ this->unk_AE8 = 20;
+}
+
+void Player_InitMode_3(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_8085437C, 0);
+ func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+}
+
+void Player_InitMode_4(PlayState* play, Player* this) {
+ func_80834DB8(this, &gPlayerAnim_link_normal_jump, 12.0f, play);
+ Player_SetAction(play, this, func_8085439C, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->fallStartHeight = this->actor.world.pos.y;
+}
+
+void Player_InitMode_7(PlayState* play, Player* this) {
+ func_80833B18(play, this, 1, 2.0f, 2.0f, this->actor.shape.rot.y + 0x8000, 0);
+}
+
+void Player_InitMode_5(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_808540A0, 0);
+ this->actor.draw = NULL;
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+}
+
+void Player_InitMode_6(PlayState* play, Player* this) {
+ if (gSaveContext.save.isOwlSave) {
+ Player_SetAction(play, this, func_808496AC, 0);
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->unk_AE8 = 0x28;
+ gSaveContext.save.isOwlSave = false;
+ } else {
+ Player_SetAction(play, this, func_80849FE0, 0);
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->stateFlags2 |= PLAYER_STATE2_20000000;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST7, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 0, 0, 0, ENTEST7_MINUS1);
+ }
+}
+
+// InitModes 0x8 and 0x9
+void func_80841744(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_80855C28, 0);
+ if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) {
+ Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
+ this->itemAction = PLAYER_IA_OCARINA;
+ Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
+ } else {
+ func_8082DB60(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]);
+ }
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->unk_ABC = -10000.0f;
+ this->unk_AE8 = 0x2710;
+ this->unk_B10[5] = 8.0f;
+}
+
+static InitChainEntry sInitChain[] = {
+ ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP),
+};
+
+Vec3s D_8085D2C4 = { -57, 3377, 0 };
+
+void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) {
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ this->currentYaw = this->actor.world.rot.y;
+
+ if ((PLAYER_GET_INITMODE(&this->actor) != PLAYER_INITMODE_TELESCOPE) &&
+ ((gSaveContext.respawnFlag != 2) ||
+ (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams != PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) {
+ func_808309CC(play, this);
+ SkelAnime_InitPlayer(play, &this->skelAnime, skelHeader, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType],
+ 1 | 8, this->jointTableBuffer, this->morphTableBuffer, PLAYER_LIMB_MAX);
+ this->skelAnime.baseTransl = D_8085D2C4;
+
+ SkelAnime_InitPlayer(play, &this->unk_284, skelHeader, func_8082ED20(this), 1 | 8, this->unk_929, this->unk_9C8,
+ PLAYER_LIMB_MAX);
+ this->unk_284.baseTransl = D_8085D2C4;
+
+ if (this->transformation == PLAYER_FORM_GORON) {
+ SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim,
+ this->jointTable, this->morphTable, LINK_GORON_SHIELDING_LIMB_MAX);
+ }
+
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFeet, this->ageProperties->shadowScale);
+ }
+
+ this->subCamId = CAM_ID_NONE;
+ Collider_InitAndSetCylinder(play, &this->cylinder, &this->actor, &D_8085C2EC);
+ Collider_InitAndSetCylinder(play, &this->shieldCylinder, &this->actor, &D_8085C318);
+ Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[0], &this->actor, &D_8085C344);
+ Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[1], &this->actor, &D_8085C344);
+ Collider_InitAndSetQuad(play, &this->shieldQuad, &this->actor, &D_8085C394);
+}
+
+void func_80841A50(PlayState* play, Player* this) {
+ if ((play->roomCtx.curRoom.num >= 0) && (play->roomCtx.prevRoom.num < 0)) {
+ Math_Vec3f_Copy(&this->unk_3C0, &this->actor.world.pos);
+ this->unk_3CC = this->actor.shape.rot.y;
+ this->unk_3CE = play->roomCtx.curRoom.num;
+ this->unk_3CF = 1;
+ }
+}
+
+typedef void (*PlayerInitModeFunc)(PlayState*, Player*);
+
+// Initialisation functions for various gameplay modes depending on spawn params. There may be at most 0x10 due to it
+// using a single nybble.
+// sInitModeFuncs
+PlayerInitModeFunc D_8085D2CC[0x10] = {
+ /* 0x0 */ Player_InitMode_0,
+ /* 0x1 */ Player_InitMode_1,
+ /* 0x2 */ Player_InitMode_2,
+ /* 0x3 */ Player_InitMode_3,
+ /* 0x4 */ Player_InitMode_4,
+ /* 0x5 */ Player_InitMode_5,
+ /* 0x6 */ Player_InitMode_6,
+ /* 0x7 */ Player_InitMode_7,
+ /* 0x8 */ func_80841744,
+ /* 0x9 */ func_80841744,
+ /* 0xA */ func_8083ADF0,
+ /* 0xB */ Player_InitMode_B,
+ /* 0xC */ Player_InitMode_Telescope,
+ /* 0xD */ Player_InitMode_D,
+ /* 0xE */ func_8083ADF0,
+ /* 0xF */ Player_InitMode_F,
+};
+
+// sBlureInit
+EffectBlureInit2 D_8085D30C = {
+ 0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 4,
+ 0, 2, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
+};
+
+// sTireMarkInit ?
+EffectTireMarkInit D_8085D330 = { 0, 63, { 0, 0, 15, 100 } };
+
+// sTireMarkGoronColor ?
+Color_RGBA8 D_8085D338 = { 0, 0, 15, 100 };
+// sTireMarkOtherColor ?
+Color_RGBA8 D_8085D33C = { 0, 0, 0, 150 };
+Vec3f D_8085D340 = { 0.0f, 50.0f, 0.0f };
+
+void Player_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ Player* this = THIS;
+ s8 objBankIndex;
+ s32 respawnFlag;
+ s32 var_a1;
+ PlayerInitMode initMode;
+
+ play->playerInit = Player_InitCommon;
+ play->playerUpdate = Player_UpdateCommon;
+ play->unk_18770 = func_8085B170;
+ play->startPlayerFishing = Player_StartFishing;
+ play->grabPlayer = Player_GrabPlayer;
+ play->startPlayerCutscene = func_8085B28C;
+ play->func_18780 = func_8085B384;
+ play->damagePlayer = Player_InflictDamage;
+ play->talkWithPlayer = Player_TalkWithPlayer;
+ play->unk_1878C = func_8085B74C;
+ play->unk_18790 = func_8085B820;
+ play->unk_18794 = func_8085B854;
+ play->setPlayerTalkAnim = func_8085B930;
+
+ gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = GAMEPLAY_KEEP;
+
+ this->actor.room = -1;
+ this->csId = CS_ID_NONE;
+
+ if (this->actor.shape.rot.x != 0) {
+ this->transformation = this->actor.shape.rot.x - 1;
+
+ objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]);
+ this->actor.objBankIndex = objBankIndex;
+ if (objBankIndex < 0) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ Actor_SetObjectDependency(play, &this->actor);
+ } else {
+ this->transformation = gSaveContext.save.playerForm;
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ if (gSaveContext.save.equippedMask == PLAYER_MASK_GIANT) {
+ gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
+ }
+ this->currentMask = gSaveContext.save.equippedMask;
+ } else {
+ this->currentMask = this->transformation + PLAYER_MASK_FIERCE_DEITY;
+ gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
+ }
+
+ Inventory_UpdateDeitySwordEquip(play);
+
+ this->unk_B28 = 0;
+ this->unk_B90 = 0;
+ this->unk_B92 = 0;
+ this->unk_B94 = 0;
+ this->unk_B96 = 0;
+ this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000 | PLAYER_STATE1_1000000 | PLAYER_STATE1_2000000);
+ this->stateFlags2 &= ~(PLAYER_STATE2_20000 | PLAYER_STATE2_1000000 | PLAYER_STATE2_40000000);
+ this->stateFlags3 &=
+ ~(PLAYER_STATE3_8 | PLAYER_STATE3_40 | PLAYER_STATE3_80 | PLAYER_STATE3_100 | PLAYER_STATE3_200 |
+ PLAYER_STATE3_800 | PLAYER_STATE3_1000 | PLAYER_STATE3_2000 | PLAYER_STATE3_8000 | PLAYER_STATE3_10000 |
+ PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | PLAYER_STATE3_100000 | PLAYER_STATE3_200000 |
+ PLAYER_STATE3_800000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_2000000);
+ this->unk_B08 = 0.0f;
+ this->unk_B0C = 0.0f;
+ }
+
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ this->unk_B10[0] = 1.0f;
+ } else {
+ this->unk_B10[0] = 0.0f;
+ }
+ }
+
+ this->actor.flags &= ~(ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH | ACTOR_FLAG_CAN_PRESS_SWITCH);
+ if (this->transformation != PLAYER_FORM_DEKU) {
+ this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH;
+ if (this->transformation == PLAYER_FORM_GORON) {
+ this->actor.flags |= ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH;
+ }
+ }
+
+ this->ageProperties = &sPlayerAgeProperties[this->transformation];
+
+ this->itemAction = PLAYER_IA_NONE;
+ this->heldItemAction = PLAYER_IA_NONE;
+ this->heldItemId = ITEM_NONE;
+
+ func_80831990(play, this, ITEM_NONE);
+ Player_SetEquipmentData(play, this);
+ this->prevBoots = this->currentBoots;
+ Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]);
+
+ if (this->actor.shape.rot.z != 0) {
+ EffectTireMark* tireMark;
+
+ this->actor.shape.rot.z = 0;
+ Player_OverrideBlureColors(play, this, 0, 4);
+
+ tireMark = Effect_GetByIndex(this->meleeWeaponEffectIndex[2]);
+ if (this->transformation == PLAYER_FORM_GORON) {
+ tireMark->color = D_8085D338;
+ } else {
+ tireMark->color = D_8085D33C;
+ }
+
+ if ((this->csMode == PLAYER_CSMODE_9) || (this->csMode == PLAYER_CSMODE_93)) {
+ Player_SetAction(play, this, func_8085B08C, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ } else {
+ Player_SetAction(play, this, func_80855818, 0);
+ this->actor.shape.rot.y = this->currentYaw;
+
+ if (this->prevMask != PLAYER_MASK_NONE) {
+ func_8082DB90(play, this, &gPlayerAnim_cl_maskoff);
+ } else if (this->transformation == PLAYER_FORM_HUMAN) {
+ PlayerAnimation_Change(play, &this->skelAnime, D_8085D160[this->transformation], -2.0f / 3.0f, 9.0f,
+ 0.0f, ANIMMODE_ONCE, 0.0f);
+ } else {
+ func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend);
+ }
+
+ this->stateFlags1 |= (PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000);
+ this->stateFlags3 |= PLAYER_STATE3_20000;
+ this->unk_B10[5] = 3.0f;
+ }
+ return;
+ }
+
+ this->prevMask = this->currentMask;
+
+ Effect_Add(play, &this->meleeWeaponEffectIndex[0], EFFECT_BLURE2, 0, 0, &D_8085D30C);
+ Effect_Add(play, &this->meleeWeaponEffectIndex[1], EFFECT_BLURE2, 0, 0, &D_8085D30C);
+
+ Player_OverrideBlureColors(play, this, 0, 4);
+ if (this->transformation == PLAYER_FORM_GORON) {
+ D_8085D330.color = D_8085D338;
+ } else {
+ D_8085D330.color = D_8085D33C;
+ }
+ Effect_Add(play, &this->meleeWeaponEffectIndex[2], EFFECT_TIRE_MARK, 0, 0, &D_8085D330);
+
+ if (this->actor.shape.rot.x != 0) {
+ this->actor.shape.rot.x = 0;
+ this->csMode = PLAYER_CSMODE_68;
+ Player_SetAction(play, this, func_8085B08C, 0);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ return;
+ }
+
+ play->unk_1887C = 0;
+ play->unk_1887D = 0;
+ play->unk_1887E = 0;
+ this->giObjectSegment = ZeldaArena_Malloc(0x2000);
+ this->maskObjectSegment = ZeldaArena_Malloc(0x3800);
+
+ Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 255, 128, 0, -1);
+ this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
+ Play_AssignPlayerCsIdsFromScene(&play->state, this->actor.csId);
+
+ respawnFlag = gSaveContext.respawnFlag;
+ if (respawnFlag != 0) {
+ if (respawnFlag == -3) {
+ this->actor.params = gSaveContext.respawn[RESPAWN_MODE_UNK_3].playerParams;
+ } else {
+ if ((respawnFlag == 1) || (respawnFlag == -1)) {
+ this->unk_D6A = -2;
+ }
+
+ if (respawnFlag != -7) {
+ s32 respawnIndex;
+
+ if ((respawnFlag == -8) || (respawnFlag == -5) || (respawnFlag == -4)) {
+ respawnFlag = 1;
+ }
+
+ if ((respawnFlag < 0) && (respawnFlag != -1) && (respawnFlag != -6)) {
+ respawnIndex = RESPAWN_MODE_DOWN;
+ } else {
+ respawnIndex = (respawnFlag < 0) ? RESPAWN_MODE_TOP : respawnFlag - 1;
+
+ Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[respawnIndex].pos);
+ Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
+ Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos);
+ Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
+
+ this->fallStartHeight = this->actor.world.pos.y;
+
+ this->currentYaw = this->actor.shape.rot.y = gSaveContext.respawn[respawnIndex].yaw;
+ this->actor.params = gSaveContext.respawn[respawnIndex].playerParams;
+ }
+
+ play->actorCtx.sceneFlags.switches[2] = gSaveContext.respawn[respawnIndex].tempSwitchFlags;
+ play->actorCtx.sceneFlags.collectible[1] = gSaveContext.respawn[respawnIndex].unk_18;
+ play->actorCtx.sceneFlags.collectible[2] = gSaveContext.respawn[respawnIndex].tempCollectFlags;
+ }
+ }
+ }
+
+ var_a1 = ((respawnFlag == 4) || (gSaveContext.respawnFlag == -4)) ? 1 : 0;
+ if (func_801226E0(play, var_a1) == 0) {
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = PLAYER_PARAMS(thisx->params, PLAYER_INITMODE_D);
+ }
+
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1;
+ if (respawnFlag == 0) {
+ gSaveContext.respawn[RESPAWN_MODE_TOP] = gSaveContext.respawn[RESPAWN_MODE_DOWN];
+ }
+ gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams =
+ PLAYER_PARAMS(gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams, PLAYER_INITMODE_D);
+
+ initMode = PLAYER_GET_INITMODE(&this->actor);
+ if (((initMode == PLAYER_INITMODE_5) || (initMode == PLAYER_INITMODE_6)) &&
+ (gSaveContext.save.cutsceneIndex >= 0xFFF0)) {
+ initMode = PLAYER_INITMODE_D;
+ }
+
+ D_8085D2CC[initMode](play, this);
+
+ if ((this->actor.draw != NULL) && gSaveContext.save.hasTatl &&
+ ((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) &&
+ (play->sceneId != SCENE_SPOT00)) {
+ this->tatlActor = Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D340, 0);
+
+ if (gSaveContext.dogParams != 0) {
+ gSaveContext.dogParams |= 0x8000;
+ }
+
+ if (gSaveContext.powderKegTimer != 0) {
+ this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_POWDER_KEG);
+ this->heldItemId = ITEM_POWDER_KEG;
+ func_8082F8BC(play, this, PLAYER_IA_POWDER_KEG);
+ func_808313F0(this, play);
+ } else if (gSaveContext.unk_1014 != 0) {
+ func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM,
+ this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0x8000));
+ func_808313F0(this, play);
+ }
+ }
+
+ Minimap_SavePlayerRoomInitInfo(play);
+ func_80841A50(play, this);
+ this->unk_3CF = 0;
+ R_PLAY_FILL_SCREEN_ON = 0;
+}
+
+void func_80842510(s16* arg0) {
+ s16 temp_ft0;
+
+ temp_ft0 = (ABS_ALT(*arg0) * 100.0f) / 1000.0f;
+ temp_ft0 = CLAMP(temp_ft0, 0x190, 0xFA0);
+
+ Math_ScaledStepToS(arg0, 0, temp_ft0);
+}
+
+void func_808425B4(Player* this) {
+ if (!(this->unk_AA6 & 2)) {
+ s16 sp26 = this->actor.focus.rot.y - this->actor.shape.rot.y;
+
+ func_80842510(&sp26);
+ this->actor.focus.rot.y = this->actor.shape.rot.y + sp26;
+ }
+ if (!(this->unk_AA6 & 1)) {
+ func_80842510(&this->actor.focus.rot.x);
+ }
+ if (!(this->unk_AA6 & 8)) {
+ func_80842510(&this->headLimbRot.x);
+ }
+ if (!(this->unk_AA6 & 0x40)) {
+ func_80842510(&this->upperLimbRot.x);
+ }
+ if (!(this->unk_AA6 & 4)) {
+ func_80842510(&this->actor.focus.rot.z);
+ }
+ if (!(this->unk_AA6 & 0x10)) {
+ func_80842510(&this->headLimbRot.y);
+ }
+ if (!(this->unk_AA6 & 0x20)) {
+ func_80842510(&this->headLimbRot.z);
+ }
+ if (!(this->unk_AA6 & 0x80)) {
+ if (this->unk_AA8 != 0) {
+ func_80842510(&this->unk_AA8);
+ } else {
+ func_80842510(&this->upperLimbRot.y);
+ }
+ }
+ if (!(this->unk_AA6 & 0x100)) {
+ func_80842510(&this->upperLimbRot.z);
+ }
+
+ this->unk_AA6 = 0;
+}
+
+/**
+ * Sets the DoAction for the interface A/B buttons, depending on a significant number of things
+ */
+void Player_SetDoAction(PlayState* play, Player* this) {
+ DoAction doActionB;
+ s32 sp38;
+
+ if (this != GET_PLAYER(play)) {
+ return;
+ }
+
+ doActionB = -1;
+ sp38 = func_801242B4(this) || (func_8084CA24 == this->actionFunc);
+
+ // Set B do action
+ if (this->transformation == PLAYER_FORM_GORON) {
+ if (this->stateFlags3 & PLAYER_STATE3_80000) {
+ doActionB = DO_ACTION_NONE;
+ } else if (this->stateFlags3 & PLAYER_STATE3_1000) {
+ doActionB = DO_ACTION_POUND;
+ } else {
+ doActionB = DO_ACTION_PUNCH;
+ }
+ } else if (this->transformation == PLAYER_FORM_ZORA) {
+ if ((!(this->stateFlags1 & PLAYER_STATE1_8000000)) ||
+ (!sp38 && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ doActionB = DO_ACTION_PUNCH;
+ } else {
+ doActionB = DO_ACTION_DIVE;
+ }
+ } else if (this->transformation == PLAYER_FORM_DEKU) {
+ doActionB = DO_ACTION_SHOOT;
+ } else { // PLAYER_FORM_HUMAN
+ if (this->currentMask == PLAYER_MASK_BLAST) {
+ doActionB = DO_ACTION_EXPLODE;
+ } else if (this->currentMask == PLAYER_MASK_BREMEN) {
+ doActionB = DO_ACTION_MARCH;
+ } else if (this->currentMask == PLAYER_MASK_KAMARO) {
+ doActionB = DO_ACTION_DANCE;
+ }
+ }
+
+ if (doActionB > -1) {
+ func_801155B4(play, doActionB);
+ } else if (play->interfaceCtx.unk_21C != 0) {
+ play->interfaceCtx.unk_21C = 0;
+ play->interfaceCtx.bButtonDoAction = 0;
+ }
+
+ // Set A do action
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) ||
+ ((play->msgCtx.currentTextId >= 0x100) && (play->msgCtx.currentTextId <= 0x200)) ||
+ ((play->msgCtx.currentTextId >= 0x1BB2) && (play->msgCtx.currentTextId < 0x1BB7))) {
+ Actor* heldActor = this->heldActor;
+ Actor* interactRangeActor = this->interactRangeActor;
+ s32 pad;
+ s32 sp28 = this->unk_AE3[this->unk_ADE];
+ s32 sp24;
+ DoAction doActionA =
+ ((this->transformation == PLAYER_FORM_GORON) && !(this->stateFlags1 & PLAYER_STATE1_400000))
+ ? DO_ACTION_CURL
+ : DO_ACTION_NONE;
+
+ if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
+ doActionA = DO_ACTION_SNAP;
+ } else if (Player_InBlockingCsMode(play, this) || (this->actor.flags & ACTOR_FLAG_20000000) ||
+ (this->stateFlags1 & PLAYER_STATE1_1000) || (this->stateFlags3 & PLAYER_STATE3_80000) ||
+ (func_80854430 == this->actionFunc)) {
+ doActionA = DO_ACTION_NONE;
+ } else if (this->stateFlags1 & PLAYER_STATE1_100000) {
+ doActionA = DO_ACTION_RETURN;
+ } else if ((this->heldItemAction == PLAYER_IA_FISHING_ROD) && (this->unk_B28 != 0)) {
+ doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE;
+ doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE; //! FAKE: duplicated statement
+ } else if (this->stateFlags3 & PLAYER_STATE3_2000) {
+ doActionA = DO_ACTION_DOWN;
+ } else if ((this->doorType != PLAYER_DOORTYPE_NONE) && (this->doorType != PLAYER_DOORTYPE_STAIRCASE) &&
+ !(this->stateFlags1 & PLAYER_STATE1_800)) {
+ doActionA = DO_ACTION_OPEN;
+ } else if (this->stateFlags3 & PLAYER_STATE3_200000) {
+ static u8 D_8085D34C[] = {
+ DO_ACTION_1, DO_ACTION_2, DO_ACTION_3, DO_ACTION_4, DO_ACTION_5, DO_ACTION_6, DO_ACTION_7, DO_ACTION_8,
+ };
+
+ doActionA = D_8085D34C[this->remainingHopsCounter];
+ } else if ((!(this->stateFlags1 & PLAYER_STATE1_800) || (heldActor == NULL)) && (interactRangeActor != NULL) &&
+ (this->getItemId < GI_NONE)) {
+ doActionA = DO_ACTION_OPEN;
+ } else if (!sp38 && (this->stateFlags2 & PLAYER_STATE2_1)) {
+ doActionA = DO_ACTION_GRAB;
+ } else if ((this->stateFlags2 & PLAYER_STATE2_4) ||
+ (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->rideActor != NULL))) {
+ doActionA = DO_ACTION_CLIMB;
+ } else if ((this->stateFlags1 & PLAYER_STATE1_800000) &&
+ (!EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (func_808505D0 != this->actionFunc))) {
+ if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) {
+ if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->id == ACTOR_DM_CHAR08)) {
+ doActionA = DO_ACTION_SPEAK;
+ } else {
+ doActionA = DO_ACTION_CHECK;
+ }
+ } else if (!func_8082DA90(play) && !func_800B7128(this) && !(this->stateFlags1 & PLAYER_STATE1_100000)) {
+ doActionA = DO_ACTION_FASTER;
+ } else {
+ doActionA = DO_ACTION_NONE;
+ }
+ } else if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) {
+ if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->category == ACTORCAT_ENEMY) ||
+ (this->talkActor->id == ACTOR_DM_CHAR08)) {
+ doActionA = DO_ACTION_SPEAK;
+ } else {
+ doActionA = DO_ACTION_CHECK;
+ }
+ } else if ((this->stateFlags1 & (PLAYER_STATE1_2000 | PLAYER_STATE1_200000)) ||
+ ((this->stateFlags1 & PLAYER_STATE1_800000) && (this->stateFlags2 & PLAYER_STATE2_400000))) {
+ doActionA = DO_ACTION_DOWN;
+ } else if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->getItemId == GI_NONE) && (heldActor != NULL)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (heldActor->id == ACTOR_EN_NIW)) {
+ if (!func_8083D738(this, heldActor)) {
+ doActionA = DO_ACTION_DROP;
+ } else {
+ doActionA = DO_ACTION_THROW;
+ }
+ } else {
+ doActionA = DO_ACTION_NONE;
+ }
+ } else if (this->stateFlags2 & PLAYER_STATE2_10000) {
+ doActionA = DO_ACTION_GRAB;
+ } else if (this->stateFlags2 & PLAYER_STATE2_800) {
+ static u8 D_8085D354[] = { DO_ACTION_1, DO_ACTION_2 };
+ s32 var_v0;
+
+ var_v0 = ((120.0f - this->actor.depthInWater) / 40.0f);
+ var_v0 = CLAMP(var_v0, 0, ARRAY_COUNT(D_8085D354) - 1);
+
+ doActionA = D_8085D354[var_v0];
+ } else if (this->stateFlags3 & PLAYER_STATE3_100) {
+ doActionA = DO_ACTION_JUMP;
+ } else if (this->stateFlags3 & PLAYER_STATE3_1000) {
+ doActionA = DO_ACTION_RETURN;
+ } else if (!func_8082FBE8(this) && (this->stateFlags1 & PLAYER_STATE1_8000000) && !sp38) {
+ doActionA = DO_ACTION_SURFACE;
+ } else if (((this->transformation != PLAYER_FORM_DEKU) &&
+ (sp38 || ((this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) ||
+ ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) {
+ doActionA = (this->transformation == PLAYER_FORM_ZORA) ? DO_ACTION_SWIM
+ : ((this->stateFlags1 & PLAYER_STATE1_8000000) && (interactRangeActor != NULL) &&
+ (interactRangeActor->id == ACTOR_EN_ZOG))
+ ? DO_ACTION_GRAB
+ : DO_ACTION_DIVE;
+ } else {
+ sp24 = func_8082FBE8(this);
+ if ((sp24 && (this->transformation != PLAYER_FORM_DEKU)) || !(this->stateFlags1 & PLAYER_STATE1_400000) ||
+ !Player_IsGoronOrDeku(this)) {
+ if ((this->transformation != PLAYER_FORM_GORON) &&
+ !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_4000)) && (sp28 <= 0) &&
+ ((func_80123420(this)) ||
+ ((sPlayerCurrentFloorType != FLOOR_TYPE_7) &&
+ ((func_80123434(this)) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) &&
+ !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) {
+ doActionA = DO_ACTION_ATTACK;
+ } else if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && sp24 && (sp28 > 0)) {
+ doActionA = DO_ACTION_JUMP;
+ } else if ((this->transformation == PLAYER_FORM_DEKU) && !(this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ doActionA = DO_ACTION_ATTACK;
+ } else if (((this->transformation == PLAYER_FORM_HUMAN) ||
+ (this->transformation == PLAYER_FORM_ZORA)) &&
+ ((this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) ||
+ ((this->stateFlags2 & PLAYER_STATE2_100000) &&
+ (play->actorCtx.targetContext.arrowPointedActor == NULL)))) {
+ doActionA = DO_ACTION_PUTAWAY;
+
+ if (play->msgCtx.currentTextId == 0) {} //! FAKE
+ }
+ }
+ }
+
+ if (doActionA != DO_ACTION_PUTAWAY) {
+ this->putAwayCountdown = 20;
+ } else if (this->putAwayCountdown != 0) {
+ doActionA = DO_ACTION_NONE;
+ this->putAwayCountdown--;
+ }
+
+ func_8011552C(play, doActionA);
+
+ // Set Tatl state
+ if (!Play_InCsMode(play) && (this->stateFlags2 & PLAYER_STATE2_200000) &&
+ !(this->stateFlags3 & PLAYER_STATE3_100)) {
+ if (this->targetedActor != NULL) {
+ func_80115764(play, 0x2B);
+ } else {
+ func_80115764(play, 0x2A);
+ }
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
+ } else {
+ func_80115764(play, 0x2C);
+ }
+ }
+}
+
+s32 func_808430E0(Player* this) {
+ if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ func_8083784C(this)) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ }
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ return false;
+ }
+
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ sPlayerCurrentFloorType = FLOOR_TYPE_0;
+ }
+ this->unk_B6C = 0;
+ this->unk_B6E = 0;
+ D_80862B28 = 0;
+ return true;
+}
+
+void func_80843178(PlayState* play, Player* this) {
+ u8 spC7 = 0;
+ CollisionPoly* floorPoly;
+ f32 temp_fv0;
+ f32 temp_fv0_3;
+ f32 temp_fv1;
+ u32 updBgCheckInfoFlags;
+ s32 spAC = (func_8084D820 == this->actionFunc) && (this->unk_397 == 4);
+
+ sPlayerPrevFloorProperty = this->floorProperty;
+
+ temp_fv0 = this->ageProperties->unk_38;
+ temp_fv1 = this->ageProperties->unk_00;
+
+ if (this->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000)) {
+ if ((!(this->stateFlags1 & PLAYER_STATE1_80) && !(this->stateFlags2 & PLAYER_STATE2_4000) &&
+ (this->stateFlags1 & PLAYER_STATE1_80000000)) ||
+ spAC) {
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ } else {
+ if ((this->stateFlags1 & 1) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) &&
+ ((this->unk_D68 - (s32)this->actor.world.pos.y) >= 100)) {
+ updBgCheckInfoFlags =
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20;
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_1) &&
+ ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) {
+ updBgCheckInfoFlags =
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20;
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT);
+ } else {
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20;
+ }
+ }
+ } else {
+ if (func_808561B0 == this->actionFunc) {
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_800;
+ } else if ((this->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (this->linearVelocity >= 8.0f)) {
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20 | UPDBGCHECKINFO_FLAG_100 |
+ UPDBGCHECKINFO_FLAG_200;
+ } else {
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20;
+ }
+ }
+
+ if (this->stateFlags3 & PLAYER_STATE3_1) {
+ updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
+ }
+ if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) {
+ this->stateFlags3 |= PLAYER_STATE3_10;
+ }
+
+ if (func_801242B4(this)) {
+ updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ }
+
+ Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, temp_fv0, temp_fv1, updBgCheckInfoFlags);
+
+ this->unk_AC0 -= (this->actor.world.pos.y - this->actor.prevPos.y) / this->actor.scale.y;
+ this->unk_AC0 = CLAMP(this->unk_AC0, -1000.0f, 1000.0f);
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) {
+ this->actor.velocity.y = 0.0f;
+ }
+
+ D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight;
+ sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED;
+ floorPoly = this->actor.floorPoly;
+
+ if ((floorPoly != NULL) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4)) {
+ this->floorProperty = SurfaceType_GetFloorProperty(&play->colCtx, floorPoly, this->actor.floorBgId);
+ if (this == GET_PLAYER(play)) {
+ func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId));
+ if (this->actor.floorBgId == BGCHECK_SCENE) {
+ func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId));
+ } else {
+ DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId);
+ }
+ }
+
+ sPlayerConveyorSpeedIndex = SurfaceType_GetConveyorSpeed(&play->colCtx, floorPoly, this->actor.floorBgId);
+ if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) {
+ sPlayerIsOnFloorConveyor = SurfaceType_IsFloorConveyor(&play->colCtx, floorPoly, this->actor.floorBgId);
+ if ((!sPlayerIsOnFloorConveyor && (this->actor.depthInWater > 20.0f)) ||
+ (sPlayerIsOnFloorConveyor && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ D_80862B16 = SurfaceType_GetConveyorDirection(&play->colCtx, floorPoly, this->actor.floorBgId) << 0xA;
+ } else {
+ sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED;
+ }
+ }
+ }
+
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ static Vec3f D_8085D358 = { 0.0f, 0.0f, 0.0f };
+ CollisionPoly* spA8;
+ s32 spA4;
+ s16 temp_v1_3;
+ f32 sp9C;
+
+ D_8085D358.y = 178.0f * 0.1f;
+ D_8085D358.z = this->ageProperties->unk_38 + 10.0f;
+
+ if (func_80835D58(play, this, &D_8085D358, &spA8, &spA4, &D_80862B30)) {
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT;
+ if (spA8 != this->actor.wallPoly) {
+ this->actor.wallPoly = spA8;
+ this->actor.wallBgId = spA4;
+ this->actor.wallYaw = Math_Atan2S_XY(spA8->normal.z, spA8->normal.x);
+ }
+ }
+
+ temp_v1_3 = this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000);
+ sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId);
+ D_80862B20 = ABS_ALT(temp_v1_3);
+ temp_v1_3 = BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000));
+ D_80862B24 = ABS_ALT(temp_v1_3);
+
+ temp_fv0_3 = D_80862B24 * 0.00008f;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (temp_fv0_3 >= 1.0f)) {
+ this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f;
+ } else {
+ temp_fv1 = (R_RUN_SPEED_LIMIT / 100.0f) * temp_fv0_3;
+
+ this->unk_B50 = temp_fv1;
+ if (temp_fv1 < 0.1f) {
+ this->unk_B50 = 0.1f;
+ }
+ }
+
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B20 < 0x3000)) {
+ CollisionPoly* wallPoly = this->actor.wallPoly;
+
+ if (ABS_ALT(wallPoly->normal.y) < 0x258) {
+ f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x);
+ f32 wallPolyNormalY = COLPOLY_GET_NORMAL(wallPoly->normal.y);
+ f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z);
+ f32 temp_fv1_3;
+ CollisionPoly* sp84;
+ CollisionPoly* sp80;
+ s32 sp7C;
+ Vec3f sp70;
+ f32 temp_fv0_5;
+ f32 sp68;
+ s32 temp_v1_6;
+
+ this->wallDistance = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ,
+ wallPoly->dist, &this->actor.world.pos);
+ temp_fv1_3 = this->wallDistance + 10.0f;
+ sp70.x = this->actor.world.pos.x - (temp_fv1_3 * wallPolyNormalX);
+ sp70.z = this->actor.world.pos.z - (temp_fv1_3 * wallPolyNormalZ);
+ sp70.y = this->actor.world.pos.y + this->ageProperties->unk_0C;
+ temp_fv0_5 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp84, &sp7C, &this->actor, &sp70);
+
+ this->wallHeight = temp_fv0_5 - this->actor.world.pos.y;
+ if ((this->wallHeight < 178.0f * 0.1f) ||
+ ((BgCheck_EntityCheckCeiling(&play->colCtx, &sp68, &this->actor.world.pos,
+ (temp_fv0_5 - this->actor.world.pos.y) + 20.0f, &sp80, &sp7C,
+ &this->actor) != 0))) {
+ this->wallHeight = 399.96002f;
+ } else {
+ D_8085D358.y = (temp_fv0_5 + 5.0f) - this->actor.world.pos.y;
+
+ if ((func_80835D58(play, this, &D_8085D358, &sp80, &sp7C, &D_80862B30)) &&
+ (temp_v1_6 = this->actor.wallYaw - Math_Atan2S_XY(sp80->normal.z, sp80->normal.x),
+ ABS_ALT(temp_v1_6) < 0x4000) &&
+ !(SurfaceType_CheckWallFlag1(&play->colCtx, sp80, sp7C))) {
+ this->wallHeight = 399.96002f;
+ } else if (SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId) == 0) {
+ if (this->ageProperties->unk_1C <= this->wallHeight) {
+ if (ABS_ALT(sp84->normal.y) > 0x5DC0) {
+ if ((this->ageProperties->unk_14 <= this->wallHeight) || func_801242B4(this)) {
+ spC7 = 4;
+ } else if (this->ageProperties->unk_18 <= this->wallHeight) {
+ spC7 = 3;
+ } else {
+ spC7 = 2;
+ }
+ }
+ } else {
+ spC7 = 1;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f;
+ this->wallHeight = 0.0f;
+ this->unk_B5D = 0;
+ }
+
+ if (spC7 == this->unk_B5C) {
+ if (this->linearVelocity != 0.0f) {
+ if (this->unk_B5D < 0x64) {
+ this->unk_B5D++;
+ }
+ }
+ } else {
+ this->unk_B5C = spC7;
+ this->unk_B5D = 0;
+ }
+
+ sPlayerCurrentFloorType = SurfaceType_GetFloorType(&play->colCtx, floorPoly, this->actor.floorBgId);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ f32 floorPolyNormalX;
+ f32 floorPolyNormalY;
+ f32 floorPolyNormalZ;
+ f32 sp54;
+ s32 pad;
+ f32 sp4C;
+
+ D_80862B40 = SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ if (func_808430E0(this) == 0) {
+ floorPolyNormalY = COLPOLY_GET_NORMAL(floorPoly->normal.y);
+
+ if (this->actor.floorBgId != BGCHECK_SCENE) {
+ DynaPoly_SetPlayerOnTop(&play->colCtx, this->actor.floorBgId);
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && (this->actor.depthInWater <= 24.0f) &&
+ (D_80862B40 != FLOOR_EFFECT_1) && (sPlayerConveyorSpeedIndex == CONVEYOR_SPEED_DISABLED) &&
+ (floorPolyNormalY > 0.5f)) {
+ if (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP]) {
+ func_80841A50(play, this);
+ }
+ }
+
+ floorPolyNormalX = COLPOLY_GET_NORMAL(floorPoly->normal.x);
+ floorPolyNormalY = 1.0f / floorPolyNormalY;
+ floorPolyNormalZ = COLPOLY_GET_NORMAL(floorPoly->normal.z);
+
+ sp54 = Math_SinS(this->currentYaw);
+ sp4C = Math_CosS(this->currentYaw);
+ this->unk_B6C =
+ Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY);
+ this->unk_B6E =
+ Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp4C) - (floorPolyNormalZ * sp54)) * floorPolyNormalY);
+ sp54 = Math_SinS(this->actor.shape.rot.y);
+ sp4C = Math_CosS(this->actor.shape.rot.y);
+ D_80862B28 =
+ Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY);
+ func_8083CF68(play, this);
+ }
+ } else {
+ func_808430E0(this);
+ D_80862B40 = FLOOR_EFFECT_0;
+ }
+
+ if (floorPoly != NULL) {
+ this->unk_D66 = this->floorSfxOffset;
+ if (spAC != 0) {
+ this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG;
+ return;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
+ if (this->actor.depthInWater < 50.0f) {
+ if (this->actor.depthInWater < 20.0f) {
+ this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_SE_PL_WALK_DIRT - SFX_FLAG
+ : NA_SE_PL_WALK_WATER0 - SFX_FLAG;
+ } else {
+ this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_CODE_DIRT_DEEP - SFX_FLAG
+ : NA_SE_PL_WALK_WATER1 - SFX_FLAG;
+ }
+
+ return;
+ }
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_200) {
+ this->floorSfxOffset = NA_SE_PL_WALK_SAND - SFX_FLAG;
+ } else if (COLPOLY_GET_NORMAL(floorPoly->normal.y) > 0.5f) {
+ this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, floorPoly, this->actor.floorBgId);
+ }
+ }
+}
+
+void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
+ u8 seqMode;
+ s32 pad[2];
+ Camera* camera;
+ s32 camMode;
+
+ if (this == GET_PLAYER(play)) {
+ seqMode = SEQ_MODE_DEFAULT;
+ if (this->stateFlags1 & PLAYER_STATE1_100000) {
+ seqMode = SEQ_MODE_STILL;
+ } else if (this->csMode != PLAYER_CSMODE_0) {
+ Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL);
+ } else {
+ camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN)
+ : Play_GetCamera(play, ((EnTest3*)this)->subCamId);
+ if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_80)) {
+ camMode = CAM_MODE_HOOKSHOT;
+ Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->actor.parent);
+ } else if (func_8084BC64 == this->actionFunc) {
+ camMode = CAM_MODE_STILL;
+ } else if (this->stateFlags3 & PLAYER_STATE3_8000) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ camMode = CAM_MODE_GORONDASH;
+ } else {
+ camMode = CAM_MODE_FREEFALL;
+ }
+ } else if (this->stateFlags3 & PLAYER_STATE3_80000) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ camMode = CAM_MODE_GORONDASH;
+ } else {
+ camMode = CAM_MODE_GORONJUMP;
+ }
+ } else if (this->stateFlags2 & PLAYER_STATE2_100) {
+ camMode = CAM_MODE_PUSHPULL;
+ } else if (this->targetedActor != NULL) {
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED)) {
+ camMode = CAM_MODE_TALK;
+ } else if (this->stateFlags1 & PLAYER_STATE1_10000) {
+ if (this->stateFlags1 & PLAYER_STATE1_2000000) {
+ camMode = CAM_MODE_FOLLOWBOOMERANG;
+ } else {
+ camMode = CAM_MODE_FOLLOWTARGET;
+ }
+ } else {
+ camMode = CAM_MODE_BATTLE;
+ }
+ Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->targetedActor);
+ } else if (this->stateFlags1 & PLAYER_STATE1_1000) {
+ camMode = CAM_MODE_CHARGE;
+ } else if (this->stateFlags3 & PLAYER_STATE3_100) {
+ camMode = CAM_MODE_DEKUHIDE;
+ } else if (this->stateFlags1 & PLAYER_STATE1_2000000) {
+ camMode = CAM_MODE_FOLLOWBOOMERANG;
+ Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->boomerangActor);
+ } else if (this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000)) {
+ if (func_80123434(this)) {
+ camMode = CAM_MODE_HANGZ;
+ } else {
+ camMode = CAM_MODE_HANG;
+ }
+ } else if ((this->stateFlags3 & PLAYER_STATE3_2000) && (this->actor.velocity.y < 0.0f)) {
+ if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) {
+ camMode = CAM_MODE_DEKUFLYZ;
+ } else {
+ camMode = CAM_MODE_DEKUFLY;
+ }
+ } else if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) {
+ if (func_800B7128(this) || func_8082EF20(this)) {
+ camMode = CAM_MODE_BOWARROWZ;
+ } else if (this->stateFlags1 & PLAYER_STATE1_200000) {
+ camMode = CAM_MODE_CLIMBZ;
+ } else {
+ camMode = CAM_MODE_TARGET;
+ }
+ } else if ((this->stateFlags1 & PLAYER_STATE1_400000) && (this->transformation != 0)) {
+ camMode = CAM_MODE_STILL;
+ } else if (this->stateFlags1 & PLAYER_STATE1_40000) {
+ camMode = CAM_MODE_JUMP;
+ } else if (this->stateFlags1 & PLAYER_STATE1_200000) {
+ camMode = CAM_MODE_CLIMB;
+ } else if (this->stateFlags1 & PLAYER_STATE1_80000) {
+ camMode = CAM_MODE_FREEFALL;
+ } else if (((func_808548B8 == this->actionFunc) &&
+ (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) &&
+ (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) ||
+ (this->stateFlags3 & PLAYER_STATE3_8) ||
+ ((func_8084FE7C == this->actionFunc) && (this->unk_AE8 == 0)) ||
+ (func_808505D0 == this->actionFunc)) {
+ camMode = CAM_MODE_STILL;
+ } else {
+ camMode = CAM_MODE_NORMAL;
+ if ((this->linearVelocity == 0.0f) &&
+ (!(this->stateFlags1 & PLAYER_STATE1_800000) || (this->rideActor->speed == 0.0f))) {
+ seqMode = SEQ_MODE_STILL;
+ }
+ }
+
+ Camera_ChangeMode(camera, camMode);
+ }
+
+ if (play->actorCtx.targetContext.bgmEnemy != NULL) {
+ seqMode = SEQ_MODE_ENEMY;
+ Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetContext.bgmEnemy->xyzDistToPlayerSq));
+ }
+
+ Audio_SetSequenceMode(seqMode);
+ }
+}
+
+Vec3f D_8085D364 = { 0.0f, 0.5f, 0.0f };
+Vec3f D_8085D370 = { 0.0f, 0.5f, 0.0f };
+Color_RGBA8 D_8085D37C = { 255, 255, 100, 255 };
+Color_RGBA8 D_8085D380 = { 255, 50, 0, 0 };
+
+void func_808442D8(PlayState* play, Player* this) {
+ f32 var_fa0;
+ f32 temp_fv1;
+
+ if (this->unk_B0C == 0.0f) {
+ func_80831990(play, this, ITEM_NONE);
+ return;
+ }
+
+ var_fa0 = 1.0f;
+ if (DECR(this->unk_B28) == 0) {
+ Inventory_ChangeAmmo(ITEM_STICK, -1);
+ this->unk_B28 = 1;
+ this->unk_B0C = 0.0f;
+ var_fa0 = 0.0f;
+ } else if (this->unk_B28 >= 0xC9) {
+ var_fa0 = (0xD2 - this->unk_B28) / 10.0f;
+ } else if (this->unk_B28 < 0x14) {
+ var_fa0 = this->unk_B28 / 20.0f;
+ this->unk_B0C = var_fa0;
+ }
+
+ if (var_fa0 > 0.0f) {
+ func_800B0EB0(play, &this->meleeWeaponInfo[0].tip, &D_8085D364, &D_8085D370, &D_8085D37C, &D_8085D380,
+ (var_fa0 * 200.0f), 0, 8);
+ if (play->roomCtx.curRoom.enablePosLights || (MREG(93) != 0)) {
+ temp_fv1 = (Rand_ZeroOne() * 30.0f) + 225.0f;
+ Lights_PointSetColorAndRadius(&this->lightInfo, temp_fv1, temp_fv1 * 0.7f, 0, var_fa0 * 300.0f);
+ }
+ }
+}
+
+void func_808445C4(PlayState* play, Player* this) {
+ this->shockTimer--;
+ this->unk_B66 += this->shockTimer;
+ if (this->unk_B66 > 20) {
+ Vec3f pos;
+ Vec3f* bodyPartsPos;
+ s32 scale;
+ s32 randIndex;
+
+ this->unk_B66 -= 20;
+ scale = this->shockTimer * 2;
+ if (scale > 40) {
+ scale = 40;
+ }
+
+ randIndex = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f);
+ bodyPartsPos = randIndex + this->bodyPartsPos;
+
+ pos.x = (Rand_CenteredFloat(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x;
+ pos.y = (Rand_CenteredFloat(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y;
+ pos.z = (Rand_CenteredFloat(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z;
+ EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1);
+ func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG);
+ }
+}
+
+/**
+ * Rumbles the controller when close to a secret.
+ */
+void Player_DetectSecrets(PlayState* play, Player* this) {
+ f32 step = (SQ(200.0f) * 5.0f) - (this->closestSecretDistSq * 5.0f);
+
+ if (step < 0.0f) {
+ step = 0.0f;
+ }
+
+ this->secretRumbleCharge += step;
+ if (this->secretRumbleCharge > SQ(2000.0f)) {
+ this->secretRumbleCharge = 0.0f;
+ Player_RequestRumble(play, this, 120, 20, 10, SQ(0));
+ }
+}
+
+s8 D_8085D384[92] = {
+ /* 0 */ PLAYER_CSMODE_0,
+ /* 1 */ PLAYER_CSMODE_2,
+ /* 2 */ PLAYER_CSMODE_2,
+ /* 3 */ PLAYER_CSMODE_4,
+ /* 4 */ PLAYER_CSMODE_3,
+ /* 5 */ PLAYER_CSMODE_56,
+ /* 6 */ PLAYER_CSMODE_8,
+ /* 7 */ PLAYER_CSMODE_0,
+ /* 8 */ PLAYER_CSMODE_0,
+ /* 9 */ PLAYER_CSMODE_135,
+ /* 10 */ PLAYER_CSMODE_21,
+ /* 11 */ PLAYER_CSMODE_61,
+ /* 12 */ PLAYER_CSMODE_62,
+ /* 13 */ PLAYER_CSMODE_60,
+ /* 14 */ PLAYER_CSMODE_63,
+ /* 15 */ PLAYER_CSMODE_64,
+ /* 16 */ PLAYER_CSMODE_65,
+ /* 17 */ PLAYER_CSMODE_66,
+ /* 18 */ PLAYER_CSMODE_70,
+ /* 19 */ PLAYER_CSMODE_19,
+ /* 20 */ PLAYER_CSMODE_71,
+ /* 21 */ PLAYER_CSMODE_72,
+ /* 22 */ PLAYER_CSMODE_67,
+ /* 23 */ PLAYER_CSMODE_73,
+ /* 24 */ PLAYER_CSMODE_74,
+ /* 25 */ PLAYER_CSMODE_75,
+ /* 26 */ PLAYER_CSMODE_68,
+ /* 27 */ PLAYER_CSMODE_69,
+ /* 28 */ PLAYER_CSMODE_76,
+ /* 29 */ PLAYER_CSMODE_116,
+ /* 30 */ PLAYER_CSMODE_0,
+ /* 31 */ PLAYER_CSMODE_40,
+ /* 32 */ PLAYER_CSMODE_0,
+ /* 33 */ -PLAYER_CSMODE_52, // the only negative one
+ /* 34 */ PLAYER_CSMODE_42,
+ /* 35 */ PLAYER_CSMODE_43,
+ /* 36 */ PLAYER_CSMODE_57,
+ /* 37 */ PLAYER_CSMODE_81,
+ /* 38 */ PLAYER_CSMODE_41,
+ /* 39 */ PLAYER_CSMODE_53,
+ /* 40 */ PLAYER_CSMODE_54,
+ /* 41 */ PLAYER_CSMODE_44,
+ /* 42 */ PLAYER_CSMODE_55,
+ /* 43 */ PLAYER_CSMODE_45,
+ /* 44 */ PLAYER_CSMODE_46,
+ /* 45 */ PLAYER_CSMODE_47,
+ /* 46 */ PLAYER_CSMODE_48,
+ /* 47 */ PLAYER_CSMODE_49,
+ /* 48 */ PLAYER_CSMODE_50,
+ /* 49 */ PLAYER_CSMODE_51,
+ /* 50 */ PLAYER_CSMODE_77,
+ /* 51 */ PLAYER_CSMODE_78,
+ /* 52 */ PLAYER_CSMODE_79,
+ /* 53 */ PLAYER_CSMODE_80,
+ /* 54 */ PLAYER_CSMODE_81,
+ /* 55 */ PLAYER_CSMODE_82,
+ /* 56 */ PLAYER_CSMODE_83,
+ /* 57 */ PLAYER_CSMODE_84,
+ /* 58 */ PLAYER_CSMODE_85,
+ /* 59 */ PLAYER_CSMODE_86,
+ /* 60 */ PLAYER_CSMODE_87,
+ /* 61 */ PLAYER_CSMODE_88,
+ /* 62 */ PLAYER_CSMODE_89,
+ /* 63 */ PLAYER_CSMODE_90,
+ /* 64 */ PLAYER_CSMODE_91,
+ /* 65 */ PLAYER_CSMODE_92,
+ /* 66 */ PLAYER_CSMODE_94,
+ /* 67 */ PLAYER_CSMODE_95,
+ /* 68 */ PLAYER_CSMODE_100,
+ /* 69 */ PLAYER_CSMODE_101,
+ /* 70 */ PLAYER_CSMODE_98,
+ /* 71 */ PLAYER_CSMODE_99,
+ /* 72 */ PLAYER_CSMODE_102,
+ /* 73 */ PLAYER_CSMODE_103,
+ /* 74 */ PLAYER_CSMODE_104,
+ /* 75 */ PLAYER_CSMODE_112,
+ /* 76 */ PLAYER_CSMODE_113,
+ /* 77 */ PLAYER_CSMODE_117,
+ /* 78 */ PLAYER_CSMODE_104,
+ /* 79 */ PLAYER_CSMODE_104,
+ /* 80 */ PLAYER_CSMODE_105,
+ /* 81 */ PLAYER_CSMODE_106,
+ /* 82 */ PLAYER_CSMODE_107,
+ /* 83 */ PLAYER_CSMODE_108,
+ /* 84 */ PLAYER_CSMODE_109,
+ /* 85 */ PLAYER_CSMODE_110,
+ /* 86 */ PLAYER_CSMODE_118,
+ /* 87 */ PLAYER_CSMODE_119,
+ /* 88 */ PLAYER_CSMODE_120,
+ /* 89 */ PLAYER_CSMODE_114,
+ /* 90 */ PLAYER_CSMODE_111,
+ /* 91 */ PLAYER_CSMODE_122,
+};
+
+f32 D_8085D3E0[PLAYER_FORM_MAX] = {
+ 0.8f, // PLAYER_FORM_FIERCE_DEITY
+ 0.6f, // PLAYER_FORM_GORON
+ 0.8f, // PLAYER_FORM_ZORA
+ 1.5f, // PLAYER_FORM_DEKU
+ 1.0f, // PLAYER_FORM_HUMAN
+};
+
+void func_80844784(PlayState* play, Player* this) {
+ f32 var_fv0;
+ s16 var_a3;
+ f32 temp_ft4;
+ s32 temp_ft2;
+ f32 temp_fv1_2;
+ f32 sp58;
+ f32 sp54;
+ f32 sp50;
+ f32 sp4C;
+ f32 sp48;
+ f32 sp44;
+ f32 temp_fa0;
+ f32 temp_fa1;
+ s16 temp_v0;
+ f32 temp_fv0_2;
+
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sPlayerCurrentFloorType == FLOOR_TYPE_5) &&
+ (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)) {
+ var_a3 = this->currentYaw;
+ var_fv0 = this->linearVelocity;
+ temp_v0 = this->actor.world.rot.y - var_a3;
+
+ if ((ABS_ALT(temp_v0) > 0x6000) && (this->actor.speed != 0.0f)) {
+ var_fv0 = 0.0f;
+ var_a3 += 0x8000;
+ }
+
+ if (Math_StepToF(&this->actor.speed, var_fv0, 0.35f) && (var_fv0 == 0.0f)) {
+ this->actor.world.rot.y = this->currentYaw;
+ }
+
+ if (this->linearVelocity != 0.0f) {
+ temp_ft2 = (fabsf(this->linearVelocity) * 700.0f) - (fabsf(this->actor.speed) * 100.0f);
+ temp_ft2 = CLAMP(temp_ft2, 0, 0x546);
+
+ Math_ScaledStepToS(&this->actor.world.rot.y, var_a3, temp_ft2);
+ }
+ if ((this->linearVelocity == 0.0f) && (this->actor.speed != 0.0f)) {
+ func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG),
+ this->actor.speed);
+ }
+ } else {
+ this->actor.speed = this->linearVelocity;
+ this->actor.world.rot.y = this->currentYaw;
+ }
+
+ Actor_UpdateVelocityWithGravity(&this->actor);
+ D_80862B3C = 0.0f;
+ if ((gSaveContext.save.saveInfo.playerData.health != 0) &&
+ ((this->pushedSpeed != 0.0f) || (this->windSpeed != 0.0f) || (play->envCtx.windSpeed >= 50.0f)) &&
+ (!Player_InCsMode(play)) &&
+ !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) &&
+ !(this->stateFlags3 & PLAYER_STATE3_100) && (func_8084D4EC != this->actionFunc) &&
+ (this->actor.id == ACTOR_PLAYER)) {
+ this->actor.velocity.x += this->pushedSpeed * Math_SinS(this->pushedYaw);
+ this->actor.velocity.z += this->pushedSpeed * Math_CosS(this->pushedYaw);
+ temp_fv1_2 = 10.0f - this->actor.velocity.y;
+ if (temp_fv1_2 > 0.0f) {
+ sp58 = D_8085D3E0[this->transformation];
+ sp54 = this->windSpeed * sp58;
+ sp50 = Math_SinS(this->windAngleX) * sp54;
+ sp4C = Math_CosS(this->windAngleX) * sp54;
+ sp48 = Math_SinS(this->windAngleY) * sp4C;
+ sp44 = Math_CosS(this->windAngleY) * sp4C;
+
+ if ((sp50 > 0.0f) && (this->transformation == PLAYER_FORM_DEKU) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ if (Player_SetAction(play, this, func_80856918, 1)) {
+ this->stateFlags3 |= PLAYER_STATE3_2000 | PLAYER_STATE3_1000000;
+ func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN);
+ func_8019FD90(4, 2);
+ }
+
+ this->unk_AE8 = 0x270F;
+ Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos);
+ }
+
+ if (play->envCtx.windSpeed >= 50.0f) {
+ temp_fa0 = play->envCtx.windDir.x;
+ temp_fa1 = play->envCtx.windDir.y;
+ temp_ft4 = play->envCtx.windDir.z;
+
+ temp_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4));
+ if (temp_fv0_2 != 0.0f) {
+ temp_fv0_2 = ((play->envCtx.windSpeed - 50.0f) * 0.1f * sp58) / temp_fv0_2;
+
+ sp48 -= temp_fa0 * temp_fv0_2;
+ sp50 -= temp_fa1 * temp_fv0_2;
+ sp44 -= temp_ft4 * temp_fv0_2;
+ }
+ }
+
+ if (temp_fv1_2 < sp50) {
+ temp_fv1_2 /= sp50;
+
+ sp48 *= temp_fv1_2;
+ sp50 *= temp_fv1_2;
+ sp44 *= temp_fv1_2;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ D_80862B3C = (sp44 * Math_CosS(this->currentYaw)) + (Math_SinS(this->currentYaw) * sp48);
+ if (fabsf(D_80862B3C) > 4.0f) {
+ func_8083FBC4(play, this);
+ }
+
+ func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG),
+ fabsf(D_80862B3C));
+ }
+
+ this->actor.velocity.x += sp48;
+ this->actor.velocity.z += sp44;
+ this->actor.velocity.y += sp50;
+ }
+ }
+
+ Actor_UpdatePos(&this->actor);
+}
+
+Color_RGBA8 D_8085D3F4 = { 100, 255, 255, 0 };
+Color_RGBA8 D_8085D3F8 = { 0, 100, 100, 0 };
+
+void func_80844D80(PlayState* play, Player* this) {
+ Vec3f pos;
+ Vec3f spA0;
+ Vec3f velocity;
+ Vec3f accel;
+ Vec3f sp7C;
+ s32 i;
+
+ Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, &this->meleeWeaponInfo[0].base, &sp7C);
+ Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, 0.3f, &spA0);
+
+ for (i = 0; i < 2; i++) {
+ Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, Rand_ZeroOne(), &pos);
+ Math_Vec3f_AddRand(&pos, 15.0f, &pos);
+ Math_Vec3f_DistXYZAndStoreNormDiff(&spA0, &pos, 1.7f, &velocity);
+ Math_Vec3f_ScaleAndStore(&velocity, 0.01f, &accel);
+ EffectSsKirakira_SpawnDispersed(play, &pos, &velocity, &accel, &D_8085D3F4, &D_8085D3F8,
+ Rand_S16Offset(-20, -120), 15);
+ }
+}
+
+f32 D_8085D3FC[] = { 0.005f, 0.05f };
+
+f32 sWaterConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = {
+ 2.0f, // CONVEYOR_SPEED_SLOW
+ 4.0f, // CONVEYOR_SPEED_MEDIUM
+ 11.0f, // CONVEYOR_SPEED_FAST
+};
+f32 sFloorConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = {
+ 0.5f, // CONVEYOR_SPEED_SLOW
+ 1.0f, // CONVEYOR_SPEED_MEDIUM
+ 3.0f, // CONVEYOR_SPEED_FAST
+};
+
+void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
+ f32 temp_fv0;
+ f32 temp_fv1;
+
+ sPlayerControlInput = input;
+ if (this->unk_D6A < 0) {
+ this->unk_D6A++;
+ if (this->unk_D6A == 0) {
+ this->unk_D6A = 1;
+ play_sound(NA_SE_OC_REVENGE);
+ }
+ }
+
+ Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.home.pos);
+
+ temp_fv1 = fabsf(this->linearVelocity) * (fabsf(Math_SinS(this->unk_B6C) * 800.0f) + 100.0f);
+
+ Math_StepToF(&this->unk_AC0, 0.0f, CLAMP_MIN(temp_fv1, 300.0f));
+
+ if (this->unk_D57 != 0) {
+ this->unk_D57--;
+ }
+
+ if (this->unk_B5E != 0) {
+ this->unk_B5E--;
+ }
+
+ if (this->unk_D6B != 0) {
+ this->unk_D6B--;
+ }
+
+ if (this->invincibilityTimer < 0) {
+ this->invincibilityTimer++;
+ } else if (this->invincibilityTimer > 0) {
+ this->invincibilityTimer--;
+ }
+
+ if (this->unk_B64 != 0) {
+ this->unk_B64--;
+ }
+
+ if (this->blastMaskTimer != 0) {
+ this->blastMaskTimer--;
+ }
+
+ if (gSaveContext.jinxTimer != 0) {
+ gSaveContext.jinxTimer--;
+ }
+
+ func_80122C20(play, &this->unk_3D0);
+ if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this)) {
+ func_80844D80(play, this);
+ }
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ s32 var_v0 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 1 : 0;
+
+ Math_StepToF(&this->unk_B10[0], var_v0, D_8085D3FC[var_v0]);
+ }
+ func_80832888(this, play);
+ if (play->roomCtx.curRoom.enablePosLights) {
+ Lights_PointSetColorAndRadius(&this->lightInfo, 255, 255, 255, 60);
+ } else {
+ this->lightInfo.params.point.radius = -1;
+ }
+
+ if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) {
+ func_808442D8(play, this);
+ } else if (this->heldItemAction == PLAYER_IA_FISHING_ROD) {
+ if (this->unk_B28 < 0) {
+ this->unk_B28++;
+ }
+ }
+
+ if (this->shockTimer != 0) {
+ func_808445C4(play, this);
+ }
+ if (this->isBurning) {
+ func_808341F4(play, this);
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_8000) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Player_StopHorizontalMovement(this);
+ Actor_MoveWithGravity(&this->actor);
+ }
+ func_80843178(play, this);
+ } else {
+ f32 temp_fa0;
+ f32 var_fv1_2;
+ s32 var_v1;
+ s32 pad;
+
+ if (this->currentBoots != this->prevBoots) {
+ if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ func_8082DC64(play, this);
+ if (this->ageProperties->unk_2C < this->actor.depthInWater) {
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ }
+ }
+ } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) &&
+ ((this->prevBoots == PLAYER_BOOTS_ZORA_UNDERWATER) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) {
+ func_8083B930(play, this);
+ this->stateFlags2 &= ~PLAYER_STATE2_400;
+ if (func_808508C8 == this->actionFunc) {
+ this->unk_AE8 = 20;
+ }
+ }
+ this->prevBoots = this->currentBoots;
+ }
+ if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) {
+ this->actor.parent = this->rideActor;
+ func_80837BD0(play, this);
+ this->unk_AE8 = -1;
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_1);
+ func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+ }
+
+ if (this->unk_ADC == 0) {
+ this->unk_ADD = 0;
+ } else if (this->unk_ADC < 0) {
+ this->unk_ADC++;
+ } else {
+ this->unk_ADC--;
+ }
+
+ if (!(this->stateFlags3 & PLAYER_STATE3_2000)) {
+ Math_ScaledStepToS(&this->unk_AAA, 0, 0x190);
+ }
+
+ if ((this->transformation >= PLAYER_FORM_GORON) && (this->transformation <= PLAYER_FORM_DEKU)) {
+ func_800BBB74(&this->blinkInfo, 20, 80, 3);
+ } else {
+ func_800BBAC0(&this->blinkInfo, 20, 80, 6);
+ }
+
+ this->actor.shape.face = ((play->gameplayFrames & 0x20) ? 0 : 3) + this->blinkInfo.eyeTexIndex;
+
+ if (this->currentMask == PLAYER_MASK_BUNNY) {
+ Player_UpdateBunnyEars(this);
+ }
+
+ if (func_800B7118(this)) {
+ func_808484F0(this);
+ }
+
+ if ((play->unk_18844 == 0) && !(this->skelAnime.moveFlags & ANIM_FLAG_80)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_2) && (this->actor.parent == NULL)) {
+ func_80844784(play, this);
+ }
+ func_80843178(play, this);
+ } else {
+ sPlayerCurrentFloorType = FLOOR_TYPE_0;
+ this->floorProperty = FLOOR_PROPERTY_0;
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ this->actor.floorPoly = this->rideActor->floorPoly;
+ this->actor.floorBgId = this->rideActor->floorBgId;
+ }
+ sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED;
+ this->pushedSpeed = 0.0f;
+ }
+
+ func_8083562C(play, this, this->actor.floorPoly, this->actor.floorBgId);
+ if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) {
+ f32 conveyorSpeed;
+ s32 pad2;
+
+ sPlayerConveyorSpeedIndex--;
+ if (!sPlayerIsOnFloorConveyor) {
+ conveyorSpeed = sWaterConveyorSpeeds[sPlayerConveyorSpeedIndex];
+ if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ conveyorSpeed /= 4.0f;
+ }
+ } else {
+ conveyorSpeed = sFloorConveyorSpeeds[sPlayerConveyorSpeedIndex];
+ }
+
+ Math_StepToF(&this->pushedSpeed, conveyorSpeed, conveyorSpeed * 0.1f);
+ Math_ScaledStepToS(&this->pushedYaw, D_80862B16,
+ ((this->stateFlags1 & PLAYER_STATE1_8000000) ? 400.0f : 800.0f) * conveyorSpeed);
+ } else if (this->pushedSpeed != 0.0f) {
+ Math_StepToF(&this->pushedSpeed, 0.0f, (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 2.0f);
+ }
+ if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) &&
+ !(this->stateFlags3 & PLAYER_STATE3_80) && (func_80854430 != this->actionFunc)) {
+ func_8083BB4C(play, this);
+ if (!Play_InCsMode(play)) {
+ if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_80000000) &&
+ (gSaveContext.save.saveInfo.playerData.health == 0) &&
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_DEATH])) {
+ if (this->stateFlags3 & PLAYER_STATE3_1000000) {
+ func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish);
+ } else if (this->stateFlags1 &
+ (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) {
+ func_8082DD2C(play, this);
+ func_80833AA0(this, play);
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->stateFlags1 & PLAYER_STATE1_8000000)) {
+ func_80831F34(play, this,
+ func_801242B4(this)
+ ? &gPlayerAnim_link_swimer_swim_down
+ : ((this->shockTimer != 0) ? &gPlayerAnim_link_normal_electric_shock_end
+ : &gPlayerAnim_link_derth_rebirth));
+ }
+ } else {
+ if ((this->actor.parent == NULL) &&
+ (func_8082DA90(play) || (this->unk_D6B != 0) || !func_80834600(this, play))) {
+ func_8083827C(this, play);
+ } else {
+ this->fallStartHeight = this->actor.world.pos.y;
+ }
+
+ Player_DetectSecrets(play, this);
+ }
+ }
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (func_8084D820 == this->actionFunc) &&
+ (this->unk_397 == 4)) {
+ this->actor.world.pos.y = this->actor.prevPos.y;
+ }
+
+ if (play->csCtx.state != CS_STATE_IDLE) {
+ if ((this->csMode != PLAYER_CSMODE_5) && !(this->stateFlags1 & PLAYER_STATE1_800000)) {
+ if (!(this->stateFlags2 & PLAYER_STATE2_80) && (this->actor.id == ACTOR_PLAYER)) {
+ if ((play->csCtx.playerCue != NULL) && (D_8085D384[play->csCtx.playerCue->id] != 0)) {
+ func_800B7298(play, NULL, PLAYER_CSMODE_5);
+ Player_StopHorizontalMovement(this);
+ } else if (((u32)this->csMode == PLAYER_CSMODE_0) &&
+ !(this->stateFlags2 & (PLAYER_STATE2_400 | PLAYER_STATE2_8000000)) &&
+ (play->csCtx.state != CS_STATE_STOP)) {
+ func_800B7298(play, NULL, PLAYER_CSMODE_20);
+ Player_StopHorizontalMovement(this);
+ }
+ }
+ }
+ }
+
+ if ((u32)this->csMode != PLAYER_CSMODE_0) {
+ if ((this->csMode != PLAYER_CSMODE_END) ||
+ !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 |
+ PLAYER_STATE1_200000 | PLAYER_STATE1_4000000))) {
+ if (func_8085B08C != this->actionFunc) {
+ this->unk_AA5 = PLAYER_UNKAA5_4;
+ if (this->csMode == PLAYER_CSMODE_5) {
+ func_808387A0(play, this);
+ func_8082DAD4(this);
+ }
+ }
+ } else if (func_8085B08C != this->actionFunc) {
+ func_8085AACC(play, this, 0);
+ }
+ } else {
+ this->prevCsMode = PLAYER_CSMODE_0;
+ }
+
+ func_8083BF54(play, this);
+ Lights_PointSetPosition(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f,
+ this->actor.world.pos.z);
+
+ if (((this->targetedActor == NULL) || (this->targetedActor == this->talkActor) ||
+ (this->targetedActor->hintId == TATL_HINT_ID_NONE)) &&
+ (this->tatlTextId == 0)) {
+ this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000);
+ }
+
+ this->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_1000 | PLAYER_STATE1_400000);
+ this->stateFlags2 &= ~(PLAYER_STATE2_1 | PLAYER_STATE2_4 | PLAYER_STATE2_8 | PLAYER_STATE2_20 |
+ PLAYER_STATE2_40 | PLAYER_STATE2_100 | PLAYER_STATE2_200 | PLAYER_STATE2_1000 |
+ PLAYER_STATE2_4000 | PLAYER_STATE2_10000 | PLAYER_STATE2_400000 | PLAYER_STATE2_4000000);
+ this->stateFlags3 &= ~(PLAYER_STATE3_10 | PLAYER_STATE3_40 | PLAYER_STATE3_100 | PLAYER_STATE3_800 |
+ PLAYER_STATE3_1000 | PLAYER_STATE3_100000 | PLAYER_STATE3_2000000 |
+ PLAYER_STATE3_4000000 | PLAYER_STATE3_8000000 | PLAYER_STATE3_10000000);
+ func_808425B4(this);
+ func_8082EB38(play, this);
+
+ D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f;
+ D_8085C3E8 = 1.0f / D_8085C3E4;
+
+ D_80862B48 = D_80862B4C = 0;
+
+ var_v1 = Play_InCsMode(play);
+ D_80862B2C = this->currentMask;
+ if (!(this->stateFlags3 & PLAYER_STATE3_4)) {
+ this->actionFunc(this, play);
+ }
+
+ if (!var_v1) {
+ Player_SetDoAction(play, this);
+ }
+
+ Player_UpdateCamAndSeqModes(play, this);
+
+ if (this->skelAnime.moveFlags & ANIM_FLAG_8) {
+ AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime,
+ (this->skelAnime.moveFlags & ANIM_FLAG_4) ? 1.0f
+ : this->ageProperties->unk_08);
+ }
+
+ func_80832578(this, play);
+ if (this->actor.flags & ACTOR_FLAG_TALK_REQUESTED) {
+ this->talkActorDistance = 0.0f;
+ } else {
+ this->talkActor = NULL;
+ this->exchangeItemId = PLAYER_IA_NONE;
+ this->talkActorDistance = FLT_MAX;
+ }
+ if (!(this->actor.flags & ACTOR_FLAG_20000000) && (this->unk_AA5 != PLAYER_UNKAA5_5)) {
+ this->unk_A90 = NULL;
+ this->unk_A94 = FLT_MAX;
+ }
+ if (!(this->stateFlags1 & PLAYER_STATE1_800)) {
+ this->interactRangeActor = NULL;
+ this->getItemDirection = 0x6000;
+ }
+ if (this->actor.parent == NULL) {
+ this->rideActor = NULL;
+ }
+
+ this->tatlTextId = 0;
+ this->unk_B2B = -1;
+ this->closestSecretDistSq = FLT_MAX;
+ this->doorType = PLAYER_DOORTYPE_NONE;
+ this->unk_B75 = 0;
+ this->unk_A78 = NULL;
+
+ Math_StepToF(&this->windSpeed, 0.0f, 0.5f);
+ if ((this->unk_B62 != 0) ||
+ ((gSaveContext.magicState == MAGIC_STATE_IDLE) && (gSaveContext.save.saveInfo.playerData.magic != 0) &&
+ (this->stateFlags1 & PLAYER_STATE1_10))) {
+ func_8082F1AC(play, this);
+ }
+
+ temp_fv0 = this->actor.world.pos.y - this->actor.prevPos.y;
+ var_fv1_2 =
+ temp_fv0 +
+ ((this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].y) *
+ 0.5f);
+ temp_fv0 += this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 10.0f;
+
+ if (this->cylinder.info.toucher.dmgFlags == 0x80000) {
+ this->cylinder.dim.height = 80;
+ var_fv1_2 = ((temp_fv0 + var_fv1_2) * 0.5f) - 40.0f;
+ } else {
+ this->cylinder.dim.height = temp_fv0 - var_fv1_2;
+
+ if (this->cylinder.dim.height < 0) {
+ temp_fa0 = temp_fv0;
+ temp_fv0 = var_fv1_2;
+ var_fv1_2 = temp_fa0;
+ this->cylinder.dim.height = -this->cylinder.dim.height;
+ }
+ }
+
+ this->cylinder.dim.yShift = var_fv1_2 - this->actor.world.pos.y;
+
+ if (this->unk_B62 != 0) {
+ this->shieldCylinder.base.acFlags = AC_NONE;
+ this->shieldCylinder.info.toucher.dmgFlags = 0x80000;
+ this->shieldCylinder.info.toucherFlags = TOUCH_ON;
+ this->shieldCylinder.info.bumperFlags = BUMP_NONE;
+ this->shieldCylinder.dim.height = 80;
+ this->shieldCylinder.dim.radius = 50;
+ this->shieldCylinder.dim.yShift = ((temp_fv0 + var_fv1_2) * 0.5f - 40.0f) - this->actor.world.pos.y;
+
+ Collider_UpdateCylinder(&this->actor, &this->shieldCylinder);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->shieldCylinder.base);
+ } else if (this->stateFlags1 & PLAYER_STATE1_400000) {
+ if ((this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU)) {
+ this->shieldCylinder.base.acFlags = AC_ON | AC_HARD | AC_TYPE_ENEMY;
+ this->shieldCylinder.info.toucher.dmgFlags = 0x100000;
+ this->shieldCylinder.info.toucherFlags = TOUCH_NONE;
+ this->shieldCylinder.info.bumperFlags = BUMP_ON;
+
+ if (this->transformation == PLAYER_FORM_GORON) {
+ this->shieldCylinder.dim.height = 35;
+ } else {
+ this->shieldCylinder.dim.height = 30;
+ }
+
+ if (this->transformation == PLAYER_FORM_GORON) {
+ this->shieldCylinder.dim.radius = 30;
+ } else {
+ this->shieldCylinder.dim.radius = 20;
+ }
+
+ this->shieldCylinder.dim.yShift = 0;
+ Collider_UpdateCylinder(&this->actor, &this->shieldCylinder);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->shieldCylinder.base);
+ this->cylinder.dim.yShift = 0;
+ this->cylinder.dim.height = this->shieldCylinder.dim.height;
+ } else {
+ this->cylinder.dim.height = this->cylinder.dim.height * 0.8f;
+ }
+ }
+
+ Collider_UpdateCylinder(&this->actor, &this->cylinder);
+ if (!(this->stateFlags2 & PLAYER_STATE2_4000)) {
+ if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 |
+ PLAYER_STATE1_800000)) &&
+ !(this->stateFlags3 & PLAYER_STATE3_10000000)) {
+ if ((func_808561B0 != this->actionFunc) && (func_80853D68 != this->actionFunc) &&
+ (this->actor.draw != NULL)) {
+ if ((this->actor.id != ACTOR_PLAYER) && (this->csMode == PLAYER_CSMODE_110)) {
+ this->cylinder.dim.radius = 8;
+ }
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinder.base);
+ }
+ }
+ if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) {
+ if ((func_808561B0 != this->actionFunc) &&
+ ((func_80857BE8 != this->actionFunc) || (this->unk_AE7 != 1))) {
+ if (this->cylinder.base.atFlags != AT_NONE) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base);
+ }
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->cylinder.base);
+ }
+ }
+ }
+
+ AnimationContext_SetNextQueue(play);
+ }
+
+ func_801229FC(this);
+ Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
+
+ if ((this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000)) ||
+ (this != GET_PLAYER(play))) {
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ } else {
+ this->actor.colChkInfo.mass = sPlayerMass[this->transformation];
+ }
+
+ this->stateFlags3 &= ~(PLAYER_STATE3_4 | PLAYER_STATE3_400);
+ Collider_ResetCylinderAC(play, &this->cylinder.base);
+ Collider_ResetCylinderAC(play, &this->shieldCylinder.base);
+ Collider_ResetCylinderAT(play, &this->shieldCylinder.base);
+ Collider_ResetQuadAT(play, &this->meleeWeaponQuads[0].base);
+ Collider_ResetQuadAT(play, &this->meleeWeaponQuads[1].base);
+ Collider_ResetQuadAC(play, &this->shieldQuad.base);
+
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) ||
+ (this->actor.floorBgId != BGCHECK_SCENE)) {
+ this->unk_AC0 = 0.0f;
+ }
+ this->actor.shape.yOffset = this->unk_ABC + this->unk_AC0;
+}
+
+Vec3f D_8085D41C = { 0.0f, 0.0f, -30.0f };
+
+void Player_Update(Actor* thisx, PlayState* play) {
+ static Vec3f sDogSpawnPos;
+ Player* this = (Player*)thisx;
+ s32 dogParams;
+ s32 pad;
+ Input input;
+ s32 pad2;
+
+ this->stateFlags3 &= ~PLAYER_STATE3_10;
+
+ // This block is a leftover dog-following mechanic from OoT
+ if (gSaveContext.dogParams < 0) {
+ if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) {
+ gSaveContext.dogParams = 0;
+ } else {
+ Actor* dog;
+
+ gSaveContext.dogParams &= (u16)~0x8000;
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D41C, &sDogSpawnPos);
+
+ dogParams = gSaveContext.dogParams;
+
+ dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DG, sDogSpawnPos.x, sDogSpawnPos.y, sDogSpawnPos.z, 0,
+ this->actor.shape.rot.y, 0, dogParams | 0x8000);
+ if (dog != NULL) {
+ dog->room = -1;
+ }
+ }
+ }
+
+ if ((this->interactRangeActor != NULL) && (this->interactRangeActor->update == NULL)) {
+ this->interactRangeActor = NULL;
+ }
+
+ if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) {
+ func_8082DCA0(play, this);
+ }
+
+ if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) {
+ input = play->actorCtx.unk_26C;
+ } else if ((this->csMode == PLAYER_CSMODE_5) || (this->stateFlags1 & (PLAYER_STATE1_20 | PLAYER_STATE1_20000000)) ||
+ (this != GET_PLAYER(play)) || func_8082DA90(play) ||
+ (gSaveContext.save.saveInfo.playerData.health == 0)) {
+ bzero(&input, sizeof(Input));
+ this->fallStartHeight = this->actor.world.pos.y;
+ } else {
+ input = *CONTROLLER1(&play->state);
+ if (this->unk_B5E != 0) {
+ input.cur.button &= ~(BTN_CUP | BTN_B | BTN_A);
+ input.press.button &= ~(BTN_CUP | BTN_B | BTN_A);
+ }
+ }
+
+ Player_UpdateCommon(this, play, &input);
+ play->actorCtx.unk268 = 0;
+ bzero(&play->actorCtx.unk_26C, sizeof(Input));
+
+ MREG(52) = this->actor.world.pos.x;
+ MREG(53) = this->actor.world.pos.y;
+ MREG(54) = this->actor.world.pos.z;
+ MREG(55) = this->actor.world.rot.y;
+}
+
+void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList,
+ OverrideLimbDrawFlex overrideLimbDraw) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x0C, cullDList);
+ gSPSegment(POLY_XLU_DISP++, 0x0C, cullDList);
+
+ Player_DrawImpl(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, lod,
+ this->transformation, 0, this->actor.shape.face, overrideLimbDraw, Player_PostLimbDrawGameplay,
+ &this->actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void func_80846460(Player* this) {
+ Vec3f* pos;
+ Vec3f* bodyPartsPos;
+ s32 i;
+
+ this->actor.focus.pos.x = this->actor.world.pos.x;
+ this->actor.focus.pos.z = this->actor.world.pos.z;
+ this->actor.focus.pos.y = this->actor.world.pos.y + 24.0f;
+
+ pos = &this->actor.world.pos;
+ bodyPartsPos = this->bodyPartsPos;
+ for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) {
+ Math_Vec3f_Copy(bodyPartsPos, pos);
+ bodyPartsPos++;
+ }
+
+ this->bodyPartsPos[PLAYER_BODYPART_HEAD].y = this->actor.world.pos.y + 24.0f;
+ this->bodyPartsPos[PLAYER_BODYPART_WAIST].y = this->actor.world.pos.y + 60.0f;
+ Math_Vec3f_Copy(this->actor.shape.feetPos, pos);
+ Math_Vec3f_Copy(&this->actor.shape.feetPos[1], pos);
+}
+
+struct_80124618 D_8085D428[] = {
+ { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } },
+ { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } },
+};
+struct_80124618 D_8085D450[] = {
+ { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } },
+ { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } },
+};
+struct_80124618 D_8085D478[] = {
+ { 0, { 0, 0, 0 } },
+ { 8, { 0, 0, 0 } },
+};
+struct_80124618 D_8085D488[] = {
+ { 0, { 100, 100, 100 } }, { 1, { 100, 60, 100 } }, { 3, { 100, 140, 100 } },
+ { 7, { 100, 80, 100 } }, { 9, { 100, 100, 100 } },
+};
+struct_80124618 D_8085D4B0[] = {
+ { 0, { 100, 100, 100 } }, { 1, { 100, 70, 100 } }, { 3, { 100, 120, 100 } },
+ { 6, { 100, 80, 100 } }, { 8, { 100, 100, 100 } }, { 9, { 100, 100, 100 } },
+};
+struct_80124618 D_8085D4E0[] = {
+ { 0, { 0, 0, 0 } }, { 1, { 0, 0, 0 } }, { 3, { 100, 130, 100 } },
+ { 5, { 130, 130, 130 } }, { 7, { 80, 90, 80 } }, { 9, { 100, 100, 100 } },
+};
+struct_80124618 D_8085D510[] = {
+ { 0, { 0, 50, 0 } },
+ { 1, { 0, 50, 0 } },
+};
+struct_80124618 D_8085D520[] = {
+ { 0, { 100, 120, 100 } },
+ { 1, { 100, 120, 100 } },
+};
+struct_80124618 D_8085D530[] = {
+ { 0, { 160, 120, 160 } },
+ { 1, { 160, 120, 160 } },
+};
+struct_80124618 D_8085D540[] = {
+ { 0, { 0, 0, 0 } },
+ { 2, { 100, 100, 100 } },
+};
+
+struct_80124618* D_8085D550[3] = {
+ D_8085D488,
+ D_8085D4B0,
+ D_8085D4E0,
+};
+struct_80124618* D_8085D55C[3] = {
+ D_8085D428,
+ D_8085D450,
+ D_8085D478,
+};
+struct_80124618* D_8085D568[3] = {
+ D_8085D510,
+ D_8085D520,
+ D_8085D530,
+};
+
+Gfx* D_8085D574[] = {
+ object_link_nuts_DL_009C48,
+ object_link_nuts_DL_009AB8,
+ object_link_nuts_DL_009DB8,
+};
+
+Color_RGB8 D_8085D580 = { 255, 255, 255 };
+Color_RGB8 D_8085D584 = { 80, 80, 200 };
+
+void Player_Draw(Actor* thisx, PlayState* play) {
+ Player* this = THIS;
+ f32 one = 1.0f;
+ s32 spEC = false;
+
+ Math_Vec3f_Copy(&this->unk_D6C, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]);
+ if (this->stateFlags3 & (PLAYER_STATE3_100 | PLAYER_STATE3_40000)) {
+ struct_80124618** spE8 = D_8085D550;
+ struct_80124618** spE4;
+ f32 spE0;
+ Gfx** spDC;
+ s32 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ func_8012C268(&play->state);
+ spEC = true;
+ if (this->stateFlags3 & PLAYER_STATE3_40000) {
+ Matrix_SetTranslateRotateYXZ(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].z, &gZeroVec3s);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ spE8 = D_8085D568;
+ spE0 = 0.0f;
+ } else {
+ Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY);
+ spE0 = this->unk_AE8 - 6;
+ if (spE0 < 0.0f) {
+ spE8 = D_8085D55C;
+ spE0 = this->unk_B86[0];
+ }
+ }
+
+ spE4 = spE8;
+ spDC = D_8085D574;
+
+ for (i = 0; i < 3; i++, spE4++, spDC++) {
+ Matrix_Push();
+ func_80124618(*spE4, spE0, &this->unk_AF0[1]);
+ Matrix_Scale(this->unk_AF0[1].x, this->unk_AF0[1].y, this->unk_AF0[1].z, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, *spDC);
+
+ Matrix_Pop();
+ }
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ if (!(this->stateFlags2 & PLAYER_STATE2_20000000) && (this->unk_ABC > -3900.0f)) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (!spEC) {
+ func_8012C268(&play->state);
+ }
+
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
+ func_800B8050(&this->actor, play, 0);
+ func_800B8118(&this->actor, play, 0);
+ func_80122868(play, this);
+
+ if (this->stateFlags3 & PLAYER_STATE3_1000) {
+ Color_RGB8 spBC;
+ f32 spB8 = this->unk_ABC + 1.0f;
+ f32 spB4 = 1.0f - (this->unk_ABC * 0.5f);
+
+ func_80846460(this);
+ Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (1200.0f * this->actor.scale.y * spB8),
+ this->actor.world.pos.z, MTXMODE_NEW);
+
+ if (this->unk_B86[0] != 0) {
+ Matrix_RotateYS(this->unk_B28, MTXMODE_APPLY);
+ Matrix_RotateXS(this->unk_B86[0], MTXMODE_APPLY);
+ Matrix_RotateYS(-this->unk_B28, MTXMODE_APPLY);
+ }
+
+ Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY);
+ Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY);
+
+ Matrix_Scale(this->actor.scale.x * spB4 * 1.15f, this->actor.scale.y * spB8 * 1.15f,
+ CLAMP_MIN(spB8, spB4) * this->actor.scale.z * 1.15f, MTXMODE_APPLY);
+ Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
+ Scene_SetRenderModeXlu(play, 0, 1);
+ Lib_LerpRGB(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC);
+
+ gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gLinkGoronCurledDL);
+
+ if (this->unk_B86[1] != 0) {
+ if (this->unk_B86[1] < 3) {
+ func_80124618(D_8085D540, this->unk_B86[1], this->unk_AF0);
+ Matrix_Scale(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].z, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ }
+
+ gSPDisplayList(POLY_OPA_DISP++, object_link_goron_DL_00C540);
+ }
+
+ func_80122BA4(play, &this->unk_3D0, 1, 255);
+ func_80122BA4(play, &this->unk_3D0, 2, 255);
+
+ if (this->unk_B86[1] < 3) {
+ if (this->unk_AE7 >= 5) {
+ f32 var_fa1;
+ u8 sp9B;
+
+ var_fa1 = (this->unk_AE7 - 4) * 0.02f;
+
+ if (this->unk_B86[1] != 0) {
+ sp9B = (-this->unk_B86[1] * 0x55) + 0xFF;
+ } else {
+ sp9B = (200.0f * var_fa1);
+ }
+
+ if (this->unk_B86[1] != 0) {
+ var_fa1 = 0.65f;
+ } else {
+ var_fa1 *= one;
+ }
+
+ Matrix_Scale(1.0f, var_fa1, var_fa1, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_013138));
+ gDPSetEnvColor(POLY_XLU_DISP++, 155, 0, 0, sp9B);
+ gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0127B0);
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_014684));
+ gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0134D0);
+ }
+ }
+ } else if ((this->transformation == PLAYER_FORM_GORON) && (this->stateFlags1 & PLAYER_STATE1_400000)) {
+ func_80846460(this);
+ SkelAnime_DrawFlexOpa(play, this->unk_2C8.skeleton, this->unk_2C8.jointTable, this->unk_2C8.dListCount,
+ NULL, NULL, NULL);
+ } else {
+ OverrideLimbDrawFlex sp84 = Player_OverrideLimbDrawGameplayDefault;
+ s32 lod = ((this->csMode != PLAYER_CSMODE_0) || (this->actor.projectedPos.z < 320.0f)) ? 0 : 1;
+ Vec3f sp74;
+
+ //! FAKE
+ if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {}
+
+ if (this->stateFlags1 & PLAYER_STATE1_100000) {
+ SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->actor.focus.pos, &sp74);
+ if (sp74.z < -4.0f) {
+ sp84 = Player_OverrideLimbDrawGameplayFirstPerson;
+ }
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_4000000) {
+ s16 temp_s0_2 = play->gameplayFrames * 600;
+ s16 sp70 = (play->gameplayFrames * 1000) & 0xFFFF;
+
+ Matrix_Push();
+
+ this->actor.scale.y = -this->actor.scale.y;
+ Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x,
+ this->actor.world.pos.y + (2.0f * this->actor.depthInWater) +
+ (this->unk_ABC * this->actor.scale.y),
+ this->actor.world.pos.z, &this->actor.shape.rot);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ Matrix_RotateXS(temp_s0_2, MTXMODE_APPLY);
+ Matrix_RotateYS(sp70, MTXMODE_APPLY);
+ Matrix_Scale(1.1f, 0.95f, 1.05f, MTXMODE_APPLY);
+ Matrix_RotateYS(-sp70, MTXMODE_APPLY);
+ Matrix_RotateXS(-temp_s0_2, MTXMODE_APPLY);
+ Player_DrawGameplay(play, this, lod, gCullFrontDList, sp84);
+ this->actor.scale.y = -this->actor.scale.y;
+
+ Matrix_Pop();
+ }
+
+ gSPClearGeometryMode(POLY_OPA_DISP++, G_CULL_BOTH);
+
+ gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BOTH);
+
+ if ((this->transformation == PLAYER_FORM_ZORA) && (this->unk_B62 != 0) &&
+ !(this->stateFlags3 & PLAYER_STATE3_8000)) {
+ Matrix_Push();
+ Matrix_RotateXS(-0x4000, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, -1800.0f, MTXMODE_APPLY);
+ Player_DrawZoraShield(play, this);
+ Matrix_Pop();
+ }
+
+ Player_DrawGameplay(play, this, lod, gCullBackDList, sp84);
+ }
+
+ func_801229A0(play, this);
+ if (this->stateFlags2 & PLAYER_STATE2_4000) {
+ f32 temp_fa0 = this->unk_B48;
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, -(s32)play->gameplayFrames & 0x7F, 0x20, 0x20, 1, 0,
+ ((s32)play->gameplayFrames * -2) & 0x7F, 0x20, 0x20));
+
+ Matrix_Scale(temp_fa0, temp_fa0, temp_fa0, MTXMODE_APPLY);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255);
+
+ gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL);
+ }
+
+ if (this->getItemDrawIdPlusOne > GID_NONE + 1) {
+ Player_DrawGetItem(play, this);
+ }
+
+ func_80122D44(play, &this->unk_3D0);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_3;
+}
+
+void Player_Destroy(Actor* thisx, PlayState* play) {
+ Player* this = (Player*)thisx;
+
+ Effect_Destroy(play, this->meleeWeaponEffectIndex[0]);
+ Effect_Destroy(play, this->meleeWeaponEffectIndex[1]);
+ Effect_Destroy(play, this->meleeWeaponEffectIndex[2]);
+ LightContext_RemoveLight(play, &play->lightCtx, this->lightNode);
+ Collider_DestroyCylinder(play, &this->cylinder);
+ Collider_DestroyCylinder(play, &this->shieldCylinder);
+ Collider_DestroyQuad(play, &this->meleeWeaponQuads[0]);
+ Collider_DestroyQuad(play, &this->meleeWeaponQuads[1]);
+ Collider_DestroyQuad(play, &this->shieldQuad);
+ ZeldaArena_Free(this->giObjectSegment);
+ ZeldaArena_Free(this->maskObjectSegment);
+ Magic_Reset(play);
+ func_80831454(this);
+}
+
+s32 func_80847190(PlayState* play, Player* this, s32 arg2) {
+ s32 pad;
+ s16 var_s0;
+
+ if (!func_800B7128(this) && !func_8082EF20(this) && !arg2) {
+ var_s0 = sPlayerControlInput->rel.stick_y * 0xF0;
+ Math_SmoothStepToS(&this->actor.focus.rot.x, var_s0, 0xE, 0xFA0, 0x1E);
+
+ var_s0 = sPlayerControlInput->rel.stick_x * -0x10;
+ var_s0 = CLAMP(var_s0, -0xBB8, 0xBB8);
+ this->actor.focus.rot.y += var_s0;
+ } else {
+ s16 temp3;
+
+ temp3 = ((sPlayerControlInput->rel.stick_y >= 0) ? 1 : -1) *
+ (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_y * 0xC8)) * 1500.0f);
+ this->actor.focus.rot.x += temp3;
+
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x1F40, 0xFA0);
+ } else {
+ this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x36B0, 0x36B0);
+ }
+
+ var_s0 = this->actor.focus.rot.y - this->actor.shape.rot.y;
+ temp3 = ((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) *
+ (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_x * 0xC8)) * -1500.0f);
+ var_s0 += temp3;
+
+ this->actor.focus.rot.y = CLAMP(var_s0, -0x4AAA, 0x4AAA) + this->actor.shape.rot.y;
+ }
+
+ this->unk_AA6 |= 2;
+
+ return func_80832754(this, (play->unk_1887C != 0) || func_800B7128(this) || func_8082EF20(this));
+}
+
+void func_8084748C(Player* this, f32* speed, f32 speedTarget, s16 yawTarget) {
+ f32 incrStep = this->skelAnime.curFrame - 10.0f;
+ f32 maxSpeed = (R_RUN_SPEED_LIMIT / 100.0f) * 0.8f;
+
+ if (*speed > maxSpeed) {
+ *speed = maxSpeed;
+ }
+
+ if ((0.0f < incrStep) && (incrStep < 16.0f)) {
+ incrStep = fabsf(incrStep) * 0.5f;
+ } else {
+ speedTarget = 0.0f;
+ incrStep = 0.0f;
+ }
+
+ Math_AsymStepToF(speed, speedTarget * 0.8f, incrStep, (fabsf(*speed) * 0.02f) + 0.05f);
+ Math_ScaledStepToS(&this->currentYaw, yawTarget, 1600); // 1 ESS turn, also one frame of first-person rotation
+}
+
+void func_808475B4(Player* this) {
+ f32 sp4;
+ f32 temp_fa1;
+ f32 temp_fv0;
+ f32 var_ft4 = -5.0f;
+ f32 var_ft5 = this->ageProperties->unk_28;
+ f32 var_ft5_4;
+
+ temp_fv0 = this->actor.depthInWater - var_ft5;
+ if (this->actor.velocity.y < 0.0f) {
+ var_ft5 += 1.0f;
+ }
+
+ if (this->actor.depthInWater < var_ft5) {
+ temp_fv0 = CLAMP(temp_fv0, -0.4f, -0.1f);
+ sp4 = temp_fv0 - ((this->actor.velocity.y <= 0.0f) ? 0.0f : this->actor.velocity.y * 0.5f);
+ } else {
+ if (!(this->stateFlags1 & PLAYER_STATE1_80) && (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) &&
+ (this->actor.velocity.y >= -5.0f)) {
+ sp4 = -0.3f;
+ } else if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.velocity.y < 0.0f)) {
+ var_ft4 = 0.0f;
+ sp4 = -this->actor.velocity.y;
+ } else {
+ var_ft4 = 2.0f;
+ var_ft5_4 = CLAMP(temp_fv0, 0.1f, 0.4f);
+ sp4 = ((this->actor.velocity.y >= 0.0f) ? 0.0f : this->actor.velocity.y * -0.3f) + var_ft5_4;
+ }
+
+ if (this->actor.depthInWater > 100.0f) {
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ }
+ }
+
+ this->actor.velocity.y += sp4;
+ if (((this->actor.velocity.y - var_ft4) * sp4) > 0.0f) {
+ this->actor.velocity.y = var_ft4;
+ }
+ this->actor.gravity = 0.0f;
+}
+
+void func_808477D0(PlayState* play, Player* this, Input* input, f32 arg3) {
+ f32 var_fv0;
+
+ if ((input != NULL) && CHECK_BTN_ANY(input->press.button, BTN_B | BTN_A)) {
+ var_fv0 = 1.0f;
+ } else {
+ var_fv0 = 0.5f;
+ }
+
+ var_fv0 = var_fv0 * arg3;
+ var_fv0 = CLAMP(var_fv0, 1.0f, 2.5f);
+ this->skelAnime.playSpeed = var_fv0;
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+}
+
+s32 func_80847880(PlayState* play, Player* this) {
+ if (play->unk_1887C != 0) {
+ if (play->sceneId == SCENE_20SICHITAI) {
+ Player_SetAction(play, this, func_80854430, 0);
+ play->unk_1887C = 0;
+ this->csMode = PLAYER_CSMODE_0;
+ return true;
+ }
+
+ func_8082DE50(play, this);
+ Player_SetAction(play, this, func_80854614, 0);
+ if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) {
+ func_80831990(play, this, ITEM_BOW);
+ }
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+ this->csMode = PLAYER_CSMODE_0;
+ this->stateFlags1 |= PLAYER_STATE1_100000;
+ Player_StopHorizontalMovement(this);
+ func_80836D8C(this);
+
+ return true;
+ }
+ return false;
+}
+
+s32 func_80847994(PlayState* play, Player* this) {
+ if (this->stateFlags3 & PLAYER_STATE3_20) {
+ this->stateFlags3 &= ~PLAYER_STATE3_20;
+ this->itemAction = PLAYER_IA_OCARINA;
+ this->unk_AA5 = PLAYER_UNKAA5_5;
+ func_80838A90(this, play);
+ return true;
+ }
+ return false;
+}
+
+void func_808479F4(PlayState* play, Player* this, f32 arg2) {
+ if (this->actor.wallBgId != BGCHECK_SCENE) {
+ DynaPolyActor* actor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId);
+
+ if (actor != NULL) {
+ func_800B72F8(actor, arg2, this->actor.world.rot.y);
+ }
+ }
+}
+
+void func_80847A50(Player* this) {
+ Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) +
+ this->ageProperties->surfaceSfxIdOffset);
+}
+
+Vec3f D_8085D588[] = {
+ { 30.0f, 0.0f, 0.0f },
+ { -30.0f, 0.0f, 0.0f },
+};
+Vec3f D_8085D5A0[] = {
+ { 60.0f, 20.0f, 0.0f },
+ { -60.0f, 20.0f, 0.0f },
+};
+Vec3f D_8085D5B8[] = {
+ { 60.0f, -20.0f, 0.0f },
+ { -60.0f, -20.0f, 0.0f },
+};
+Vec3f D_8085D5D0 = { 0.0f, 0.0f, -30.0f };
+
+// related to mounting/unmounting the horse
+s32 func_80847A94(PlayState* play, Player* this, s32 arg2, f32* arg3) {
+ Actor* rideActor = this->rideActor;
+ f32 sp60 = rideActor->world.pos.y + 20.0f;
+ f32 sp5C = rideActor->world.pos.y - 20.0f;
+ Vec3f sp50;
+ Vec3f sp44;
+ CollisionPoly* sp40;
+ CollisionPoly* sp3C;
+ s32 sp38;
+ s32 sp34;
+
+ *arg3 = func_80835CD8(play, this, &D_8085D588[arg2], &sp50, &sp3C, &sp34);
+
+ if ((sp5C < *arg3) && (*arg3 < sp60)) {
+ if (!func_80835D58(play, this, &D_8085D5A0[arg2], &sp40, &sp38, &sp44)) {
+ if (!func_80835D58(play, this, &D_8085D5B8[arg2], &sp40, &sp38, &sp44)) {
+ this->actor.floorPoly = sp3C;
+ this->actor.floorBgId = sp38;
+ this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, sp3C, sp34);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+s32 func_80847BF0(Player* this, PlayState* play) {
+ EnHorse* rideActor = (EnHorse*)this->rideActor;
+ s32 var_a2;
+ f32 sp34;
+
+ if (this->unk_AE8 < 0) {
+ this->unk_AE8 = 0x63;
+ } else {
+ var_a2 = (this->mountSide < 0) ? 0 : 1;
+
+ if (!func_80847A94(play, this, var_a2, &sp34)) {
+ var_a2 ^= 1;
+ if (!func_80847A94(play, this, var_a2, &sp34)) {
+ return false;
+ }
+
+ this->mountSide = -this->mountSide;
+ }
+
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ if (!func_8082DA90(play)) {
+ if (EN_HORSE_CHECK_1(rideActor) || EN_HORSE_CHECK_4(rideActor)) {
+ this->stateFlags2 |= PLAYER_STATE2_400000;
+
+ if (EN_HORSE_CHECK_1(rideActor) ||
+ (EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A))) {
+ rideActor->actor.child = NULL;
+
+ func_8083172C(play, this, func_808505D0, 0);
+ this->unk_B48 = sp34 - rideActor->actor.world.pos.y;
+
+ Player_AnimationPlayOnce(play, this,
+ (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down
+ : &gPlayerAnim_link_uma_right_down);
+
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+// Used in 2 horse-related functions
+void func_80847E2C(Player* this, f32 arg1, f32 minFrame) {
+ f32 addend;
+ f32 dir;
+
+ if ((this->unk_B48 != 0.0f) && (minFrame <= this->skelAnime.curFrame)) {
+ if (arg1 < fabsf(this->unk_B48)) {
+ dir = (this->unk_B48 >= 0.0f) ? 1 : -1;
+ addend = dir * arg1;
+ } else {
+ addend = this->unk_B48;
+ }
+ this->actor.world.pos.y += addend;
+ this->unk_B48 -= addend;
+ }
+}
+
+s32 func_80847ED4(Player* this) {
+ return (this->interactRangeActor != NULL) && (this->interactRangeActor->id == ACTOR_EN_ZOG) &&
+ CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A);
+}
+
+void func_80847F1C(Player* this) {
+ s32 pad;
+ f32 yPos;
+ s16 yaw;
+ Actor* interactRangeActor = this->interactRangeActor;
+
+ if (func_80847ED4(this)) {
+ yPos = this->actor.world.pos.y;
+ yaw = this->currentYaw - interactRangeActor->shape.rot.y;
+ Lib_Vec3f_TranslateAndRotateY(&interactRangeActor->world.pos, interactRangeActor->shape.rot.y, &D_8085D5D0,
+ &this->actor.world.pos);
+ this->actor.world.pos.y = yPos;
+ this->actor.shape.rot.y = interactRangeActor->shape.rot.y;
+
+ interactRangeActor->speed = Math_CosS(ABS_ALT(yaw)) * this->linearVelocity * 0.5f;
+ if (interactRangeActor->speed < 0.0f) {
+ interactRangeActor->speed = 0.0f;
+ }
+ func_8083133C(this);
+ }
+}
+
+AnimSfxEntry D_8085D5DC[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 0, NA_SE_PL_SWIM, STOP),
+};
+
+void func_80847FF8(Player* this, f32* arg1, f32 arg2, s16 arg3) {
+ func_8084748C(this, arg1, arg2, arg3);
+ Player_PlayAnimSfx(this, D_8085D5DC);
+ func_80847F1C(this);
+}
+
+void func_80848048(PlayState* play, Player* this) {
+ Player_SetAction(play, this, func_80851588, 0);
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
+}
+
+s32 func_80848094(PlayState* play, Player* this, f32* arg2, s16* arg3) {
+ PlayerAnimationHeader* anim;
+ s16 temp_v0 = this->currentYaw - *arg3;
+ s32 temp_v0_2;
+
+ if (ABS_ALT(temp_v0) > 0x6000) {
+ anim = &gPlayerAnim_link_swimer_swim_wait;
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) {
+ this->currentYaw = *arg3;
+ } else {
+ *arg2 = 0.0f;
+ *arg3 = this->currentYaw;
+ }
+ } else {
+ temp_v0_2 = func_8083E514(this, arg2, arg3, play);
+ if (temp_v0_2 > 0) {
+ anim = &gPlayerAnim_link_swimer_swim;
+ } else if (temp_v0_2 < 0) {
+ anim = &gPlayerAnim_link_swimer_back_swim;
+ } else {
+ s16 diff = BINANG_SUB(this->actor.shape.rot.y, *arg3);
+
+ if (diff > 0) {
+ anim = &gPlayerAnim_link_swimer_Rside_swim;
+ } else {
+ anim = &gPlayerAnim_link_swimer_Lside_swim;
+ }
+ }
+ }
+
+ if (anim != this->skelAnime.animation) {
+ func_8082E634(play, this, anim);
+ return true;
+ }
+ return false;
+}
+
+void func_808481CC(PlayState* play, Player* this, f32 arg2) {
+ f32 sp2C;
+ s16 sp2A;
+
+ func_80832F78(this, &sp2C, &sp2A, 0.0f, play);
+ func_8084748C(this, &this->linearVelocity, sp2C / 2.0f, sp2A);
+ func_8084748C(this, &this->actor.velocity.y, arg2, this->currentYaw);
+}
+
+void func_80848250(PlayState* play, Player* this) {
+ this->getItemDrawIdPlusOne = GID_NONE + 1;
+ this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800);
+ this->getItemId = GI_NONE;
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+}
+
+void func_80848294(PlayState* play, Player* this) {
+ func_80848250(play, this);
+ func_8082DC28(this);
+ func_80839E74(this, play);
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+// Player_GetItem?
+s32 func_808482E0(PlayState* play, Player* this) {
+ if (this->getItemId == GI_NONE) {
+ return true;
+ }
+
+ if (this->unk_AE7 == 0) {
+ GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1];
+
+ this->unk_AE7 = 1;
+ Message_StartTextbox(play, giEntry->textId, &this->actor);
+ Item_Give(play, giEntry->itemId);
+
+ if ((this->getItemId >= GI_MASK_DEKU) && (this->getItemId <= GI_MASK_KAFEIS_MASK)) {
+ Audio_PlayFanfare(NA_BGM_GET_NEW_MASK);
+ } else if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_10)) ||
+ (this->getItemId == GI_RECOVERY_HEART)) {
+ play_sound(NA_SE_SY_GET_BOXITEM);
+ } else {
+ s32 seqId;
+
+ if ((this->getItemId == GI_HEART_CONTAINER) ||
+ ((this->getItemId == GI_HEART_PIECE) && EQ_MAX_QUEST_HEART_PIECE_COUNT)) {
+ seqId = NA_BGM_GET_HEART | 0x900;
+ } else {
+ s32 var_v1;
+
+ if ((this->getItemId == GI_HEART_PIECE) ||
+ ((this->getItemId >= GI_RUPEE_PURPLE) && (this->getItemId <= GI_RUPEE_HUGE))) {
+ var_v1 = NA_BGM_GET_SMALL_ITEM;
+ } else {
+ var_v1 = NA_BGM_GET_ITEM | 0x900;
+ }
+ seqId = var_v1;
+ }
+
+ Audio_PlayFanfare(seqId);
+ }
+ } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ if (this->getItemId == GI_OCARINA) {
+ // zelda teaching song of time cs?
+ play->nextEntrance = ENTRANCE(CUTSCENE, 0);
+ gSaveContext.nextCutsceneIndex = 0xFFF2;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ this->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ func_8085B28C(play, NULL, PLAYER_CSMODE_WAIT);
+ }
+ this->getItemId = GI_NONE;
+ }
+
+ return false;
+}
+
+AnimSfxEntry D_8085D5E0[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_IT_MASTER_SWORD_SWING, STOP),
+};
+
+void func_808484CC(Player* this) {
+ Player_PlayAnimSfx(this, D_8085D5E0);
+}
+
+void func_808484F0(Player* this) {
+ this->unk_B08 += this->unk_B0C;
+ this->unk_B0C -= this->unk_B08 * 5.0f;
+ this->unk_B0C *= 0.3f;
+
+ if (fabsf(this->unk_B0C) < 0.00001f) {
+ this->unk_B0C = 0.0f;
+ if (fabsf(this->unk_B08) < 0.00001f) {
+ this->unk_B08 = 0.0f;
+ }
+ }
+}
+
+s32 func_80848570(Player* this, PlayState* play) {
+ if (!func_8083A6C0(play, this)) {
+ if (func_808396B8(play, this)) {
+ PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this);
+
+ func_80833864(play, this, meleeWeaponAnim);
+ if ((meleeWeaponAnim >= PLAYER_MWA_SPIN_ATTACK_1H) ||
+ ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this))) {
+ this->stateFlags2 |= PLAYER_STATE2_20000;
+ func_808332A0(play, this, 0, meleeWeaponAnim < PLAYER_MWA_SPIN_ATTACK_1H);
+ }
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+// elegy of emptiness
+void func_80848640(PlayState* play, Player* this) {
+ EnTorch2* torch2;
+ Actor* effChange;
+
+ torch2 = play->actorCtx.elegyShells[this->transformation];
+ if (torch2 != NULL) {
+ Math_Vec3f_Copy(&torch2->actor.home.pos, &this->actor.world.pos);
+ torch2->actor.home.rot.y = this->actor.shape.rot.y;
+ torch2->state = 0;
+ torch2->framesUntilNextState = 20;
+ } else {
+ torch2 = (EnTorch2*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TORCH2, this->actor.world.pos.x,
+ this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
+ this->transformation);
+ }
+
+ if (torch2 != NULL) {
+ play->actorCtx.elegyShells[this->transformation] = torch2;
+ Play_SetupRespawnPoint(&play->state, this->transformation + 3, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B));
+ }
+
+ effChange = Actor_Spawn(&play->actorCtx, play, ACTOR_EFF_CHANGE, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
+ (GET_PLAYER_FORM << 3) | this->transformation);
+ if (effChange != NULL) {
+ //! @bug: This function should only pass Player*: it uses *(this + 0x153), which is meant to be
+ //! player->currentMask, but in this case is garbage in the skelAnime
+ Player_PlaySfx((Player*)effChange, NA_SE_PL_TRANSFORM);
+ }
+}
+
+s32 func_80848780(Player* this, PlayState* play) {
+ if (func_80830B88(play, this)) {
+ return true;
+ }
+ return false;
+}
+
+s32 func_808487B8(Player* this, PlayState* play) {
+ if (func_80830B88(play, this) || func_80830DF0(this, play)) {
+ return true;
+ }
+ return false;
+}
+
+s32 func_80848808(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->unk_284) ||
+ ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) &&
+ (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) &&
+ (this->heldItemAction != PLAYER_IA_STICK) && (play->unk_1887C == 0))))) {
+ func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]);
+ this->unk_ACC = 0;
+ this->unk_AA4 = 0;
+ D_80862B4C = D_80862B48;
+ return this->unk_AC4(this, play);
+ }
+
+ if (func_8082ED94(this) != 0) {
+ func_80830D40(play, this);
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+ this->unk_AA4 = 0;
+ } else {
+ func_80830D40(play, this);
+ }
+ return true;
+}
+
+s32 func_8084894C(Player* this, PlayState* play) {
+ PlayerAnimation_Update(play, &this->unk_284);
+ if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) {
+ func_80830CE8(play, this);
+ } else {
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ Player_SetModelsForHoldingShield(this);
+ if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ func_8082F164(this, BTN_R | BTN_B);
+ }
+ }
+ return true;
+}
+
+s32 func_80848A0C(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ PlayerAnimationHeader* anim;
+ f32 lastFrame;
+
+ anim = func_80830A58(play, this);
+ lastFrame = Animation_GetLastFrame(anim);
+ PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f);
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ Player_SetModelsForHoldingShield(this);
+ return true;
+}
+
+s32 func_80848AB0(Player* this, PlayState* play) {
+ // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284))
+ D_80862B48 = D_80862B4C;
+ if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) {
+ func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]);
+ PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]);
+ this->unk_AA4 = 0;
+ this->unk_AC4(this, play);
+ return false;
+ }
+ return true;
+}
+
+s32 func_80848B6C(Player* this, PlayState* play) {
+ if (this->unk_B28 >= 0) {
+ this->unk_B28 = -this->unk_B28;
+ }
+
+ if (!Player_IsHoldingHookshot(this) || func_80831124(play, this)) {
+ if (!func_80830B88(play, this) && !func_80831094(this, play)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+PlayerAnimationHeader* D_8085D5E4[] = {
+ &gPlayerAnim_link_hook_walk2ready,
+ &gPlayerAnim_link_bow_walk2ready,
+ &gPlayerAnim_pn_tamahakidf,
+};
+
+PlayerAnimationHeader* D_8085D5F0[] = {
+ &gPlayerAnim_link_hook_wait,
+ &gPlayerAnim_link_bow_bow_wait,
+ &gPlayerAnim_pn_tamahakidf,
+};
+
+u16 D_8085D5FC[] = {
+ NA_SE_IT_BOW_FLICK,
+ NA_SE_PL_DEKUNUTS_MISS_FIRE,
+ NA_SE_NONE,
+ NA_SE_NONE,
+};
+
+s32 func_80848BF4(Player* this, PlayState* play) {
+ s32 index;
+ s32 temp;
+
+ if (Player_IsHoldingHookshot(this)) {
+ index = 0;
+ } else {
+ temp = (this->transformation != PLAYER_FORM_DEKU) ? 1 : 2;
+ index = temp;
+ }
+
+ if (this->transformation != PLAYER_FORM_DEKU) {
+ Math_ScaledStepToS(&this->upperLimbRot.z, 0x4B0, 0x190);
+ this->unk_AA6 |= 0x100;
+ }
+
+ if ((this->unk_ACE == 0) && (func_8082ED94(this) == 0) &&
+ (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) {
+ PlayerAnimation_PlayOnce(play, &this->unk_284, D_8085D5E4[index]);
+ this->unk_ACE = -1;
+ } else if (PlayerAnimation_Update(play, &this->unk_284)) {
+ PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]);
+ this->unk_ACE = 1;
+ } else if (this->unk_ACE == 1) {
+ this->unk_ACE = 2;
+ }
+
+ if (this->unk_ACC >= 0xB) {
+ this->unk_ACC--;
+ }
+
+ func_80831010(this, play);
+ if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) {
+ func_8082F43C(play, this, func_80848E4C);
+ if (this->unk_B28 >= 0) {
+ if (index != 0) {
+ if (!func_80831194(play, this)) {
+ Player_PlaySfx(this, D_8085D5FC[this->unk_B28 - 1]);
+ }
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f);
+ }
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ func_80831194(play, this);
+ }
+ }
+ this->unk_ACC = 0xA;
+ Player_StopHorizontalMovement(this);
+ } else {
+ this->stateFlags3 |= PLAYER_STATE3_40;
+ }
+
+ return 1;
+}
+
+s32 func_80848E4C(Player* this, PlayState* play) {
+ s32 animFinished = PlayerAnimation_Update(play, &this->unk_284);
+
+ if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) {
+ return true;
+ }
+
+ if (!func_80830B88(play, this) &&
+ ((((this->unk_B28 < 0) && (D_80862B4C != 0)) ||
+ ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && (D_80862B48 != 0))) ||
+ func_80830F9C(play))) {
+
+ this->unk_B28 = ABS_ALT(this->unk_B28);
+ if (func_808306F8(this, play)) {
+ if (Player_IsHoldingHookshot(this)) {
+ this->unk_ACE = 1;
+ } else {
+ PlayerAnimation_PlayOnce(play, &this->unk_284,
+ (this->transformation == PLAYER_FORM_DEKU)
+ ? &gPlayerAnim_pn_tamahakidf
+ : &gPlayerAnim_link_bow_bow_shoot_next);
+ }
+ }
+ } else {
+ if (this->unk_ACC != 0) {
+ this->unk_ACC--;
+ }
+
+ if ((func_8082FBE8(this)) || (this->unk_AA5 != PLAYER_UNKAA5_0) || (this->stateFlags1 & PLAYER_STATE1_100000)) {
+ if (this->unk_ACC == 0) {
+ this->unk_ACC++;
+ }
+ return true;
+ }
+
+ if (Player_IsHoldingHookshot(this)) {
+ func_8082F43C(play, this, func_80848B6C);
+ } else {
+ func_8082F43C(play, this, func_80849054);
+ PlayerAnimation_PlayOnce(play, &this->unk_284,
+ (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf
+ : &gPlayerAnim_link_bow_bow_shoot_end);
+ }
+ this->unk_ACC = 0;
+ }
+
+ return true;
+}
+
+s32 func_80849054(Player* this, PlayState* play) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) {
+ func_8082F43C(play, this, func_80848B6C);
+ }
+ return true;
+}
+
+s32 func_808490B4(Player* this, PlayState* play) {
+ Actor* heldActor = this->heldActor;
+
+ if (heldActor == NULL) {
+ func_808309CC(play, this);
+ }
+
+ if (func_80830B88(play, this)) {
+ return true;
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait);
+ }
+
+ if ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) {
+ this->actor.terminalVelocity = -2.0f;
+ this->actor.gravity = -0.5f;
+ this->fallStartHeight = this->actor.world.pos.y;
+ }
+ return true;
+ }
+ return func_80848780(this, play);
+}
+
+s32 func_808491B4(Player* this, PlayState* play) {
+ if (func_80830B88(play, this)) {
+ return true;
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_2000000) {
+ func_8082F43C(play, this, func_80849570);
+ } else if (func_80831094(this, play)) {
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_8084923C(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ func_8082F43C(play, this, func_808492C4);
+ PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim);
+ }
+ if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) {
+ func_80831010(this, play);
+ }
+ return true;
+}
+
+s32 func_808492C4(Player* this, PlayState* play) {
+ PlayerAnimation_Update(play, &this->unk_284);
+ func_80831010(this, play);
+ if (D_80862B4C == 0) {
+ func_8082F43C(play, this, func_8084933C);
+ PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack);
+ }
+ return true;
+}
+
+s32 func_8084933C(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ func_8082F43C(play, this, func_80849570);
+ this->unk_ACC = 0;
+ } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) {
+ Vec3f pos;
+ s16 untargetedRotY;
+
+ func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND], this->actor.shape.rot.y, 0.0f, &pos);
+ pos.y = this->actor.world.pos.y + 50.0f;
+
+ untargetedRotY = this->actor.shape.rot.y - 0x190;
+ this->boomerangActor = Actor_Spawn(
+ &play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x,
+ (this->targetedActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT);
+
+ if (this->boomerangActor != NULL) {
+ EnBoom* leftBoomerang = (EnBoom*)this->boomerangActor;
+ EnBoom* rightBoomerang;
+
+ leftBoomerang->moveTo = this->targetedActor;
+ if (leftBoomerang->moveTo != NULL) {
+ leftBoomerang->unk_1CF = 0x10;
+ }
+ leftBoomerang->unk_1CC = leftBoomerang->unk_1CF + 0x24;
+
+ func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], this->actor.shape.rot.y, 0.0f, &pos);
+
+ untargetedRotY = (this->actor.shape.rot.y + 0x190);
+ rightBoomerang =
+ (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x,
+ (this->targetedActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY,
+ 0, ZORA_BOOMERANG_RIGHT);
+
+ if (rightBoomerang != NULL) {
+ rightBoomerang->moveTo = this->targetedActor;
+ if (rightBoomerang->moveTo != NULL) {
+ rightBoomerang->unk_1CF = 0x10;
+ }
+
+ rightBoomerang->unk_1CC = rightBoomerang->unk_1CF + 0x24;
+ leftBoomerang->actor.child = &rightBoomerang->actor;
+ rightBoomerang->actor.parent = &leftBoomerang->actor;
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_2000000;
+ this->stateFlags3 &= ~PLAYER_STATE3_800000;
+ if (!func_80123420(this)) {
+ func_8083133C(this);
+ }
+
+ this->unk_D57 = 20;
+
+ Player_PlaySfx(this, NA_SE_IT_BOOMERANG_THROW);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ }
+ }
+
+ return true;
+}
+
+s32 func_80849570(Player* this, PlayState* play) {
+ if (func_80830B88(play, this)) {
+ return true;
+ }
+
+ if (this->stateFlags3 & PLAYER_STATE3_800000) {
+ func_8082F43C(play, this, func_80849620);
+ PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch);
+ this->stateFlags3 &= ~PLAYER_STATE3_800000;
+ Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_80849620(Player* this, PlayState* play) {
+ if (!func_808491B4(this, play) && PlayerAnimation_Update(play, &this->unk_284)) {
+ if (this->stateFlags1 & PLAYER_STATE1_2000000) {
+ func_8082F43C(play, this, func_80849570);
+ this->unk_ACC = 0;
+ } else {
+ func_8082F43C(play, this, func_80848780);
+ }
+ }
+ return true;
+}
+
+void func_808496AC(Player* this, PlayState* play) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]);
+
+ if (DECR(this->unk_AE8) == 0) {
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
+ Player_StopCutscene(this);
+ Player_SetAction(play, this, func_80849FE0, 0);
+ this->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ }
+ } else if (this->unk_AE8 == 30) {
+ if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) {
+ this->unk_AE8++;
+ } else {
+ Message_StartTextbox(play, 0xC03, NULL);
+ }
+ }
+}
+
+void func_808497A0(Player* this, PlayState* play) {
+ this->stateFlags3 |= PLAYER_STATE3_10000000;
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_8083216C(this, play);
+
+ if (R_PLAY_FILL_SCREEN_ON == 0) {
+ R_PLAY_FILL_SCREEN_ON = 20;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA;
+ play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED);
+ } else if (R_PLAY_FILL_SCREEN_ON > 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA > 255) {
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+ if (this->unk_B86[0] == 0) {
+ this->unk_B86[0] = 1;
+ func_8082DE50(play, this);
+ } else {
+ R_PLAY_FILL_SCREEN_ON = -20;
+ this->stateFlags1 &= ~PLAYER_STATE1_8000000;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ Player_SetEquipmentData(play, this);
+ this->prevBoots = this->currentBoots;
+
+ if (this->unk_3CF != 0) {
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_3C0);
+ this->actor.shape.rot.y = this->unk_3CC;
+ } else {
+ Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[RESPAWN_MODE_DOWN].pos);
+ this->actor.shape.rot.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw;
+ }
+
+ Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos);
+ this->linearVelocity = 0.0f;
+ this->currentYaw = this->actor.shape.rot.y;
+ this->actor.velocity.y = 0.0f;
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+
+ if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) {
+ this->unk_AE8 = 5;
+ } else {
+ play->roomCtx.curRoom.num = -1;
+ play->roomCtx.prevRoom.num = -1;
+ play->roomCtx.curRoom.segment = NULL;
+ play->roomCtx.prevRoom.segment = NULL;
+
+ func_8012EBF8(play, &play->roomCtx);
+ this->unk_AE8 = -1;
+ this->unk_AE7 = this->unk_3CE;
+ }
+ }
+ }
+ } else if (this->unk_AE8 < 0) {
+ if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) {
+ Map_InitRoomData(play, play->roomCtx.curRoom.num);
+ Minimap_SavePlayerRoomInitInfo(play);
+ this->unk_AE8 = 5;
+ }
+ } else if (this->unk_AE8 > 0) {
+ this->unk_AE8--;
+ } else {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ R_PLAY_FILL_SCREEN_ON = 0;
+ func_808339B4(this, -40);
+ func_8085B384(this, play);
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
+ }
+ }
+}
+
+void func_80849A9C(Player* this, PlayState* play) {
+ f32 sp44;
+ s16 sp42;
+ s32 temp_v0;
+
+ if (this->unk_AE8 != 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+ Player_AnimationPlayLoop(play, this, func_8082EF54(this));
+ this->unk_AE8 = 0;
+ this->stateFlags3 &= ~PLAYER_STATE3_8;
+ }
+ func_8082FC60(this);
+ } else {
+ func_8083E958(play, this);
+ }
+
+ func_80832F24(this);
+ if (func_80833058(play, this, D_8085CFE4, 1)) {
+ return;
+ }
+
+ if (!func_8082FB68(this) && (!func_80123434(this) || (func_8084894C != this->unk_AC4))) {
+ func_8083B29C(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp44, &sp42, 0.0f, play);
+
+ temp_v0 = func_8083E404(this, sp44, sp42);
+ if (temp_v0 > 0) {
+ func_8083A844(this, play, sp42);
+ } else if (temp_v0 < 0) {
+ func_8083AF8C(this, sp42, play);
+ } else if (sp44 > 4.0f) {
+ func_8083B030(this, play);
+ } else {
+ u32 temp_v0_2;
+
+ func_8083EA44(this, this->linearVelocity * 0.3f + 1.0f);
+ func_8083E8E0(this, sp44, sp42);
+
+ temp_v0_2 = this->unk_B38;
+ if ((temp_v0_2 < 6) || ((temp_v0_2 - 0xE) < 6)) {
+ Math_StepToF(&this->linearVelocity, 0.0f, 1.5f);
+ } else {
+ s16 temp_v0_3 = sp42 - this->currentYaw;
+ s32 var_v1 = ABS_ALT(temp_v0_3);
+
+ if (var_v1 > 0x4000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) {
+ this->currentYaw = sp42;
+ }
+ } else {
+ Math_AsymStepToF(&this->linearVelocity, sp44 * 0.3f, 2.0f, 1.5f);
+ Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f);
+ }
+ }
+ }
+}
+
+void func_80849DD0(Player* this, PlayState* play) {
+ f32 sp3C;
+ s16 sp3A;
+ s32 temp_v0;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+ Player_AnimationPlayOnce(play, this, func_8082ED20(this));
+ this->stateFlags3 &= ~PLAYER_STATE3_8;
+ }
+
+ func_80832F24(this);
+ if (func_80833058(play, this, D_8085CFEC, 1)) {
+ return;
+ }
+
+ if (func_8082FB68(this)) {
+ func_8083B23C(this, play);
+ return;
+ }
+ if (!func_80123434(this)) {
+ func_8083172C(play, this, func_80849FE0, 1);
+ this->currentYaw = this->actor.shape.rot.y;
+ return;
+ }
+ if (func_8084894C == this->unk_AC4) {
+ func_8083B23C(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp3C, &sp3A, 0.0f, play);
+
+ temp_v0 = func_8083E514(this, &sp3C, &sp3A, play);
+ if (temp_v0 > 0) {
+ func_8083A844(this, play, sp3A);
+ } else if (temp_v0 < 0) {
+ func_8083AECC(this, sp3A, play);
+ } else if (sp3C > 4.9f) {
+ func_8083B030(this, play);
+ func_8082FC60(this);
+ } else if (sp3C != 0.0f) {
+ func_8083AF30(this, play);
+ } else {
+ s16 temp_v0_2 = sp3A - this->actor.shape.rot.y;
+
+ if (ABS_ALT(temp_v0_2) > 0x320) {
+ func_8083B0E4(play, this, sp3A);
+ }
+ }
+}
+
+void func_80849FE0(Player* this, PlayState* play) {
+ s32 temp_v0 = func_8082ED94(this);
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ f32 sp3C;
+ s16 sp3A;
+ s16 temp_v1_2;
+
+ func_8083C85C(this);
+ if (temp_v0 > 0) {
+ func_8082EEA4(this, temp_v0 - 1);
+ }
+
+ if (animFinished ||
+ ((this->currentMask == PLAYER_MASK_SCENTS) && (this->skelAnime.animation != &gPlayerAnim_cl_msbowait)) ||
+ ((this->currentMask != PLAYER_MASK_SCENTS) && (this->skelAnime.animation == &gPlayerAnim_cl_msbowait))) {
+ if (this->unk_AE8 != 0) {
+ if (DECR(this->unk_AE8) == 0) {
+ this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
+ }
+
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y =
+ (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->unk_AE8 & 1) * 0x50)) - 0x28;
+ } else {
+ func_8082E794(this);
+ Player_ChooseIdleAnim(play, this);
+ }
+ this->stateFlags3 &= ~PLAYER_STATE3_8;
+ }
+
+ func_80832F24(this);
+ if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) {
+ if (func_8082FB68(this)) {
+ func_8083B23C(this, play);
+ return;
+ }
+ if (func_80123434(this)) {
+ func_8083692C(this, play);
+ return;
+ }
+ func_80832F78(this, &sp3C, &sp3A, 0.018f, play);
+ if (sp3C != 0.0f) {
+ func_8083A844(this, play, sp3A);
+ return;
+ }
+ temp_v1_2 = sp3A - this->actor.shape.rot.y;
+
+ if (ABS_ALT(temp_v1_2) > 0x320) {
+ func_8083B0E4(play, this, sp3A);
+ } else {
+ Math_ScaledStepToS(&this->actor.shape.rot.y, sp3A, 0x4B0);
+ this->currentYaw = this->actor.shape.rot.y;
+ if (func_8082ED20(this) == this->skelAnime.animation) {
+ func_8083C6E8(this, play);
+ }
+ }
+ }
+}
+
+void func_8084A26C(Player* this, PlayState* play) {
+ f32 var_fv0;
+ s16 temp_v0_3;
+ f32 sp44;
+ s16 sp42;
+ s32 var_v0;
+ s32 temp_v0_2;
+ s32 var_v1;
+ f32 var_fv1;
+
+ this->skelAnime.mode = 0;
+ PlayerAnimation_SetUpdateFunction(&this->skelAnime);
+
+ this->skelAnime.animation = func_8082EFE4(this);
+ if (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk) {
+ var_fv0 = 24.0f;
+ var_fv1 = -(MREG(95) / 100.0f);
+ } else {
+ var_fv0 = 29.0f;
+ var_fv1 = MREG(95) / 100.0f;
+ }
+
+ this->skelAnime.animLength = var_fv0;
+ this->skelAnime.endFrame = var_fv0 - 1.0f;
+ if (BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) >= 0) {
+ var_v0 = 1;
+ } else {
+ var_v0 = -1;
+ }
+
+ this->skelAnime.playSpeed = var_v0 * (this->linearVelocity * var_fv1);
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 0.0f) || PlayerAnimation_OnFrame(&this->skelAnime, var_fv0 / 2.0f)) {
+ Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity);
+ }
+
+ if (func_80833058(play, this, D_8085CFF8, 1)) {
+ return;
+ }
+
+ if (func_8082FB68(this)) {
+ func_8083B23C(this, play);
+ return;
+ }
+ if (!func_80123434(this)) {
+ func_8085B384(this, play);
+ return;
+ }
+ func_80832F78(this, &sp44, &sp42, 0.0f, play);
+
+ temp_v0_2 = func_8083E514(this, &sp44, &sp42, play);
+ if (temp_v0_2 > 0) {
+ func_8083A844(this, play, sp42);
+ return;
+ }
+ if (temp_v0_2 < 0) {
+ func_8083AECC(this, sp42, play);
+ return;
+ }
+ if (sp44 > 4.9f) {
+ func_8083B030(this, play);
+ func_8082FC60(this);
+ return;
+ }
+ if ((sp44 == 0.0f) && (this->linearVelocity == 0.0f)) {
+ func_8083692C(this, play);
+ return;
+ }
+
+ temp_v0_3 = sp42 - this->currentYaw;
+ var_v1 = ABS_ALT(temp_v0_3);
+ if (var_v1 > 0x4000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) {
+ this->currentYaw = sp42;
+ }
+ } else {
+ Math_AsymStepToF(&this->linearVelocity, sp44 * 0.4f, 1.5f, 1.5f);
+ Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f);
+ }
+}
+
+void func_8084A5C0(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+ s32 sp2C;
+
+ func_8083EE60(this, play);
+ if (func_80833058(play, this, D_8085D004, 1)) {
+ return;
+ }
+
+ if (func_8082FC24(this) == 0) {
+ func_8083A844(this, play, this->currentYaw);
+ return;
+ }
+
+ func_80832F78(this, &sp34, &sp32, 0.0f, play);
+
+ sp2C = func_8083E514(this, &sp34, &sp32, play);
+ if (sp2C >= 0) {
+ if (!func_8083F190(this, &sp34, &sp32, play)) {
+ if (sp2C != 0) {
+ func_8083A794(this, play);
+ } else if (sp34 > 4.9f) {
+ func_8083B030(this, play);
+ } else {
+ func_8083AF30(this, play);
+ }
+ }
+ } else {
+ s16 sp2A = sp32 - this->currentYaw;
+
+ Math_AsymStepToF(&this->linearVelocity, sp34 * 1.5f, 1.5f, 2.0f);
+ Math_ScaledStepToS(&this->currentYaw, sp32, sp2A * 0.1f);
+ if ((sp34 == 0.0f) && (this->linearVelocity == 0.0f)) {
+ func_8083692C(this, play);
+ }
+ }
+}
+
+void func_8084A794(Player* this, PlayState* play) {
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ f32 sp30;
+ s16 sp2E;
+
+ func_80832F24(this);
+
+ if (func_80833058(play, this, D_8085D004, 1)) {
+ return;
+ }
+
+ func_80832F78(this, &sp30, &sp2E, 0.0f, play);
+ if (this->linearVelocity != 0.0f) {
+ return;
+ }
+
+ this->currentYaw = this->actor.shape.rot.y;
+ if (func_8083E514(this, &sp30, &sp2E, play) > 0) {
+ func_8083A794(this, play);
+ } else if ((sp30 != 0.0f) || animFinished) {
+ func_8083F230(this, play);
+ }
+}
+
+void func_8084A884(Player* this, PlayState* play) {
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (func_80833058(play, this, D_8085D004, 1)) {
+ return;
+ }
+
+ if (animFinished) {
+ func_8083692C(this, play);
+ }
+}
+
+void func_8084A8E8(Player* this, PlayState* play) {
+ f32 sp3C;
+ s16 sp3A;
+ s32 var_v0;
+
+ func_8083F27C(play, this);
+ if (func_80833058(play, this, D_8085D00C, 1)) {
+ return;
+ }
+
+ if (!func_8082FC24(this)) {
+ func_8083A794(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp3C, &sp3A, 0.0f, play);
+ if (func_80123434(this)) {
+ var_v0 = func_8083E514(this, &sp3C, &sp3A, play);
+ } else {
+ var_v0 = func_8083E404(this, sp3C, sp3A);
+ }
+
+ if (var_v0 > 0) {
+ func_8083A794(this, play);
+ } else if (var_v0 < 0) {
+ if (func_80123434(this)) {
+ func_8083AECC(this, sp3A, play);
+ } else {
+ func_8083AF8C(this, sp3A, play);
+ }
+ } else if ((this->linearVelocity < 3.6f) && (sp3C < 4.0f)) {
+ if ((func_80123420(this) == 0) && (func_80123434(this))) {
+ func_8083AF30(this, play);
+ } else {
+ func_80836988(this, play);
+ }
+ } else {
+ s16 temp_v0;
+ s32 var_v1;
+ s32 pad;
+
+ func_8083E8E0(this, sp3C, sp3A);
+
+ temp_v0 = sp3A - this->currentYaw;
+ var_v1 = ABS_ALT(temp_v0);
+ if (var_v1 > 0x4000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 3.0f)) {
+ this->currentYaw = sp3A;
+ }
+ } else {
+ sp3C = sp3C * 0.9f;
+ Math_AsymStepToF(&this->linearVelocity, sp3C, 2.0f, 3.0f);
+ Math_ScaledStepToS(&this->currentYaw, sp3A, var_v1 * 0.1f);
+ }
+ }
+}
+
+void func_8084AB4C(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (Player_IsHoldingTwoHandedWeapon(this)) {
+ AnimationContext_SetLoadFrame(play, func_8082ED20(this), 0, this->skelAnime.limbCount,
+ this->skelAnime.morphTable);
+ AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->skelAnime.morphTable, D_8085B9F0);
+ }
+
+ func_80832F78(this, &sp34, &sp32, 0.018f, play);
+ if ((this != GET_PLAYER(play)) && (this->targetedActor == NULL)) {
+ sp32 = this->actor.home.rot.y;
+ }
+
+ if (func_80833058(play, this, D_8085D018, 1)) {
+ return;
+ }
+
+ if (sp34 != 0.0f) {
+ this->actor.shape.rot.y = sp32;
+ func_8083A794(this, play);
+ } else if (Math_ScaledStepToS(&this->actor.shape.rot.y, sp32, this->unk_B4E)) {
+ func_80839E74(this, play);
+ }
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_8084AC84(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (this->linearVelocity < 1.0f) {
+ this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walk;
+ } else {
+ this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walkB;
+ }
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (!func_80847880(play, this) &&
+ (!func_80833058(play, this, D_8085D01C, 1) || (func_8084AC84 == this->actionFunc))) {
+ f32 sp3C;
+ f32 temp_fv0;
+ f32 temp_fv1;
+ s16 sp32;
+ s16 sp30;
+
+ if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ func_80839E74(this, play);
+ return;
+ }
+
+ this->linearVelocity = this->unk_B48;
+ func_80832F78(this, &sp3C, &sp32, 0.018f, play);
+ sp30 = sp32;
+
+ if (!func_8083A4A4(this, &sp3C, &sp32, REG(43) / 100.0f)) {
+ func_8083CB04(this, sp3C, sp32, REG(19) / 100.0f, 1.5f, 0x3E8);
+ func_8083C8E8(this, play);
+ if ((this->linearVelocity == 0.0f) && (sp3C == 0.0f)) {
+ this->currentYaw = sp30;
+ this->actor.shape.rot.y = this->currentYaw;
+ }
+ }
+
+ this->unk_B48 = this->linearVelocity;
+ temp_fv0 = this->skelAnime.curFrame + 5.0f;
+ temp_fv1 = this->skelAnime.animLength / 2.0f;
+
+ // effectively an fmodf
+ temp_fv0 -= temp_fv1 * (s32)(temp_fv0 / temp_fv1);
+ this->linearVelocity *= Math_CosS(temp_fv0 * 1000.0f) * 0.4f;
+ }
+}
+
+void func_8084AEEC(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_80832F24(this);
+ if (!func_80847880(play, this)) {
+ if (!func_80833058(play, this, D_8085D01C, 0) || (func_8084AEEC == this->actionFunc)) {
+ if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ func_80839E74(this, play);
+ }
+ }
+ }
+}
+
+void func_8084AF9C(Player* this, PlayState* play) {
+ f32 sp2C; // player speed?
+ s16 sp2A;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ func_8083F57C(this, play);
+ if (func_80833058(play, this, D_8085D028, 1)) {
+ return;
+ }
+
+ if (func_8082FC24(this)) {
+ func_8083A794(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp2C, &sp2A, 0.018f, play);
+ if (this->currentMask == PLAYER_MASK_BUNNY) {
+ sp2C *= 1.5f;
+ }
+
+ if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) {
+ func_8083CB58(this, sp2C, sp2A);
+ func_8083C8E8(this, play);
+ if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) {
+ func_80839E3C(this, play);
+ }
+ }
+}
+
+void func_8084B0EC(Player* this, PlayState* play) {
+ f32 sp2C;
+ s16 sp2A;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_8083F57C(this, play);
+ if (func_80833058(play, this, D_8085D034, 1)) {
+ return;
+ }
+
+ if (!func_8082FC24(this)) {
+ func_8083A794(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp2C, &sp2A, 0.0f, play);
+ if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) {
+ if ((func_80123434(this) && (sp2C != 0) && (func_8083E514(this, &sp2C, &sp2A, play) <= 0)) ||
+ (!func_80123434(this) && (func_8083E404(this, sp2C, sp2A) <= 0))) {
+ func_80836988(this, play);
+ } else {
+ func_8083CB58(this, sp2C, sp2A);
+ func_8083C8E8(this, play);
+ if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) {
+ func_80836988(this, play);
+ }
+ }
+ }
+}
+
+void func_8084B288(Player* this, PlayState* play) {
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ f32 sp30;
+ s16 sp2E;
+
+ if (func_80833058(play, this, D_8085D00C, 1)) {
+ return;
+ }
+
+ if (!func_8082FC24(this)) {
+ func_8083A794(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp30, &sp2E, 0.0f, play);
+ if ((this->skelAnime.morphWeight == 0.0f) && (this->skelAnime.curFrame > 5.0f)) {
+ func_80832F24(this);
+ if ((this->skelAnime.curFrame > 10.0f) && (func_8083E404(this, sp30, sp2E) < 0)) {
+ func_8083AF8C(this, sp2E, play);
+ } else if (animFinished) {
+ func_8083B090(this, play);
+ }
+ }
+}
+
+void func_8084B3B8(Player* this, PlayState* play) {
+ s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ f32 sp30;
+ s16 sp2E;
+
+ func_80832F24(this);
+ if (func_80833058(play, this, D_8085D044, 1)) {
+ return;
+ }
+
+ func_80832F78(this, &sp30, &sp2E, 0.0f, play);
+ if (this->linearVelocity == 0.0f) {
+ this->currentYaw = this->actor.shape.rot.y;
+ if (func_8083E404(this, sp30, sp2E) > 0) {
+ func_8083A794(this, play);
+ } else if ((sp30 != 0.0f) || animFinished) {
+ func_80836988(this, play);
+ }
+ }
+}
+
+void func_8084B4A8(Player* this, PlayState* play) {
+ if (this->skelAnime.animation == &gPlayerAnim_link_normal_backspace) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+ func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_31][this->modelAnimType]);
+ }
+ } else {
+ func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]);
+ }
+
+ if (DECR(this->unk_AE8) == 0) {
+ if (!func_80838A90(this, play)) {
+ func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play);
+ }
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+ }
+}
+
+// Player_Action_Shielding
+void func_8084B5C0(Player* this, PlayState* play) {
+ func_80832F24(this);
+
+ if (this->transformation == PLAYER_FORM_GORON) {
+ SkelAnime_Update(&this->unk_2C8);
+
+ if (!func_8083FE38(this, play)) {
+ if (!func_8083A274(this, play)) {
+ this->stateFlags1 &= ~PLAYER_STATE1_400000;
+
+ if (this->itemAction <= PLAYER_IA_MINUS1) {
+ func_80123C58(this);
+ }
+
+ func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play);
+ func_80830B38(this);
+ } else {
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ }
+ }
+
+ return;
+ }
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (!Player_IsGoronOrDeku(this)) {
+ Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]);
+ }
+
+ this->unk_AE8 = 1;
+ this->unk_AE7 = 0;
+ }
+
+ if (!Player_IsGoronOrDeku(this)) {
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ func_8083216C(this, play);
+ this->stateFlags1 &= ~PLAYER_STATE1_400000;
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ func_8082F164(this, BTN_R | BTN_B);
+ }
+ }
+
+ if (this->unk_AE8 != 0) {
+ f32 yStick = sPlayerControlInput->rel.stick_y * 180;
+ f32 xStick = sPlayerControlInput->rel.stick_x * -120;
+ s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ s16 var_a1;
+ s16 temp_ft5;
+ s16 var_a2;
+ s16 var_a3;
+
+ var_a1 = (yStick * Math_CosS(temp_a0)) + (Math_SinS(temp_a0) * xStick);
+ temp_ft5 = (xStick * Math_CosS(temp_a0)) - (Math_SinS(temp_a0) * yStick);
+
+ var_a1 = CLAMP_MAX(var_a1, 0xDAC);
+ var_a2 = ABS_ALT(var_a1 - this->actor.focus.rot.x) * 0.25f;
+ var_a2 = CLAMP_MIN(var_a2, 0x64);
+
+ var_a3 = ABS_ALT(temp_ft5 - this->upperLimbRot.y) * 0.25f;
+ var_a3 = CLAMP_MIN(var_a3, 0x32);
+ Math_ScaledStepToS(&this->actor.focus.rot.x, var_a1, var_a2);
+
+ this->upperLimbRot.x = this->actor.focus.rot.x;
+ Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3);
+
+ if (this->unk_AE7 != 0) {
+ if (!func_808401F4(play, this)) {
+ if (this->skelAnime.curFrame < 2.0f) {
+ func_8082FA5C(play, this, PLAYER_MELEE_WEAPON_STATE_1);
+ }
+ } else {
+ this->unk_AE8 = 1;
+ this->unk_AE7 = 0;
+ }
+ } else if (!func_8083FE38(this, play)) {
+ if (func_8083A274(this, play)) {
+ func_8083FD80(this, play);
+ } else {
+ this->stateFlags1 &= ~PLAYER_STATE1_400000;
+ func_8082DC38(this);
+
+ if (Player_IsGoronOrDeku(this)) {
+ func_80836A5C(this, play);
+ PlayerAnimation_Change(play, &this->skelAnime, this->skelAnime.animation, 1.0f,
+ Animation_GetLastFrame(this->skelAnime.animation), 0.0f, 2, 0.0f);
+ } else {
+ if (this->itemAction <= PLAYER_IA_MINUS1) {
+ func_80123C58(this);
+ }
+
+ func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play);
+ }
+
+ Player_PlaySfx(this, NA_SE_IT_SHIELD_REMOVE);
+ return;
+ }
+ } else {
+ return;
+ }
+ }
+
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ Player_SetModelsForHoldingShield(this);
+ this->unk_AA6 |= 0xC1;
+}
+
+void func_8084BAA4(Player* this, PlayState* play) {
+ func_80832F24(this);
+ if (this->unk_AE7 == 0) {
+ D_80862B04 = func_8083216C(this, play);
+ if ((func_8084894C == this->unk_AC4) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) {
+ Player_SetAction(play, this, func_80849A9C, 1);
+ }
+ } else {
+ s32 temp_v0;
+
+ this->stateFlags1 |= PLAYER_STATE1_400000;
+ temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f);
+ if ((temp_v0 != 0) && ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime))) {
+ PlayerAnimationHeader* anim;
+ f32 lastFrame;
+
+ Player_SetAction(play, this, func_8084B5C0, 1);
+ Player_SetModelsForHoldingShield(this);
+ anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType];
+ lastFrame = Animation_GetLastFrame(anim);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f);
+ }
+ }
+}
+
+void func_8084BBF0(Player* this, PlayState* play) {
+ s32 temp_v0;
+
+ func_80832F24(this);
+ temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f);
+ if (temp_v0 != 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) {
+ func_80836988(this, play);
+ }
+ }
+}
+
+void func_8084BC64(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40;
+ func_808345A8(this);
+
+ if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->unk_AE8 == 0) && (this->unk_B75 != 0)) {
+ s16 temp_v0 = this->unk_B76;
+ s16 temp_v1 = this->actor.shape.rot.y - temp_v0;
+
+ this->actor.shape.rot.y = temp_v0;
+ this->currentYaw = temp_v0;
+ this->linearVelocity = this->unk_B78;
+
+ if (ABS_ALT(temp_v1) > 0x4000) {
+ this->actor.shape.rot.y = temp_v0 + 0x8000;
+ }
+
+ if (this->actor.velocity.y < 0.0f) {
+ this->actor.gravity = 0.0f;
+ this->actor.velocity.y = 0.0f;
+ }
+ }
+
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ if (this->unk_AE8 != 0) {
+ this->unk_AE8--;
+ if (this->unk_AE8 == 0) {
+ func_8085B384(this, play);
+ }
+ } else if ((this->stateFlags1 & PLAYER_STATE1_20000000) ||
+ (!(this->cylinder.base.acFlags & AC_HIT) && (this->unk_B75 == 0))) {
+ if (this->stateFlags1 & PLAYER_STATE1_20000000) {
+ this->unk_AE8++;
+ } else {
+ Player_SetAction(play, this, func_8084BE40, 0);
+ this->stateFlags1 |= PLAYER_STATE1_4000000;
+ }
+
+ Player_AnimationPlayOnce(play, this,
+ (this->currentYaw != this->actor.shape.rot.y)
+ ? &gPlayerAnim_link_normal_front_downB
+ : &gPlayerAnim_link_normal_back_downB);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE);
+ }
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND);
+ }
+}
+
+void func_8084BE40(Player* this, PlayState* play) {
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+ func_808345A8(this);
+ func_80832F24(this);
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) {
+ if (this->stateFlags1 & PLAYER_STATE1_20000000) {
+ this->unk_AE8++;
+ } else {
+ Player_SetAction(play, this, func_8084BF28, 0);
+ this->stateFlags1 |= PLAYER_STATE1_4000000;
+ }
+
+ func_8082DB90(play, this,
+ (this->currentYaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_down_wake
+ : &gPlayerAnim_link_normal_back_down_wake);
+ this->currentYaw = this->actor.shape.rot.y;
+ }
+}
+
+AnimSfxEntry D_8085D604[] = {
+ ANIMSFX(ANIMSFX_TYPE_8, 20, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, STOP),
+};
+
+void func_8084BF28(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_808345A8(this);
+ if (this->stateFlags1 & PLAYER_STATE1_20000000) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ } else {
+ s32 temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f);
+
+ if (temp_v0 != 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) {
+ func_80836988(this, play);
+ }
+ }
+ }
+
+ Player_PlayAnimSfx(this, D_8085D604);
+}
+
+AnimSfxEntry D_8085D60C[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 60, NA_SE_PL_BOUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 140, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 164, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_8, 170, NA_SE_NONE, STOP),
+};
+
+void func_8084BFDC(Player* this, PlayState* play) {
+ if ((this->transformation != PLAYER_FORM_GORON) && (this->actor.depthInWater <= 0.0f)) {
+ if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) ||
+ (sPlayerCurrentFloorType == FLOOR_TYPE_9) ||
+ ((func_808340AC(sPlayerCurrentFloorType) >= 0) &&
+ !SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) {
+ func_808344C0(play, this);
+ }
+ }
+
+ func_80832F24(this);
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this == GET_PLAYER(play)) {
+ func_80840770(play, this);
+ }
+ } else if (this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) {
+ Player_PlayAnimSfx(this, D_8085D60C);
+ } else if ((this->skelAnime.animation == &gPlayerAnim_link_normal_electric_shock_end) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 88.0f)) {
+ Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND);
+ }
+}
+
+s32 func_8084C124(PlayState* play, Player* this) {
+ if (func_80837730(play, this, 3.0f, 500)) {
+ Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER);
+ return true;
+ }
+ return false;
+}
+
+void func_8084C16C(Player* this, PlayState* play) {
+ f32 sp44;
+ s16 sp42;
+ Actor* heldActor;
+
+ if (func_80123420(this)) {
+ this->actor.gravity = -1.2f;
+ }
+
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ func_80832F78(this, &sp44, &sp42, 0.0f, play);
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ heldActor = this->heldActor;
+ if (!func_808313A8(play, this, heldActor) && (heldActor->id == ACTOR_EN_NIW) &&
+ CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) {
+ func_808409A8(play, this, this->linearVelocity + 2.0f, this->actor.velocity.y + 2.0f);
+ }
+ }
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if ((this->skelAnime.animation == &gPlayerAnim_link_normal_newroll_jump_20f) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) {
+ Player_PlaySfx(this, NA_SE_PL_ROLL);
+ }
+
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ s16 prevYaw = this->currentYaw;
+
+ func_808378FC(play, this);
+ func_8083CBC4(this, sp44 * 0.5f, sp42, 2.0f, 0.2f, 0.1f, 0x190);
+
+ if (this->skelAnime.animation == &gPlayerAnim_pn_attack) {
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+
+ this->unk_B10[0] += -800.0f;
+ this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw));
+ Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0]);
+ }
+ } else {
+ func_8083CBC4(this, sp44, sp42, 1.0f, 0.05f, 0.1f, 0xC8);
+ }
+
+ func_8083216C(this, play);
+ if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 4))) ||
+ !func_80839770(this, play)) &&
+ (this->actor.velocity.y < 0.0f)) {
+ if (this->unk_AE8 >= 0) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) {
+ if ((D_80862B18 > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) {
+ func_80840980(this, NA_SE_VO_LI_FALL_S);
+ this->stateFlags3 &= ~PLAYER_STATE3_10000;
+ }
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f,
+ ANIMMODE_ONCE, 8.0f);
+ this->unk_AE8 = -1;
+ }
+ } else {
+ if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (D_80862B18 > 280.0f)) {
+ this->unk_AE8 = -2;
+ func_80840980(this, NA_SE_VO_LI_FALL_L);
+ }
+
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
+ !(this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_8000000)) &&
+ (this->linearVelocity > 0.0f)) {
+ if ((this->transformation != PLAYER_FORM_GORON) &&
+ ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0))) {
+ if ((this->wallHeight >= 150.0f) && (this->unk_AE3[this->unk_ADE] == 0)) {
+ if (func_8083D860(this, play)) {
+ func_8084C124(play, this);
+ }
+ } else if ((this->unk_B5C >= 2) &&
+ ((this->wallHeight < (150.0f * this->ageProperties->unk_08)) &&
+ (((this->actor.world.pos.y - this->actor.floorHeight) + this->wallHeight)) >
+ (70.0f * this->ageProperties->unk_08))) {
+ AnimationContext_DisableQueue(play);
+ if (this->stateFlags3 & PLAYER_STATE3_10000) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HOOKSHOT_HANG);
+ } else {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG);
+ }
+
+ this->actor.world.pos.y += this->wallHeight;
+ func_80837CEC(play, this, this->actor.wallPoly, this->wallDistance,
+ GET_PLAYER_ANIM(PLAYER_ANIMGROUP_38, this->modelAnimType));
+ this->currentYaw += 0x8000;
+ this->actor.shape.rot.y = this->currentYaw;
+ this->stateFlags1 |= PLAYER_STATE1_2000;
+
+ func_8084C124(play, this);
+ }
+ }
+ }
+ }
+ }
+ } else {
+ func_80837134(play, this);
+ func_8083216C(this, play);
+ }
+
+ func_80838A90(this, play);
+}
+
+// sPlayerRollingAnimSfx
+AnimSfxEntry D_8085D61C[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_SWORD_N, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 6, NA_SE_PL_WALK_GROUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_ROLL, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 18, NA_SE_NONE, STOP),
+};
+
+// Player_Action_Rolling // Handles bonking too?
+void func_8084C6EC(Player* this, PlayState* play) {
+ s32 animFinished;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ this->stateFlags3 |= PLAYER_STATE3_8000000;
+
+ animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) {
+ func_808339B4(this, -10);
+ }
+
+ if (this->skelAnime.curFrame >= 8.0f) {
+ if (this->skelAnime.curFrame < 18.0f) {
+ Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 12);
+ } else {
+ Player_ResetCylinder(this);
+ }
+ }
+
+ if (func_8083FE38(this, play)) {
+ return;
+ }
+
+ if (this->unk_AE8 != 0) {
+ s32 temp_v0;
+
+ Math_StepToF(&this->linearVelocity, 0.0f, 2.0f);
+ temp_v0 = func_808331FC(play, this, &this->skelAnime, 5.0f);
+ if (temp_v0 != 0) {
+ if ((temp_v0 > 0) || animFinished) {
+ func_80836A5C(this, play);
+ }
+ }
+ } else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) {
+ if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) {
+ f32 sp3C;
+ s16 yaw;
+
+ if (this->skelAnime.curFrame >= 20.0f) {
+ func_80836A5C(this, play);
+ return;
+ }
+
+ func_80832F78(this, &sp3C, &yaw, 0.018f, play);
+ sp3C *= 1.5f;
+ if ((sp3C < 3.0f) || (this->unk_AE3[this->unk_ADE] != 0)) {
+ sp3C = 3.0f;
+ }
+ func_8083CB58(this, sp3C, this->actor.shape.rot.y);
+
+ if (func_8083FBC4(play, this)) {
+ func_800B8F98(&this->actor, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG)
+ ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG
+ : NA_SE_PL_ROLL_DUST - SFX_FLAG);
+ }
+
+ Player_PlayAnimSfx(this, D_8085D61C);
+ }
+ }
+}
+
+void func_8084C94C(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_run_jump_water_fall_wait);
+ }
+
+ Math_StepToF(&this->linearVelocity, 0.0f, 0.05f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->fallDistance >= 400) {
+ this->actor.colChkInfo.damage = 0x10;
+ func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20);
+ } else {
+ func_80836B3C(play, this, 4.0f);
+ }
+ }
+}
+
+void func_8084CA24(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082DB60(play, this, &gPlayerAnim_pz_fishswim);
+ }
+
+ Math_SmoothStepToS(&this->unk_B86[1], 0, 6, 0x7D0, 0x190);
+ if (!func_80840A30(play, this, &this->linearVelocity, 0.0f)) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->unk_AAA > 0x36B0) {
+ this->actor.colChkInfo.damage = 0x10;
+ func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20);
+ } else {
+ func_80836B3C(play, this, 4.0f);
+ }
+ } else {
+ this->actor.gravity = -1.0f;
+ this->unk_AAA = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y);
+ func_8082F164(this, BTN_R);
+ }
+ }
+}
+
+void func_8084CB58(Player* this, PlayState* play) {
+ AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation];
+ f32 sp38;
+ s16 sp36;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ this->actor.gravity = -0.8f;
+ } else {
+ this->actor.gravity = -1.2f;
+ }
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (!func_808401F4(play, this)) {
+ func_8083FCF0(play, this, 6.0f, attackInfoEntry->unk_C, attackInfoEntry->unk_D);
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ func_80832F78(this, &sp38, &sp36, 0.0f, play);
+ func_8083CBC4(this, sp38, this->currentYaw, 1.0f, 0.05f, 0.1f, 200);
+ } else if (func_80836F10(play, this) >= 0) { // Player didn't die because of this fall
+ this->meleeWeaponAnimation += 3;
+ func_80833864(play, this, this->meleeWeaponAnimation);
+ this->unk_ADD = 3;
+ this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0;
+ Player_AnimSfx_PlayFloorLand(this);
+ }
+ }
+}
+
+void func_8084CCEC(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+ s32 temp_v0;
+
+ this->stateFlags1 |= PLAYER_STATE1_1000;
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+ func_8083133C(this);
+ this->stateFlags1 &= ~PLAYER_STATE1_20000;
+ Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]);
+ this->unk_AE8 = -1;
+ }
+
+ func_80832F24(this);
+ if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) {
+ func_80840F34(this);
+ if (this->unk_AE8 < 0) {
+ if (this->unk_B08 >= 0.1f) {
+ this->unk_ADD = 0;
+ this->unk_AE8 = 1;
+ } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) {
+ func_80840E5C(this, play);
+ }
+ } else if (!func_80840CD4(this, play)) {
+ func_80832F78(this, &sp34, &sp32, 0.0f, play);
+ temp_v0 = func_8083E7F8(this, &sp34, &sp32, play);
+ if (temp_v0 > 0) {
+ func_80840DEC(this, play);
+ } else if (temp_v0 < 0) {
+ func_80840E24(this, play);
+ }
+ }
+ }
+}
+
+void func_8084CE84(Player* this, PlayState* play) {
+ s32 var_v1;
+ s32 temp_v0_2;
+ f32 temp_ft4;
+ f32 var_fa0;
+ f32 sp54;
+ s16 sp52;
+ s16 temp_v0;
+ f32 temp_fv1;
+ s32 pad;
+ s32 sp44;
+
+ temp_v0 = this->currentYaw - this->actor.shape.rot.y;
+ var_v1 = ABS_ALT(temp_v0);
+
+ temp_ft4 = fabsf(this->linearVelocity);
+ this->stateFlags1 |= PLAYER_STATE1_1000;
+
+ var_fa0 = temp_ft4 * 1.5f;
+ var_fa0 = CLAMP_MIN(var_fa0, 1.5f);
+
+ var_fa0 = ((var_v1 < 0x4000) ? -1.0f : 1.0f) * var_fa0;
+
+ func_8083EA44(this, var_fa0);
+
+ var_fa0 = CLAMP(temp_ft4 * 0.5f, 0.5f, 1.0f);
+
+ PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f,
+ D_8085CF70[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0,
+ this->blendTableBuffer);
+ if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) {
+ func_80840F34(this);
+ func_80832F78(this, &sp54, &sp52, 0.0f, play);
+
+ temp_v0_2 = func_8083E7F8(this, &sp54, &sp52, play);
+ if (temp_v0_2 < 0) {
+ func_80840E24(this, play);
+ return;
+ }
+
+ if (temp_v0_2 == 0) {
+ sp54 = 0.0f;
+ sp52 = this->currentYaw;
+ }
+
+ sp44 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw));
+ if (sp44 > 0x4000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) {
+ this->currentYaw = sp52;
+ }
+ } else {
+ Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f);
+ Math_ScaledStepToS(&this->currentYaw, sp52, sp44 * 0.1f);
+ if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f)) {
+ func_80840EC0(this, play);
+ }
+ }
+ }
+}
+
+void func_8084D18C(Player* this, PlayState* play) {
+ f32 sp5C = fabsf(this->linearVelocity);
+ f32 var_fa0;
+
+ this->stateFlags1 |= PLAYER_STATE1_1000;
+
+ if (sp5C == 0.0f) {
+ sp5C = ABS_ALT(this->unk_B4C) * 0.0015f;
+ if (sp5C < 400.0f) {
+ sp5C = 0.0f;
+ }
+
+ func_8083EA44(this, ((this->unk_B4C >= 0) ? 1 : -1) * sp5C);
+ } else {
+ var_fa0 = sp5C * 1.5f;
+ var_fa0 = CLAMP_MIN(var_fa0, 1.5f);
+ func_8083EA44(this, var_fa0);
+ }
+
+ var_fa0 = CLAMP(sp5C * 0.5f, 0.5f, 1.0f);
+
+ PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f,
+ D_8085CF78[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0,
+ this->blendTableBuffer);
+ if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) {
+ f32 sp54;
+ s16 sp52;
+ s32 temp_v0;
+ s16 temp_v0_2;
+ s32 var_v1;
+
+ func_80840F34(this);
+ func_80832F78(this, &sp54, &sp52, 0.0f, play);
+ temp_v0 = func_8083E7F8(this, &sp54, &sp52, play);
+ if (temp_v0 > 0) {
+ func_80840DEC(this, play);
+ return;
+ }
+
+ if (temp_v0 == 0) {
+ sp54 = 0.0f;
+ sp52 = this->currentYaw;
+ }
+
+ var_v1 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw));
+ if (var_v1 > 0x4000) {
+ if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) {
+ this->currentYaw = sp52;
+ }
+ } else {
+ Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f);
+ Math_ScaledStepToS(&this->currentYaw, sp52, var_v1 * 0.1f);
+ if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f) && (sp5C == 0.0f)) {
+ func_80840EC0(this, play);
+ }
+ }
+ }
+}
+
+void func_8084D4EC(Player* this, PlayState* play) {
+ s32 animFinished;
+ f32 frame;
+ s32 temp_v0;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (this->skelAnime.animation == &gPlayerAnim_link_normal_250jump_start) {
+ this->linearVelocity = 1.0f;
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) {
+ f32 speed = this->wallHeight;
+
+ speed = CLAMP_MAX(speed, this->ageProperties->unk_0C);
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ speed *= 0.085f;
+ } else {
+ speed *= 0.072f;
+ }
+
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ speed += 1.0f;
+ }
+
+ func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP);
+ this->unk_AE8 = -1;
+ }
+ } else {
+ temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f);
+ if (temp_v0 == 0) {
+ this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000);
+ return;
+ }
+ if (animFinished || (temp_v0 > 0)) {
+ func_80839E74(this, play);
+ this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000);
+ this->unk_ABC = 0.0f;
+ return;
+ }
+
+ frame = 0.0f;
+ if (this->skelAnime.animation == &gPlayerAnim_link_swimer_swim_15step_up) {
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 30.0f)) {
+ func_8083B32C(play, this, 10.0f);
+ }
+ frame = 50.0f;
+ } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_150step_up) {
+ frame = 30.0f;
+ } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) {
+ frame = 16.0f;
+ }
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) {
+ Player_AnimSfx_PlayFloorLand(this);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END);
+ }
+
+ if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) {
+ if (this->unk_AE8 == 0) {
+ Player_AnimSfx_PlayFloorJump(this);
+ this->unk_AE8 = 1;
+ }
+ Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f);
+ }
+ }
+}
+
+void func_8084D770(Player* this, PlayState* play) {
+ s32 temp_v0;
+
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+ if (this->unk_D58 == func_80837BF8) {
+ this->stateFlags2 |= PLAYER_STATE2_1;
+ }
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_8083249C(this);
+
+ temp_v0 = func_8083216C(this, play);
+ if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) ||
+ (temp_v0 == 0)) {
+ this->unk_D58(play, this);
+ }
+}
+
+void func_8084D820(Player* this, PlayState* play) {
+ if (func_80838A90(this, play) == 0) {
+ if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ func_80833AA0(this, play);
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ } else if (this->unk_AE8 == 0) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (DECR(this->doorTimer) == 0) {
+ this->linearVelocity = 0.1f;
+ this->unk_AE8 = 1;
+ }
+ } else if (this->unk_AE7 == 0) {
+ f32 sp6C = 5.0f * D_8085C3E4;
+ s32 var_t0 = func_808411D4(play, this, &sp6C, -1);
+
+ if (this->unk_397 == 4) {
+ if (R_PLAY_FILL_SCREEN_ON < 0) {
+ if (play->roomCtx.status != 1) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ }
+
+ this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f;
+ this->actor.prevPos.y = this->actor.world.pos.y;
+ }
+ } else if (R_PLAY_FILL_SCREEN_ON == 0) {
+ CollisionPoly* sp64;
+ s32 sp60;
+
+ if (func_80835DF8(play, this, &sp64, &sp60)) {
+ this->actor.floorPoly = sp64;
+ this->actor.floorBgId = sp60;
+ }
+ }
+ }
+
+ if (var_t0 < 0x1E) {
+ this->unk_AE7 = 1;
+ this->stateFlags1 |= PLAYER_STATE1_20000000;
+ this->unk_3A0.x = this->unk_3AC.x;
+ this->unk_3A0.z = this->unk_3AC.z;
+ }
+ } else {
+ f32 sp5C = 5.0f;
+ s32 sp58 = 0x14;
+ s32 temp_v0_8;
+
+ if (this->stateFlags1 & PLAYER_STATE1_1) {
+ sp5C = gSaveContext.entranceSpeed;
+ if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) {
+ this->unk_3A0.x = (Math_SinS(D_80862B16) * 400.0f) + this->actor.world.pos.x;
+ this->unk_3A0.z = (Math_CosS(D_80862B16) * 400.0f) + this->actor.world.pos.z;
+ }
+ } else {
+ if (this->unk_AE8 < 0) {
+ this->unk_AE8++;
+ sp5C = gSaveContext.entranceSpeed;
+ sp58 = -1;
+ } else if (this->unk_397 == 4) {
+ if (R_PLAY_FILL_SCREEN_ON == 0) {
+ R_PLAY_FILL_SCREEN_ON = 16;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+
+ R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA;
+ } else if (R_PLAY_FILL_SCREEN_ON >= 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA > 255) {
+ TransitionActorEntry* temp_v1_4; // sp50
+ s32 roomNum;
+
+ temp_v1_4 = &play->transitionActors.list[this->doorNext];
+ roomNum = temp_v1_4->sides[0].room;
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+
+ if ((roomNum != play->roomCtx.curRoom.num) && (play->roomCtx.curRoom.num >= 0)) {
+ play->roomCtx.prevRoom = play->roomCtx.curRoom;
+
+ play->roomCtx.curRoom.num = -1;
+ play->roomCtx.curRoom.segment = NULL;
+ func_8012EBF8(play, &play->roomCtx);
+ } else {
+ static Vec3f D_8085D62C = { 0.0f, 0.0f, 0.0f };
+ static Vec3f D_8085D638 = { 0.0f, 0.0f, 0.0f };
+ static Vec3f D_8085D644 = { 0.0f, 0.0f, 0.0f };
+
+ R_PLAY_FILL_SCREEN_ON = -16;
+ if (play->roomCtx.curRoom.num < 0) {
+ Room_StartRoomTransition(play, &play->roomCtx, temp_v1_4->sides[0].room);
+ play->roomCtx.prevRoom.num = -1;
+ play->roomCtx.prevRoom.segment = NULL;
+ }
+
+ this->actor.world.pos.x = temp_v1_4->pos.x;
+ this->actor.world.pos.y = temp_v1_4->pos.y;
+ this->actor.world.pos.z = temp_v1_4->pos.z;
+
+ this->actor.shape.rot.y = ((((temp_v1_4->rotY >> 7) & 0x1FF) / 180.0f) * 0x8000);
+
+ D_8085D62C.x = (this->doorDirection != 0) ? -120.0f : 120.0f;
+ D_8085D62C.y = (this->doorDirection != 0) ? -75.0f : 75.0f;
+ D_8085D62C.z = -240.0f;
+ if (this->doorDirection != 0) {
+ Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f,
+ temp_v1_4->pos.x + 0x32, temp_v1_4->pos.y + 0x5F,
+ temp_v1_4->pos.z - 0x32);
+ } else {
+ Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f,
+ temp_v1_4->pos.x - 0x32, temp_v1_4->pos.y + 5,
+ temp_v1_4->pos.z - 0x32);
+ }
+
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D62C,
+ &this->actor.world.pos);
+
+ D_8085D638.x = (this->doorDirection != 0) ? 130.0f : -130.0f;
+ D_8085D638.z = 160.0f;
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D638, &this->unk_3A0);
+ D_8085D644.z = 160.0f;
+ Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D644, &this->unk_3AC);
+
+ this->actor.shape.rot.y += (this->doorDirection != 0) ? 0x4000 : -0x4000;
+ this->unk_AE7 = 0;
+
+ this->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y;
+ }
+ }
+
+ this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f;
+ this->actor.prevPos.y = this->actor.world.pos.y;
+ }
+ }
+ }
+
+ temp_v0_8 = func_808411D4(play, this, &sp5C, sp58);
+ if ((this->unk_AE8 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) &&
+ (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) {
+ if (this->unk_397 == 4) {
+ Map_InitRoomData(play, play->roomCtx.curRoom.num);
+ Minimap_SavePlayerRoomInitInfo(play);
+ }
+
+ R_PLAY_FILL_SCREEN_ON = 0;
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+ Player_StopCutscene(this);
+ if (!(this->stateFlags3 & PLAYER_STATE3_20000)) {
+ func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data));
+ }
+
+ if (play->unk_1887C != 0) {
+ play->func_18780(this, play);
+ Player_SetAction(play, this, func_80854430, 0);
+ if (play->sceneId == 0x45) {
+ play->unk_1887C = 0;
+ }
+ } else if (!func_808391D8(this, play)) {
+ func_8083B2E4(this, play);
+ }
+ }
+ }
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ func_8083216C(this, play);
+ }
+}
+
+// door stuff
+void func_8084E034(Player* this, PlayState* play) {
+ EnDoor* doorActor = (EnDoor*)this->doorActor;
+ s32 sp38 = (doorActor != NULL) && (doorActor->doorType == ENDOOR_TYPE_7);
+ s32 animFinished;
+ CollisionPoly* poly;
+ s32 bgId;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (DECR(this->unk_AE7) == 0) {
+ func_80835DF8(play, this, &poly, &bgId);
+ }
+
+ animFinished = PlayerAnimation_Update(play, &this->skelAnime);
+ func_8083216C(this, play);
+
+ if (animFinished) {
+ if (this->unk_AE8 == 0) {
+ if (DECR(this->doorTimer) == 0) {
+ this->unk_AE8 = 1;
+ this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
+ }
+ } else {
+ Player_StopCutscene(this);
+ func_80839E74(this, play);
+
+ if ((this->actor.category == ACTORCAT_PLAYER) && !sp38) {
+ if (play->roomCtx.prevRoom.num >= 0) {
+ func_8012EBF8(play, &play->roomCtx);
+ }
+
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+ Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B));
+ }
+ }
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) {
+ Player_StopCutscene(this);
+ play->func_18780(this, play);
+ } else if (sp38 && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) {
+ s16 doorRot = (this->doorDirection < 0) ? doorActor->knobDoor.dyna.actor.world.rot.x
+ : doorActor->knobDoor.dyna.actor.world.rot.z;
+
+ if (doorRot != 0) {
+ func_808354A4(play, doorRot - 1, false);
+ }
+ }
+}
+
+// grab/hold an actor (?)
+void func_8084E25C(Player* this, PlayState* play) {
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80836988(this, play);
+ func_808313F0(this, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) {
+ Actor* interactRangeActor = this->interactRangeActor;
+
+ if (!func_808313A8(play, this, interactRangeActor)) {
+ this->actor.child = interactRangeActor;
+ this->heldActor = interactRangeActor;
+ interactRangeActor->parent = &this->actor;
+ interactRangeActor->bgCheckFlags &=
+ ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_GROUND_LEAVE | BGCHECKFLAG_WALL |
+ BGCHECKFLAG_CEILING | BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH | BGCHECKFLAG_GROUND_STRICT);
+ this->leftHandWorld.rot.y = interactRangeActor->shape.rot.y - this->actor.shape.rot.y;
+ }
+ } else {
+ Math_ScaledStepToS(&this->leftHandWorld.rot.y, 0, 0xFA0);
+ }
+}
+
+// grab/hold an actor (?)
+void func_8084E334(Player* this, PlayState* play) {
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait);
+ this->unk_AE8 = 1;
+ } else if (this->unk_AE8 == 0) {
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) {
+ Actor* interactRangeActor = this->interactRangeActor;
+
+ this->heldActor = interactRangeActor;
+ this->actor.child = interactRangeActor;
+ interactRangeActor->parent = &this->actor;
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 25.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L);
+ }
+ } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) {
+ Player_SetAction(play, this, func_8084E434, 1);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_silver_throw);
+ }
+}
+
+// throw held actor (?)
+void func_8084E434(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80836988(this, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) {
+ Actor* heldActor = this->heldActor;
+
+ heldActor->world.rot.y = this->actor.shape.rot.y;
+ heldActor->speed = 10.0f;
+ heldActor->velocity.y = 20.0f;
+ func_808309CC(play, this);
+ Player_PlaySfx(this, NA_SE_PL_THROW);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ }
+}
+
+void func_8084E4E4(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait);
+ this->unk_AE8 = 15;
+ } else if (this->unk_AE8 != 0) {
+ this->unk_AE8--;
+ if (this->unk_AE8 == 0) {
+ func_80836A98(this, &gPlayerAnim_link_normal_nocarry_free_end, play);
+ this->stateFlags1 &= ~PLAYER_STATE1_800;
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+ }
+ }
+}
+
+// Player_Action_PutDownObject?
+void func_8084E58C(Player* this, PlayState* play) {
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80836988(this, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) {
+ Actor* heldActor = this->heldActor;
+
+ if (!func_808313A8(play, this, heldActor)) {
+ heldActor->velocity.y = 0.0f;
+ heldActor->speed = 0.0f;
+ func_808309CC(play, this);
+ if (heldActor->id == ACTOR_EN_BOM_CHU) {
+ func_80831814(this, play, PLAYER_UNKAA5_0);
+ }
+ }
+ }
+}
+
+// Player_Action_Throwing
+void func_8084E65C(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 yaw;
+
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime) ||
+ ((this->skelAnime.curFrame >= 8.0f) && func_80832F78(this, &sp34, &yaw, 0.018f, play))) {
+ func_80836988(this, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) {
+ func_808409A8(play, this, this->linearVelocity + 8.0f, 12.0f);
+ }
+}
+
+void func_8084E724(Player* this, PlayState* play) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ func_808475B4(this);
+ func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y);
+ } else {
+ func_80832F24(this);
+ }
+
+ if (this->unk_AA5 == PLAYER_UNKAA5_3) {
+ if (func_800B7118(this) || func_8082ECCC(this)) {
+ func_8083216C(this, play);
+ }
+ }
+
+ if (((this->unk_AA5 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) ||
+ ((this->unk_AA5 != PLAYER_UNKAA5_2) &&
+ ((((this->csMode != PLAYER_CSMODE_0) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) ||
+ (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->targetedActor != NULL) ||
+ (func_8083868C(play, this) == CAM_MODE_NORMAL) ||
+ ((this->unk_AA5 == PLAYER_UNKAA5_3) &&
+ (((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) &&
+ CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B)) ||
+ CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_R | BTN_A) || func_80123434(this) ||
+ (!func_800B7128(this) && !func_8082EF20(this))))) ||
+ ((this->unk_AA5 == PLAYER_UNKAA5_1) &&
+ CHECK_BTN_ANY(sPlayerControlInput->press.button,
+ BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) ||
+ func_808391D8(this, play)))) {
+ func_80839ED0(this, play);
+ play_sound(NA_SE_SY_CAMERA_ZOOM_UP);
+ } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) {
+ if (func_801240DC(this)) {
+ this->unk_AA6 |= 0x43;
+ } else {
+ this->actor.shape.rot.y = func_80847190(play, this, 0);
+ }
+ }
+
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+void func_8084E980(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_8083249C(this);
+ func_8083216C(this, play);
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
+ if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) {
+ this->stateFlags2 &= ~PLAYER_STATE2_2000;
+ }
+
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ s32 sp44 = this->unk_AE8;
+
+ func_80837BD0(play, this);
+ this->unk_AE8 = sp44;
+ } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) &&
+ ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) {
+ if (func_801242B4(this)) {
+ func_808353DC(play, this);
+ } else {
+ func_8085B384(this, play);
+ }
+ }
+
+ this->unk_B5E = 0xA;
+ return;
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_800000) {
+ func_8084FE7C(this, play);
+ } else if (func_801242B4(this)) {
+ func_808508C8(this, play);
+ if (this->actor.depthInWater > 100.0f) {
+ this->actor.velocity.y = 0.0f;
+ this->actor.gravity = 0.0f;
+ }
+ } else if (!func_80123420(this) && PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->skelAnime.moveFlags != 0) {
+ func_8082E794(this);
+ if ((this->talkActor->category == ACTORCAT_NPC) && (this->heldItemAction != PLAYER_IA_FISHING_ROD)) {
+ func_8082DB90(play, this, &gPlayerAnim_link_normal_talk_free);
+ } else {
+ Player_AnimationPlayLoop(play, this, func_8082ED20(this));
+ }
+ } else {
+ func_8082DB60(play, this, &gPlayerAnim_link_normal_talk_free_wait);
+ }
+ }
+
+ if (this->targetedActor != NULL) {
+ this->currentYaw = func_8083C62C(this, false);
+ this->actor.shape.rot.y = this->currentYaw;
+ if (this->unk_AE7 != 0) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_800)) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ this->unk_AE7--;
+ if (this->unk_AE7 != 0) {
+ PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free),
+ ANIMMODE_ONCE, -6.0f);
+ }
+ }
+ }
+ AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable, D_8085B9F0);
+ } else if (!(this->stateFlags1 & PLAYER_STATE1_800) &&
+ (this->skelAnime.animation == &gPlayerAnim_link_normal_talk_free_wait)) {
+ s32 temp_v0 = this->actor.focus.rot.y - this->actor.shape.rot.y;
+
+ if (ABS_ALT(temp_v0) > 0xFA0) {
+ PlayerAnimation_Change(
+ play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f,
+ Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f);
+ this->unk_AE7 = 2;
+ }
+ }
+ }
+}
+
+void func_8084ED9C(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+ s32 temp_v0;
+
+ this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100);
+ func_8083DEE4(play, this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime) && !func_8083E14C(play, this)) {
+ func_80832F78(this, &sp34, &sp32, 0.0f, play);
+ temp_v0 = func_8083E758(this, &sp34, &sp32);
+ if (temp_v0 > 0) {
+ func_8083E234(this, play);
+ } else if (temp_v0 < 0) {
+ func_8083E28C(this, play);
+ }
+ }
+}
+
+AnimSfxEntry D_8085D650[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 3, NA_SE_PL_SLIP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 21, NA_SE_PL_SLIP, STOP),
+};
+
+void func_8084EE50(Player* this, PlayState* play) {
+ this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100);
+
+ if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) {
+ this->unk_AE8 = 1;
+ } else if ((this->unk_AE8 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH);
+ }
+
+ Player_PlayAnimSfx(this, D_8085D650);
+ func_8083DEE4(play, this);
+
+ if (!func_8083E14C(play, this)) {
+ f32 sp34;
+ s16 sp32;
+ s32 temp_v0;
+
+ func_80832F78(this, &sp34, &sp32, 0.0f, play);
+ temp_v0 = func_8083E758(this, &sp34, &sp32);
+ if (temp_v0 < 0) {
+ func_8083E28C(this, play);
+ } else if (temp_v0 == 0) {
+ func_8083DF38(this, &gPlayerAnim_link_normal_push_end, play);
+ } else {
+ this->stateFlags2 |= PLAYER_STATE2_10;
+ }
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_10) {
+ func_808479F4(play, this, 2.0f);
+ this->linearVelocity = 2.0f;
+ }
+}
+
+AnimSfxEntry D_8085D658[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 4, NA_SE_PL_SLIP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 24, NA_SE_PL_SLIP, STOP),
+};
+
+Vec3f D_8085D660 = { 0.0f, 268 * 0.1f, -60.0f };
+
+void func_8084EF9C(Player* this, PlayState* play) {
+ PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_35][this->modelAnimType];
+
+ this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100);
+
+ if (func_8082E67C(play, this, anim)) {
+ this->unk_AE8 = 1;
+ } else if (this->unk_AE8 == 0) {
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH);
+ }
+
+ //! FAKE
+ if (1) {}
+ } else {
+ Player_PlayAnimSfx(this, D_8085D658);
+ }
+
+ func_8083DEE4(play, this);
+ if (!func_8083E14C(play, this)) {
+ f32 sp78;
+ s16 sp76;
+ s32 temp_v0;
+
+ func_80832F78(this, &sp78, &sp76, 0.0f, play);
+
+ temp_v0 = func_8083E758(this, &sp78, &sp76);
+ if (temp_v0 > 0) {
+ func_8083E234(this, play);
+ } else if (temp_v0 == 0) {
+ func_8083DF38(this, D_8085BE84[PLAYER_ANIMGROUP_36][this->modelAnimType], play);
+ } else {
+ this->stateFlags2 |= PLAYER_STATE2_10;
+ }
+ }
+
+ if (this->stateFlags2 & PLAYER_STATE2_10) {
+ Vec3f sp64;
+ f32 yIntersect = func_80835D2C(play, this, &D_8085D660, &sp64) - this->actor.world.pos.y;
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f sp4C;
+ Vec3f sp40;
+
+ if (fabsf(yIntersect) < 268 * 0.1f) {
+ sp64.y -= 7.0f;
+ sp4C.x = this->actor.world.pos.x;
+ sp4C.z = this->actor.world.pos.z;
+ sp4C.y = sp64.y;
+ if (!BgCheck_EntityLineTest2(&play->colCtx, &sp4C, &sp64, &sp40, &poly, 1, 0, 0, 1, &bgId, &this->actor)) {
+ func_808479F4(play, this, -2.0f);
+ return;
+ }
+ }
+ this->stateFlags2 &= ~PLAYER_STATE2_10;
+ }
+}
+
+void func_8084F1B8(Player* this, PlayState* play) {
+ f32 sp3C;
+ s16 sp3A;
+
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this,
+ (this->unk_AE7 > 0) ? &gPlayerAnim_link_normal_fall_wait
+ : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]);
+ } else if (this->unk_AE7 == 0) {
+ f32 frame;
+
+ if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) {
+ frame = 11.0f;
+ } else {
+ frame = 1.0f;
+ }
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) {
+ Player_AnimSfx_PlayFloor(this, NA_SE_PL_WALK_GROUND);
+ if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) {
+ this->unk_AE7 = 1;
+ } else {
+ this->unk_AE7 = -1;
+ }
+ }
+ }
+
+ Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800);
+ if (this->unk_AE7 != 0) {
+ func_80832F78(this, &sp3C, &sp3A, 0.0f, play);
+ if (this->unk_ADF[this->unk_ADE] >= 0) {
+ func_808381A0(this,
+ (this->unk_AE7 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType]
+ : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType],
+ play);
+ } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) {
+ func_80833A64(this);
+
+ if (this->unk_AE7 < 0) {
+ this->linearVelocity = -0.8f;
+ } else {
+ this->linearVelocity = 0.8f;
+ }
+
+ func_80833AA0(this, play);
+ this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ }
+ }
+}
+
+void func_8084F3DC(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ this->currentYaw = this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y + this->actor.shape.rot.y;
+ func_8082E820(this, 1);
+ this->actor.shape.rot.y = this->currentYaw;
+ func_80839E74(this, play);
+ this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 6.0f)) {
+ Player_AnimSfx_PlayFloorLand(this);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 34.0f)) {
+ Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END);
+ func_8084C124(play, this);
+ }
+}
+
+void func_8084F4E8(Player* this, PlayState* play) {
+ s32 yStick = sPlayerControlInput->rel.stick_y;
+ s32 xStick = sPlayerControlInput->rel.stick_x;
+ f32 var_fv0;
+ f32 var_fv1;
+ Vec3f sp7C;
+ s32 sp78;
+ Vec3f sp6C;
+ Vec3f sp60;
+ DynaPolyActor* dyna;
+ PlayerAnimationHeader* anim1;
+ PlayerAnimationHeader* anim2;
+
+ this->fallStartHeight = this->actor.world.pos.y;
+
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) {
+ var_fv0 = ABS_ALT(xStick) * 0.0325f;
+ yStick = 0;
+ } else {
+ var_fv0 = ABS_ALT(yStick) * 0.05f;
+ xStick = 0;
+ }
+
+ if (var_fv0 < 1.0f) {
+ var_fv0 = 1.0f;
+ } else if (var_fv0 > 3.35f) {
+ var_fv0 = 3.35f;
+ }
+
+ if (this->skelAnime.playSpeed >= 0.0f) {
+ var_fv1 = 1.0f;
+ } else {
+ var_fv1 = -1.0f;
+ }
+
+ this->skelAnime.playSpeed = var_fv1 * var_fv0;
+
+ if (this->unk_AE8 >= 0) {
+ if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) {
+ dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId);
+
+ if (dyna != NULL) {
+ Math_Vec3f_Diff(&dyna->actor.world.pos, &dyna->actor.prevPos, &sp7C);
+ Math_Vec3f_Sum(&this->actor.world.pos, &sp7C, &this->actor.world.pos);
+ }
+ }
+
+ Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, 6.0f, this->ageProperties->unk_00 + 15.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
+ func_8083DD1C(play, this, 268 * 0.1f, this->ageProperties->unk_3C, 50.0f, -20.0f);
+ }
+
+ func_80831944(play, this);
+
+ if ((this->unk_AE8 < 0) || !func_8083E354(this, play)) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8 < 0) {
+ this->unk_AE8 = ABS_ALT(this->unk_AE8) & 1;
+ } else if (yStick != 0) {
+ f32 yIntersect;
+
+ sp78 = this->unk_AE7 + this->unk_AE8;
+
+ if (yStick > 0) {
+ sp6C.x = 0.0f;
+ sp6C.y = this->ageProperties->unk_40;
+ sp6C.z = this->ageProperties->unk_3C + 10.0f;
+
+ yIntersect = func_80835D2C(play, this, &sp6C, &sp60);
+
+ if (this->actor.world.pos.y < yIntersect) {
+ if (this->unk_AE7 != 0) {
+ this->actor.world.pos.y = yIntersect;
+ this->stateFlags1 &= ~PLAYER_STATE1_200000;
+ func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C,
+ &gPlayerAnim_link_normal_jump_climb_up_free);
+ this->currentYaw += 0x8000;
+ this->actor.shape.rot.y = this->currentYaw;
+ func_808381A0(this, &gPlayerAnim_link_normal_jump_climb_up_free, play);
+ this->stateFlags1 |= PLAYER_STATE1_4000;
+ } else {
+ func_8083DCC4(this, this->ageProperties->unk_D4[this->unk_AE8], play);
+ }
+ } else {
+ this->skelAnime.prevTransl = this->ageProperties->unk_4A[sp78];
+ Player_AnimationPlayOnce(play, this, this->ageProperties->unk_B4[sp78]);
+ }
+ } else if ((this->actor.world.pos.y - this->actor.floorHeight) < 15.0f) {
+ if (this->unk_AE7 != 0) {
+ func_8083E2F4(this, play);
+ } else {
+ if (this->unk_AE8 != 0) {
+ this->skelAnime.prevTransl = this->ageProperties->unk_44;
+ }
+
+ func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play);
+ this->unk_AE8 = 1;
+ }
+ } else {
+ sp78 ^= 1;
+ this->skelAnime.prevTransl = this->ageProperties->unk_62[sp78];
+ anim1 = this->ageProperties->unk_B4[sp78];
+ PlayerAnimation_Change(play, &this->skelAnime, anim1, -1.0f, Animation_GetLastFrame(anim1), 0.0f, 2,
+ 0.0f);
+ }
+
+ this->unk_AE8 ^= 1;
+ } else if ((this->unk_AE7 != 0) && (xStick != 0)) {
+ anim2 = this->ageProperties->unk_C4[this->unk_AE8];
+
+ if (xStick > 0) {
+ this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8];
+ Player_AnimationPlayOnce(play, this, anim2);
+ } else {
+ this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2];
+ PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2,
+ 0.0f);
+ }
+ } else {
+ this->stateFlags2 |= PLAYER_STATE2_1000;
+ }
+
+ return;
+ }
+ }
+
+ if (this->unk_AE8 < 0) {
+ if (((this->unk_AE8 == -2) &&
+ (PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) ||
+ ((this->unk_AE8 == -4) &&
+ (PlayerAnimation_OnFrame(&this->skelAnime, 22.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 35.0f) ||
+ PlayerAnimation_OnFrame(&this->skelAnime, 49.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 55.0f)))) {
+ func_80847A50(this);
+ }
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, (this->skelAnime.playSpeed > 0.0f) ? 20.0f : 0.0f)) {
+ func_80847A50(this);
+ }
+}
+
+f32 D_8085D66C[] = { 11.0f, 21.0f };
+f32 D_8085D674[] = { 40.0f, 50.0f };
+
+AnimSfxEntry D_8085D67C[] = {
+ ANIMSFX(ANIMSFX_TYPE_SURFACE, 10, NA_SE_PL_WALK_LADDER, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_SURFACE, 20, NA_SE_PL_WALK_LADDER, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_SURFACE, 30, NA_SE_PL_WALK_LADDER, STOP),
+};
+
+void func_8084FC0C(Player* this, PlayState* play) {
+ s32 temp_v0;
+
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f);
+ if (temp_v0 == 0) {
+ this->stateFlags1 &= ~PLAYER_STATE1_200000;
+ } else if ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80839E74(this, play);
+ this->stateFlags1 &= ~PLAYER_STATE1_200000;
+ } else {
+ f32* var_v1 = D_8085D66C;
+
+ if (this->unk_AE8 != 0) {
+ Player_PlayAnimSfx(this, D_8085D67C);
+ var_v1 = D_8085D674;
+ }
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, var_v1[0]) ||
+ PlayerAnimation_OnFrame(&this->skelAnime, var_v1[1])) {
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f pos;
+
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + 20.0f;
+ pos.z = this->actor.world.pos.z;
+ if (BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos) != 0.0f) {
+ this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, poly, bgId);
+ Player_AnimSfx_PlayFloorLand(this);
+ }
+ }
+ }
+}
+
+void func_8084FD7C(PlayState* play, Player* this, Actor* actor) {
+ s16 var_a3;
+
+ if (this->unk_B86[0] != 0) {
+ this->unk_B86[0]--;
+ return;
+ }
+
+ this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y;
+
+ var_a3 = ABS_ALT(this->upperLimbRot.y) - 0x4000;
+ if (var_a3 > 0) {
+ var_a3 = CLAMP_MAX(var_a3, 0x15E);
+ actor->shape.rot.y += var_a3 * ((this->upperLimbRot.y >= 0) ? 1 : -1);
+ actor->world.rot.y = actor->shape.rot.y;
+ }
+
+ this->upperLimbRot.y += 0x2710;
+ this->unk_AA8 = -0x1388;
+}
+
+s32 func_8084FE48(Player* this) {
+ return (this->targetedActor == NULL) && !func_8082FC24(this);
+}
+
+PlayerAnimationHeader* D_8085D688[] = {
+ &gPlayerAnim_link_uma_anim_stop, &gPlayerAnim_link_uma_anim_stand, &gPlayerAnim_link_uma_anim_walk,
+ &gPlayerAnim_link_uma_anim_slowrun, &gPlayerAnim_link_uma_anim_fastrun, &gPlayerAnim_link_uma_anim_jump100,
+ &gPlayerAnim_link_uma_anim_jump200,
+};
+
+PlayerAnimationHeader* D_8085D6A4[] = {
+ NULL,
+ NULL,
+ &gPlayerAnim_link_uma_anim_walk_muti,
+ &gPlayerAnim_link_uma_anim_walk_muti,
+ &gPlayerAnim_link_uma_anim_walk_muti,
+ &gPlayerAnim_link_uma_anim_slowrun_muti,
+ &gPlayerAnim_link_uma_anim_fastrun_muti,
+ &gPlayerAnim_link_uma_anim_fastrun_muti,
+ &gPlayerAnim_link_uma_anim_fastrun_muti,
+ NULL,
+ NULL,
+};
+
+PlayerAnimationHeader* D_8085D6D0[] = {
+ &gPlayerAnim_link_uma_wait_3,
+ &gPlayerAnim_link_uma_wait_1,
+ &gPlayerAnim_link_uma_wait_2,
+};
+
+u8 D_8085D6DC[][2] = {
+ { 32, 58 },
+ { 25, 42 },
+};
+
+Vec3s D_8085D6E0 = { -0x45, 0x1BEA, -0x10A };
+
+AnimSfxEntry D_8085D6E8[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 58, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 92, NA_SE_PL_CALM_PAT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 110, NA_SE_PL_CALM_PAT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 126, NA_SE_PL_CALM_PAT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 132, NA_SE_PL_CALM_PAT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 136, NA_SE_PL_CALM_PAT, STOP),
+};
+
+void func_8084FE7C(Player* this, PlayState* play) {
+ EnHorse* rideActor = (EnHorse*)this->rideActor;
+
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ func_80847E2C(this, 1.0f, 10.0f);
+ if (this->unk_AE8 == 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1;
+ this->unk_AE8 = 0x63;
+ } else {
+ s32 var_v0 = (this->mountSide < 0) ? 0 : 1;
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][0])) {
+ Actor_SetCameraHorseSetting(play, this);
+ Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][1])) {
+ Player_PlaySfx(this, NA_SE_PL_SIT_ON_HORSE);
+ }
+ }
+ } else {
+ if (rideActor->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ func_80841A50(play, this);
+ }
+
+ Actor_SetCameraHorseSetting(play, this);
+
+ this->skelAnime.prevTransl = D_8085D6E0;
+
+ if ((this->unk_AE8 < 0) || ((rideActor->animIndex != (this->unk_AE8 & 0xFFFF)) &&
+ ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->unk_AE8 >= 2)))) {
+ s32 animIndex = rideActor->animIndex;
+
+ if (animIndex < ENHORSE_ANIM_STOPPING) {
+ f32 temp_fv0 = Rand_ZeroOne();
+ s32 index = 0;
+
+ animIndex = ENHORSE_ANIM_WHINNY;
+ if (temp_fv0 < 0.1f) {
+ index = 2;
+ } else if (temp_fv0 < 0.2f) {
+ index = 1;
+ }
+
+ Player_AnimationPlayOnce(play, this, D_8085D6D0[index]);
+ } else {
+ this->skelAnime.animation = D_8085D688[animIndex - 2];
+ if (this->unk_AE8 >= 0) {
+ Animation_SetMorph(play, &this->skelAnime, 8.0f);
+ }
+
+ if (animIndex < ENHORSE_ANIM_WALK) {
+ func_808309CC(play, this);
+ this->unk_AE7 = 0;
+ }
+ }
+
+ this->unk_AE8 = animIndex;
+ }
+
+ if (this->unk_AE8 == 1) {
+ if (D_80862B04 || func_8082DAFC(play)) {
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3);
+ } else if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ this->unk_AE8 = 0x63;
+ } else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) {
+ Player_PlayAnimSfx(this, D_8085D6E8);
+ }
+ } else {
+ this->skelAnime.curFrame = rideActor->curFrame;
+ PlayerAnimation_AnimateFrame(play, &this->skelAnime);
+ }
+
+ AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.morphTable,
+ this->skelAnime.jointTable);
+
+ if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0)) {
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ this->unk_AE7 = 0;
+ } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) {
+ D_80862B04 = func_8083216C(this, play);
+ if (D_80862B04) {
+ this->unk_AE7 = 0;
+ }
+ }
+
+ this->actor.world.pos.x = rideActor->actor.world.pos.x + rideActor->riderPos.x;
+ this->actor.world.pos.y = rideActor->actor.world.pos.y + rideActor->riderPos.y - 27.0f;
+ this->actor.world.pos.z = rideActor->actor.world.pos.z + rideActor->riderPos.z;
+
+ this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y;
+
+ if (!D_80862B04) {
+ if (this->unk_AE7 != 0) {
+ if (PlayerAnimation_Update(play, &this->unk_284)) {
+ rideActor->stateFlags &= ~ENHORSE_FLAG_8;
+ this->unk_AE7 = 0;
+ }
+
+ if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) {
+ if (PlayerAnimation_OnFrame(&this->unk_284, 23.0f)) {
+ Player_PlaySfx(this, NA_SE_IT_LASH);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH);
+ }
+
+ AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable);
+ } else {
+ if (PlayerAnimation_OnFrame(&this->unk_284, 10.0f)) {
+ Player_PlaySfx(this, NA_SE_IT_LASH);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH);
+ }
+
+ AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->unk_284.jointTable, D_8085B9F0);
+ }
+ } else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) {
+ PlayerAnimationHeader* anim = NULL;
+
+ if (EN_HORSE_CHECK_3(rideActor)) {
+ anim = &gPlayerAnim_link_uma_stop_muti;
+ } else if (EN_HORSE_CHECK_2(rideActor)) {
+ if ((this->unk_AE8 >= 2) && (this->unk_AE8 != 0x63)) {
+ anim = D_8085D6A4[this->unk_AE8];
+ }
+ }
+
+ if (anim != NULL) {
+ PlayerAnimation_PlayOnce(play, &this->unk_284, anim);
+ this->unk_AE7 = 1;
+ }
+ }
+ }
+
+ if (this->stateFlags1 & PLAYER_STATE1_100000) {
+ if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_A) || !func_8084FE48(this)) {
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ this->stateFlags1 &= ~PLAYER_STATE1_100000;
+ } else {
+ func_8084FD7C(play, this, &rideActor->actor);
+ }
+ } else if ((this->csMode != PLAYER_CSMODE_0) ||
+ (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) &&
+ !func_80847BF0(this, play) && !func_80838A90(this, play))) {
+ if (this->targetedActor != NULL) {
+ if (func_800B7128(this)) {
+ this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y;
+ this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA);
+ this->actor.focus.rot.y = this->actor.shape.rot.y + this->upperLimbRot.y;
+ this->upperLimbRot.y += 0xFA0;
+ this->unk_AA6 |= 0x80;
+ } else {
+ func_8083C62C(this, false);
+ }
+
+ this->unk_AA8 = 0;
+ } else if (func_8084FE48(this)) {
+ if (func_800B7128(this)) {
+ func_80831010(this, play);
+ }
+
+ this->unk_B86[0] = 0xC;
+ } else if (func_800B7128(this)) {
+ func_8084FD7C(play, this, &rideActor->actor);
+ }
+ }
+ }
+
+ if (this->csMode == PLAYER_CSMODE_END) {
+ this->csMode = PLAYER_CSMODE_0;
+ }
+}
+
+AnimSfxEntry D_8085D708[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 0, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_PL_GET_OFF_HORSE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 25, NA_SE_PL_SLIPDOWN, STOP),
+};
+
+void func_808505D0(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_40;
+ func_80847E2C(this, 1.0f, 10.0f);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Actor* rideActor = this->rideActor;
+
+ Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0);
+ func_80839E74(this, play);
+
+ this->stateFlags1 &= ~PLAYER_STATE1_800000;
+ this->actor.parent = NULL;
+ gHorseIsMounted = false;
+
+ if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) || (DREG(1) != 0)) {
+ gSaveContext.save.saveInfo.horseData.sceneId = play->sceneId;
+ gSaveContext.save.saveInfo.horseData.pos.x = rideActor->world.pos.x;
+ gSaveContext.save.saveInfo.horseData.pos.y = rideActor->world.pos.y;
+ gSaveContext.save.saveInfo.horseData.pos.z = rideActor->world.pos.z;
+ gSaveContext.save.saveInfo.horseData.yaw = rideActor->shape.rot.y;
+ }
+ } else {
+ if (this->mountSide < 0) {
+ D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 40, CONTINUE);
+ } else {
+ D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 29, CONTINUE);
+ }
+
+ Player_PlayAnimSfx(this, D_8085D708);
+ }
+}
+
+s32 func_80850734(PlayState* play, Player* this) {
+ if ((this->transformation == PLAYER_FORM_ZORA) && (this->windSpeed == 0.0f) &&
+ (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) {
+ func_8083B850(play, this);
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_waterroll, 2.0f / 3.0f, 4.0f,
+ Animation_GetLastFrame(&gPlayerAnim_pz_waterroll), ANIMMODE_ONCE, -6.0f);
+ this->unk_AE8 = 5;
+ this->unk_B86[0] = 0;
+ this->unk_B48 = this->linearVelocity;
+ this->actor.velocity.y = 0.0f;
+ Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_DASH);
+ return true;
+ }
+ return false;
+}
+
+s32 func_80850854(PlayState* play, Player* this) {
+ if ((this->transformation == PLAYER_FORM_DEKU) && (this->remainingHopsCounter != 0) &&
+ (gSaveContext.save.saveInfo.playerData.health != 0) && (D_80862AFC != 0.0f)) {
+ func_808373F8(play, this, 0);
+ return true;
+ }
+ return false;
+}
+
+void func_808508C8(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait);
+ func_808475B4(this);
+
+ if (this->unk_AE8 != 0) {
+ this->unk_AE8--;
+ }
+
+ func_8082F164(this, BTN_R);
+
+ if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ this->unk_AE8 = 0;
+ }
+
+ if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) &&
+ !func_8083B3B4(play, this, sPlayerControlInput) && ((this->unk_AE8 != 0) || !func_80850734(play, this))) {
+ sp34 = 0.0f;
+ sp32 = this->actor.shape.rot.y;
+
+ if (this->unk_AA5 > PLAYER_UNKAA5_2) {
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+ }
+
+ if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType], play);
+ Player_AnimSfx_PlayFloorLand(this);
+ }
+ } else if ((func_80850854(play, this) == 0) &&
+ (func_80832F78(this, &sp34, &sp32, 0.0f, play), (sp34 != 0.0f))) {
+ if ((ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, sp32)) > 0x6000) &&
+ !Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) {
+ return;
+ }
+
+ if (func_8082FC24(this) || func_80847ED4(this)) {
+ func_80848048(play, this);
+ } else {
+ func_8083B73C(play, this, sp32);
+ }
+ }
+
+ func_8084748C(this, &this->linearVelocity, sp34, sp32);
+ func_80847F1C(this);
+ }
+}
+
+void func_80850B18(Player* this, PlayState* play) {
+ if (!func_80838A90(this, play)) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ func_808477D0(play, this, NULL, this->linearVelocity);
+ func_808475B4(this);
+
+ if (DECR(this->unk_AE8) == 0) {
+ func_808353DC(play, this);
+ }
+ }
+}
+
+void func_80850BA8(Player* this) {
+ this->linearVelocity = Math_CosS(this->unk_AAA) * this->unk_B48;
+ this->actor.velocity.y = -Math_SinS(this->unk_AAA) * this->unk_B48;
+}
+
+void func_80850BF8(Player* this, f32 arg1) {
+ f32 temp_fv0;
+ s16 temp_ft0;
+
+ Math_AsymStepToF(&this->unk_B48, arg1, 1.0f, (fabsf(this->unk_B48) * 0.01f) + 0.4f);
+ temp_fv0 = Math_CosS(sPlayerControlInput->rel.stick_x * 0x10E);
+
+ temp_ft0 = (((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) * (1.0f - temp_fv0) * -1100.0f);
+ temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40);
+
+ this->currentYaw += temp_ft0;
+}
+
+void func_80850D20(PlayState* play, Player* this) {
+ func_8083F8A8(play, this, 12.0f, -1, 1.0f, 160, 20, true);
+}
+
+void func_80850D68(Player* this, PlayState* play) {
+ f32 sp44;
+ s16 sp42;
+ s16 sp40;
+ s16 sp3E;
+ s16 sp3C;
+ s16 sp3A;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_808475B4(this);
+ func_8082F164(this, BTN_R);
+
+ if (func_80833058(play, this, D_8085D048, false)) {
+ return;
+ }
+
+ if (func_8083B3B4(play, this, sPlayerControlInput)) {
+ return;
+ }
+
+ if (func_80840A30(play, this, &this->linearVelocity, 0.0f)) {
+ return;
+ }
+
+ sp44 = 0.0f;
+
+ if (this->unk_AE8 != 0) {
+ if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
+ (this->currentBoots != PLAYER_BOOTS_ZORA_LAND)) {
+ this->unk_B86[0] = 1;
+ }
+
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->unk_AE8) == 0)) {
+ if (this->unk_B86[0] != 0) {
+ this->stateFlags3 &= ~PLAYER_STATE3_8000;
+ func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait);
+ } else {
+ func_8082DB60(play, this, &gPlayerAnim_pz_fishswim);
+ }
+ } else {
+ func_80832F78(this, &sp44, &sp40, 0.0f, play);
+ Math_ScaledStepToS(&this->currentYaw, sp40, 0x640);
+
+ if (this->skelAnime.curFrame >= 13.0f) {
+ sp44 = 12.0f;
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 13.0f)) {
+ this->unk_B48 = 16.0f;
+ }
+ this->stateFlags3 |= PLAYER_STATE3_8000;
+ } else {
+ sp44 = 0.0f;
+ }
+ }
+
+ Math_SmoothStepToS(&this->unk_B86[1], sPlayerControlInput->rel.stick_x * 0xC8, 0xA, 0x3E8, 0x64);
+ Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(40) + 1, IREG(41), IREG(42));
+ } else if (this->unk_B86[0] == 0) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
+ (this->currentBoots != PLAYER_BOOTS_ZORA_LAND) || (this->windSpeed > 9.0f)) {
+ this->stateFlags3 &= ~PLAYER_STATE3_8000;
+ func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait);
+ this->unk_B86[0] = 1;
+ } else {
+ sp44 = 9.0f;
+ func_800B8F98(&this->actor, NA_SE_PL_ZORA_SWIM_LV - SFX_FLAG);
+ }
+
+ // Y
+ sp3E = sPlayerControlInput->rel.stick_y * 0xC8;
+ if (this->unk_B8C != 0) {
+ this->unk_B8C--;
+ sp3E = CLAMP_MAX(sp3E, (s16)(this->unk_B6C - 0xFA0));
+ }
+
+ if ((this->unk_AAA >= -0x1555) && (this->actor.depthInWater < (this->ageProperties->unk_24 + 10.0f))) {
+ sp3E = CLAMP_MIN(sp3E, 0x7D0);
+ }
+ Math_SmoothStepToS(&this->unk_AAA, sp3E, 4, 0xFA0, 0x190);
+
+ // X
+ sp42 = sPlayerControlInput->rel.stick_x * 0x64;
+ if (Math_ScaledStepToS(&this->unk_B8A, sp42, 0x384) && (sp42 == 0)) {
+ Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0x5DC, 0x64);
+ Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(44) + 1, IREG(45), IREG(46));
+ } else {
+ sp3C = this->unk_B86[1];
+ sp3A = (this->unk_B8A < 0) ? -0x3A98 : 0x3A98;
+ this->unk_B86[1] += this->unk_B8A;
+ Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(47) + 1, IREG(48), IREG(49));
+
+ if ((ABS_ALT(this->unk_B8A) > 0xFA0) && ((((sp3C + this->unk_B8A) - sp3A) * (sp3C - sp3A)) <= 0)) {
+ Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_ROLL);
+ }
+ }
+
+ if (D_80862B18 < 20.0f) {
+ func_80850D20(play, this);
+ }
+ } else {
+ Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0xFA0, 0x190);
+ if ((this->skelAnime.curFrame <= 5.0f) || !func_80850734(play, this)) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_808353DC(play, this);
+ }
+ }
+
+ Player_ResetCylinder(this);
+ }
+
+ if ((this->unk_B8C < 8) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ DynaPolyActor* dynaActor;
+
+ if ((this->actor.floorBgId == BGCHECK_SCENE) ||
+ ((dynaActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId)) == NULL) ||
+ (dynaActor->actor.id != ACTOR_EN_TWIG)) {
+ this->unk_AAA += (s16)((-this->unk_B6C - this->unk_AAA) * 2);
+ this->unk_B8C = 0xF;
+ }
+
+ func_80850D20(play, this);
+ Player_PlaySfx(this, NA_SE_PL_BODY_BOUND);
+ }
+
+ func_80850BF8(this, sp44);
+ func_80850BA8(this);
+}
+
+void func_808513EC(Player* this, PlayState* play) {
+ f32 sp34;
+ s16 sp32;
+ s16 sp30;
+ s16 var_v0;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ func_808475B4(this);
+ func_8082F164(this, BTN_R);
+ if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput) &&
+ !func_80850854(play, this)) {
+ func_808477D0(play, this, sPlayerControlInput, this->linearVelocity);
+ if (func_8082DA90(play)) {
+ sp34 = this->linearVelocity;
+ sp32 = this->actor.shape.rot.y;
+ } else {
+ func_80832F78(this, &sp34, &sp32, 0.0f, play);
+ }
+ sp30 = this->actor.shape.rot.y - sp32;
+ if (!func_80850734(play, this)) {
+ if (func_8082FC24(this) || func_80847ED4(this)) {
+ func_80848048(play, this);
+ } else {
+ if ((sp34 == 0.0f) || (ABS_ALT(sp30) > 0x6000) ||
+ (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER)) {
+ func_808353DC(play, this);
+ }
+ }
+ func_80847FF8(this, &this->linearVelocity, sp34, sp32);
+ }
+ }
+}
+
+void func_80851588(Player* this, PlayState* play) {
+ f32 sp2C;
+ s16 sp2A;
+
+ func_808477D0(play, this, sPlayerControlInput, this->linearVelocity);
+ func_808475B4(this);
+ func_8082F164(this, BTN_R);
+
+ if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) {
+ func_80832F78(this, &sp2C, &sp2A, 0.0f, play);
+
+ if (sp2C == 0.0f) {
+ func_808353DC(play, this);
+ } else if (!func_8082FC24(this) && !func_80847ED4(this)) {
+ func_8083B73C(play, this, sp2A);
+ } else {
+ func_80848094(play, this, &sp2C, &sp2A);
+ }
+
+ func_80847FF8(this, &this->linearVelocity, sp2C, sp2A);
+ }
+}
+
+void func_808516B4(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ this->actor.gravity = 0.0f;
+ func_8083216C(this, play);
+ func_8082F164(this, BTN_R);
+
+ if (func_80838A90(this, play)) {
+ return;
+ }
+
+ if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) {
+ func_808353DC(play, this);
+ } else if (this->unk_AE7 == 0) {
+ f32 temp_fv0;
+
+ if (this->unk_AE8 == 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) ||
+ ((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) {
+ func_8083B798(play, this);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 20.0f)) {
+ this->actor.velocity.y = -2.0f;
+ }
+ func_80832F24(this);
+ } else {
+ func_808477D0(play, this, sPlayerControlInput, this->actor.velocity.y);
+ this->unk_AAA = 0x3E80;
+
+ if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !func_8083D23C(this, play) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) {
+ func_808481CC(play, this, -2.0f);
+ } else {
+ this->unk_AE7++;
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait);
+ }
+ }
+
+ temp_fv0 = (this->actor.depthInWater - this->ageProperties->unk_30) * 0.04f;
+ if (temp_fv0 < this->actor.velocity.y) {
+ this->actor.velocity.y = temp_fv0;
+ }
+ } else if (this->unk_AE7 == 1) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_808475B4(this);
+ if (this->unk_AAA < 0x2710) {
+ this->unk_AE7++;
+ this->unk_AE8 = this->actor.depthInWater;
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim);
+ }
+ } else if (!func_8083B3B4(play, this, sPlayerControlInput)) {
+ f32 var_fv1 = (this->unk_AE8 * 0.018f) + 4.0f;
+
+ if (this->stateFlags1 & PLAYER_STATE1_800) {
+ sPlayerControlInput = NULL;
+ }
+
+ func_808477D0(play, this, sPlayerControlInput, fabsf(this->actor.velocity.y));
+ Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320);
+
+ var_fv1 = CLAMP_MAX(var_fv1, 8.0f);
+ func_808481CC(play, this, var_fv1);
+ }
+}
+
+void func_808519FC(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ func_8082F164(this, BTN_R);
+ if (((this->stateFlags1 & PLAYER_STATE1_400) || (this->skelAnime.curFrame <= 1.0f) || !func_80850734(play, this)) &&
+ PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (!(this->stateFlags1 & PLAYER_STATE1_400) || func_808482E0(play, this)) {
+ func_80848250(play, this);
+ func_808353DC(play, this);
+ func_8082DC64(play, this);
+ }
+ } else {
+ if ((this->stateFlags1 & PLAYER_STATE1_400) && PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) {
+ func_8082ECE0(this);
+ func_8082DC64(play, this);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 5.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK);
+ }
+ }
+
+ func_808475B4(this);
+ func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y);
+}
+
+void func_80851B58(Player* this, PlayState* play) {
+ func_808475B4(this);
+ Math_StepToF(&this->linearVelocity, 0.0f, 0.4f);
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity < 10.0f)) {
+ func_808353DC(play, this);
+ }
+}
+
+void func_80851BD4(Player* this, PlayState* play) {
+ func_808475B4(this);
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this == GET_PLAYER(play))) {
+ func_80840770(play, this);
+ }
+ func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y);
+}
+
+s32 func_80851C40(PlayState* play, Player* this) {
+ return ((play->sceneId == SCENE_MILK_BAR) && Audio_IsSequencePlaying(NA_BGM_BALLAD_OF_THE_WIND_FISH)) ||
+ (((play->sceneId != SCENE_MILK_BAR) && (this->csMode == PLAYER_CSMODE_68)) ||
+ ((play->msgCtx.msgMode == 0x12) || (play->msgCtx.msgMode == 0x13) || (play->msgCtx.msgMode == 0x14) ||
+ ((play->msgCtx.ocarinaMode != 1) &&
+ ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == 3) ||
+ play->msgCtx.ocarinaAction == 0x32))));
+}
+
+// Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z
+void func_80851D30(PlayState* play, Player* this) {
+ f32* var_s0 = &this->unk_AF0[0].y; // TODO: what is going on around here in the struct?
+ Vec3f sp50;
+
+ if (func_80851C40(play, this)) {
+ s32 i;
+
+ if (this->skelAnime.mode != ANIMMODE_LOOP) {
+ func_8082DB60(play, this, D_8085D190[this->transformation]);
+ }
+ func_80124618(D_801C03A0, this->skelAnime.curFrame, &sp50);
+
+ for (i = 0; i < 5; i++) {
+ *var_s0 = sp50.x;
+ var_s0++;
+ }
+ } else if (play->msgCtx.ocarinaMode == 1) {
+ if (play->msgCtx.unk12048 != 0xFF) {
+ var_s0[play->msgCtx.unk12048] = 1.2f;
+ func_8082DB90(play, this, D_8085D190[this->transformation]);
+ } else {
+ s32 i;
+
+ for (i = 0; i < 5; i++) {
+ Math_StepToF(var_s0++, 1.0f, 0.04000001f);
+ }
+ }
+ }
+}
+
+void func_80851EAC(Player* this) {
+ this->unk_B86[0] = -1;
+ this->unk_B86[1] = -1;
+ this->unk_B10[0] = 0.0f;
+}
+
+struct_8085D714 D_8085D714[] = {
+ { 1, &gPlayerAnim_pg_gakkiplayA }, { 1, &gPlayerAnim_pg_gakkiplayL }, { 1, &gPlayerAnim_pg_gakkiplayD },
+ { 0, &gPlayerAnim_pg_gakkiplayU }, { 0, &gPlayerAnim_pg_gakkiplayR },
+};
+
+void func_80851EC8(PlayState* play, Player* this) {
+ struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048];
+ f32* temp2 = &this->unk_B10[play->msgCtx.unk12048];
+ s16* temp_a3 = &this->unk_B86[temp3->unk_0];
+
+ temp_a3[0] = play->msgCtx.unk12048;
+ temp2[0] = 3.0f;
+}
+
+void func_80851F18(PlayState* play, Player* this) {
+ struct_8085D714* temp;
+ f32* temp_v0;
+ s32 i;
+
+ i = this->unk_B86[0];
+ if (i >= 0) {
+ temp = &D_8085D714[i];
+ i = 0;
+ temp_v0 = &this->unk_B10[this->unk_B86[i]];
+
+ AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount,
+ this->skelAnime.morphTable);
+ AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ this->skelAnime.morphTable, D_8085BA08);
+ }
+ i = this->unk_B86[1];
+ if (i >= 0) {
+ temp = &D_8085D714[i];
+ i = 1;
+ temp_v0 = &this->unk_B10[this->unk_B86[i]];
+
+ AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount,
+ ALIGN16((uintptr_t)this->blendTableBuffer));
+ AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
+ ALIGN16((uintptr_t)this->blendTableBuffer), D_8085BA20);
+ }
+
+ temp_v0 = this->unk_B10;
+ for (i = 0; i < 5; i++) {
+ *temp_v0 += 1.0f;
+ if (*temp_v0 >= 9.0f) {
+ *temp_v0 = 8.0f;
+ if (this->unk_B86[0] == i) {
+ this->unk_B86[0] = -1;
+ } else if (this->unk_B86[1] == i) {
+ this->unk_B86[1] = -1;
+ }
+ }
+ temp_v0++;
+ }
+}
+
+// Goron playing the drums?
+void func_808521E0(PlayState* play, Player* this) {
+ if (func_80851C40(play, this)) {
+ if (this->skelAnime.animation != &gPlayerAnim_pg_gakkiplay) {
+ func_8082DB60(play, this, &gPlayerAnim_pg_gakkiplay);
+ }
+
+ func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]);
+ } else if (play->msgCtx.ocarinaMode == 1) {
+ if (play->msgCtx.unk12048 != 0xFF) {
+ func_80851EC8(play, this);
+ }
+
+ func_80851F18(play, this);
+ }
+}
+
+// Zora playing the guitar?
+void func_80852290(PlayState* play, Player* this) {
+ if (func_80851C40(play, this)) {
+ if (this->skelAnime.mode != ANIMMODE_LOOP) {
+ func_8082DB60(play, this, D_8085D190[this->transformation]);
+ }
+
+ this->unk_B8A = 8;
+ } else {
+ f32 sp3C;
+ s16 var_a1_3;
+ s16 sp38;
+
+ if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) {
+ if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) {
+ this->unk_A90->flags |= ACTOR_FLAG_20000000;
+ this->unk_A94 = 0.0f;
+ }
+
+ func_8082DB90(play, this, D_8085D190[this->transformation]);
+ this->unk_B8A = 8;
+ }
+
+ sPlayerControlInput = play->state.input;
+ func_800FF3A0(&sp3C, &sp38, sPlayerControlInput);
+
+ if (BINANG_ADD(sp38, 0x4000) < 0) {
+ sp38 -= 0x8000;
+ sp3C = -sp3C;
+ }
+
+ if (sp38 < -0x1F40) {
+ sp38 = -0x1F40;
+ } else if (sp38 > 0x2EE0) {
+ sp38 = 0x2EE0;
+ }
+
+ var_a1_3 = (sp3C * -100.0f);
+ var_a1_3 = CLAMP_MAX(var_a1_3, 0xFA0);
+ Math_SmoothStepToS(&this->upperLimbRot.x, var_a1_3, 4, 0x7D0, 0);
+ Math_SmoothStepToS(&this->upperLimbRot.y, sp38, 4, 0x7D0, 0);
+ this->headLimbRot.x = -this->upperLimbRot.x;
+ this->unk_AA6 |= 0xC8;
+
+ var_a1_3 = ABS_ALT(this->upperLimbRot.x);
+ if (var_a1_3 < 0x7D0) {
+ this->actor.shape.face = 0;
+ } else if (var_a1_3 < 0xFA0) {
+ this->actor.shape.face = 13;
+ } else {
+ this->actor.shape.face = 8;
+ }
+ }
+
+ if (DECR(this->unk_B8A) != 0) {
+ this->unk_B86[0] += (s16)(this->upperLimbRot.x * 2.5f);
+ this->unk_B86[1] += (s16)(this->upperLimbRot.y * 3.0f);
+ } else {
+ this->unk_B86[0] = 0;
+ this->unk_B86[1] = 0;
+ }
+}
+
+void func_8085255C(PlayState* play, Player* this) {
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ func_80851D30(play, this);
+ } else if (this->transformation == PLAYER_FORM_GORON) {
+ func_808521E0(play, this);
+ } else if (this->transformation == PLAYER_FORM_ZORA) {
+ func_80852290(play, this);
+ }
+}
+
+void func_808525C4(PlayState* play, Player* this) {
+ if (this->unk_AE8++ >= 3) {
+ if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) {
+ func_8082E5A8(play, this, D_8085D190[this->transformation]);
+ } else if (this->transformation == PLAYER_FORM_GORON) {
+ func_80851EAC(this);
+ func_8082DB60(play, this, &gPlayerAnim_pg_gakkiwait);
+ } else {
+ func_8082DB60(play, this, D_8085D190[this->transformation]);
+ }
+
+ this->unk_B48 = 1.0f;
+ }
+}
+
+void func_8085269C(Player* this, PlayState* play) {
+ if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) &&
+ (this->skelAnime.animation == D_8085D17C[this->transformation])) ||
+ ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) {
+ func_808525C4(play, this);
+ if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) {
+ func_80152434(play, 1);
+ }
+ } else if (this->unk_AE8 != 0) {
+ if (play->msgCtx.ocarinaMode == 4) {
+ play->interfaceCtx.unk_222 = 0;
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
+ this->actor.flags &= ~ACTOR_FLAG_20000000;
+
+ if ((this->talkActor != NULL) && (this->talkActor == this->unk_A90) && (this->unk_A94 >= 0.0f)) {
+ Player_TalkWithPlayer(play, this->talkActor);
+ } else if (this->tatlTextId < 0) {
+ this->talkActor = this->tatlActor;
+ this->tatlActor->textId = -this->tatlTextId;
+ Player_TalkWithPlayer(play, this->talkActor);
+ } else if (!func_80838A90(this, play)) {
+ func_80836A5C(this, play);
+ Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
+ }
+ } else {
+ s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27);
+ s32 pad[2];
+
+ if (var_v1 || (play->msgCtx.ocarinaMode == 0x16) || (play->msgCtx.ocarinaMode == 0x1A) ||
+ (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) {
+ if (play->msgCtx.ocarinaMode == 0x16) {
+ if (!func_8082DA90(play)) {
+ if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) {
+ play->nextEntrance = ENTRANCE(CUTSCENE, 1);
+ } else {
+ play->nextEntrance = ENTRANCE(CUTSCENE, 0);
+ }
+
+ gSaveContext.nextCutsceneIndex = 0xFFF7;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ }
+ } else {
+ Actor* actor;
+
+ play->interfaceCtx.unk_222 = 0;
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
+ this->actor.flags &= ~ACTOR_FLAG_20000000;
+
+ actor = Actor_Spawn(&play->actorCtx, play, var_v1 ? ACTOR_EN_TEST7 : ACTOR_EN_TEST6,
+ this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0,
+ 0, play->msgCtx.ocarinaMode);
+ if (actor != NULL) {
+ this->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ this->csMode = PLAYER_CSMODE_0;
+ func_8085B28C(play, NULL, PLAYER_CSMODE_19);
+ this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000;
+ } else {
+ func_80836A5C(this, play);
+ Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
+ }
+ }
+ } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) {
+ play->interfaceCtx.unk_222 = 0;
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
+
+ this->actor.flags &= ~ACTOR_FLAG_20000000;
+ func_80831760(play, this, func_80855A7C, 0);
+ this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000;
+ } else if (this->unk_AA5 == PLAYER_UNKAA5_4) {
+ f32 temp_fa0 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x;
+ f32 temp_fa1 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z;
+ f32 var_fv1;
+
+ var_fv1 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1));
+ if (var_fv1 != 0.0f) {
+ var_fv1 = (var_fv1 - 100.0f) / var_fv1;
+ var_fv1 = CLAMP_MIN(var_fv1, 0.0f);
+ }
+
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = temp_fa0 * var_fv1;
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = temp_fa1 * var_fv1;
+ } else {
+ func_8085255C(play, this);
+ }
+ }
+ }
+}
+
+void func_80852B28(Player* this, PlayState* play) {
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80836A98(this, &gPlayerAnim_link_normal_light_bom_end, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) {
+ if (Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x,
+ this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y,
+ this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z, 0xFA0, this->actor.shape.rot.y, 0,
+ ARROW_TYPE_DEKU_NUT) != NULL) {
+ Inventory_ChangeAmmo(ITEM_NUT, -1);
+ this->unk_D57 = 4;
+ }
+
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ }
+}
+
+AnimSfxEntry D_8085D73C[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 87, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 87, NA_SE_VO_LI_CLIMB_END, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 69, NA_SE_VO_LI_AUTO_JUMP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 123, NA_SE_NONE, STOP),
+};
+
+AnimSfxEntry D_8085D74C[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_AUTO_JUMP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 13, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 73, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 120, NA_SE_NONE, STOP),
+};
+
+void func_80852C04(Player* this, PlayState* play) {
+ func_8083249C(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8 != 0) {
+ if (this->unk_AE8 > 1) {
+ this->unk_AE8--;
+ }
+
+ if (func_808482E0(play, this) && (this->unk_AE8 == 1)) {
+ Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
+
+ if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) ||
+ (this->getItemDrawIdPlusOne == GID_REMAINS_GOHT + 1) ||
+ (this->getItemDrawIdPlusOne == GID_REMAINS_GYORG + 1) ||
+ (this->getItemDrawIdPlusOne == GID_REMAINS_TWINMOLD + 1)) {
+ Player_StopCutscene(this);
+ func_80848250(play, this);
+ this->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ func_8085B28C(play, NULL, PLAYER_CSMODE_93);
+ } else {
+ s32 var_a2 = ((this->talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) ||
+ (this->stateFlags3 & PLAYER_STATE3_20);
+
+ if (var_a2 || (gSaveContext.healthAccumulator == 0)) {
+ Player_StopCutscene(this);
+ if (var_a2) {
+ func_80848250(play, this);
+ this->exchangeItemId = PLAYER_IA_NONE;
+ if (!func_80847994(play, this)) {
+ Player_TalkWithPlayer(play, this->talkActor);
+ }
+ } else {
+ func_80848294(play, this);
+ }
+ }
+ }
+ }
+ } else {
+ func_8082E794(this);
+
+ if ((this->getItemId == GI_STRAY_FAIRY) || (this->getItemId == GI_SKULL_TOKEN) ||
+ (this->getItemId == GI_ICE_TRAP)) {
+ Player_StopCutscene(this);
+ this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800);
+ if (this->getItemId == GI_STRAY_FAIRY) {
+ func_80839E74(this, play);
+ } else {
+ this->actor.colChkInfo.damage = 0;
+ func_80833B18(play, this, 3, 0.0f, 0.0f, 0, 20);
+ }
+ } else {
+ if (this->skelAnime.animation == &gPlayerAnim_link_normal_box_kick) {
+ func_8082DB90(play, this,
+ (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getB
+ : &gPlayerAnim_link_demo_get_itemB);
+ } else {
+ func_8082DB90(play, this,
+ (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA
+ : &gPlayerAnim_link_demo_get_itemA);
+ }
+
+ func_8082E920(play, this,
+ ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE |
+ ANIM_FLAG_80);
+ Player_StopCutscene(this);
+ this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET];
+ this->unk_AE8 = 2;
+ }
+ }
+ } else if (this->unk_AE8 == 0) {
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ Player_PlayAnimSfx(this, D_8085D73C);
+ } else if (this->transformation == PLAYER_FORM_DEKU) {
+ Player_PlayAnimSfx(this, D_8085D74C);
+ }
+ } else {
+ if ((this->skelAnime.animation == &gPlayerAnim_link_demo_get_itemB) ||
+ (this->skelAnime.animation == &gPlayerAnim_pn_getB)) {
+ Math_ScaledStepToS(&this->actor.shape.rot.y,
+ BINANG_ADD(Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]), 0x8000), 0xFA0);
+ } else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) {
+ Player_AnimSfx_PlayFloorLand(this);
+ }
+
+ if (PlayerAnimation_OnFrame(&this->skelAnime, 21.0f)) {
+ func_8082ECE0(this);
+ }
+ }
+}
+
+AnimSfxEntry D_8085D75C[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_AUTO_JUMP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 15, NA_SE_NONE, STOP),
+};
+
+void func_80852FD4(Player* this, PlayState* play) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE7 == 0) {
+ if (DECR(this->unk_AE8) == 0) {
+ this->unk_AE7 = 1;
+ this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
+ }
+ } else {
+ func_80839E74(this, play);
+ }
+ } else if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 158.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N);
+ } else if (this->transformation != PLAYER_FORM_FIERCE_DEITY) {
+ Player_PlayAnimSfx(this, D_8085D75C);
+ } else {
+ func_808484CC(this);
+ }
+}
+
+Vec3f D_8085D764 = { 0.0f, 24.0f, 19.0f };
+Vec3f D_8085D770 = { 0.0f, 0.0f, 2.0f };
+Vec3f D_8085D77C = { 0.0f, 0.0f, -0.2f };
+
+Color_RGBA8 D_8085D788 = { 255, 255, 255, 255 };
+Color_RGBA8 D_8085D78C = { 255, 255, 255, 255 };
+
+void func_808530E0(PlayState* play, Player* this) {
+ Vec3f pos;
+ Vec3f velocity;
+ Vec3f accel;
+
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D764, &pos);
+ Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D770, &velocity);
+ Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D77C, &accel);
+ func_800B0EB0(play, &pos, &velocity, &accel, &D_8085D788, &D_8085D78C, 40, 10, 10);
+}
+
+u8 D_8085D790[] = {
+ 1, // PLAYER_IA_BOTTLE_POTION_RED
+ 1 | 2, // PLAYER_IA_BOTTLE_POTION_BLUE
+ 2, // PLAYER_IA_BOTTLE_POTION_GREEN
+ 4, // PLAYER_IA_BOTTLE_MILK
+ 4, // PLAYER_IA_BOTTLE_MILK_HALF
+ 1 | 2, // PLAYER_IA_BOTTLE_CHATEAU
+};
+
+void func_80853194(Player* this, PlayState* play) {
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8 == 0) {
+ if (this->itemAction == PLAYER_IA_BOTTLE_POE) {
+ s32 health = Rand_S16Offset(-1, 3);
+
+ if (health == 0) {
+ health = 3;
+ }
+ if ((health < 0) && (gSaveContext.save.saveInfo.playerData.health <= 0x10)) {
+ health = 3;
+ }
+
+ if (health < 0) {
+ Health_ChangeBy(play, -0x10);
+ } else {
+ gSaveContext.healthAccumulator = health * 0x10;
+ }
+ } else {
+ s32 temp_v1 = D_8085D790[this->itemAction - PLAYER_IA_BOTTLE_POTION_RED];
+
+ if (temp_v1 & 1) {
+ gSaveContext.healthAccumulator = 0x140;
+ }
+ if (temp_v1 & 2) {
+ Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
+ }
+ if (temp_v1 & 4) {
+ gSaveContext.healthAccumulator = 0x50;
+ }
+
+ if (this->itemAction == PLAYER_IA_BOTTLE_CHATEAU) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI);
+ }
+
+ gSaveContext.jinxTimer = 0;
+ }
+
+ func_8082DB60(play, this,
+ (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink
+ : &gPlayerAnim_link_bottle_drink_demo_wait);
+ this->unk_AE8 = 1;
+
+ //! FAKE
+ dummy_label_235515:;
+ } else if (this->unk_AE8 < 0) {
+ this->unk_AE8++;
+ if (this->unk_AE8 == 0) {
+ this->unk_AE8 = 3;
+ this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
+ } else if (this->unk_AE8 == -6) {
+ func_808530E0(play, this);
+ }
+ } else {
+ Player_StopCutscene(this);
+ func_80839E74(this, play);
+ }
+ } else if (this->unk_AE8 == 1) {
+ if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) {
+ if (this->transformation == PLAYER_FORM_DEKU) {
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pn_drinkend, 2.0f / 3.0f, 0.0f, 5.0f, 2,
+ -6.0f);
+ this->unk_AE8 = -7;
+ } else {
+ func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end);
+ this->unk_AE8 = 2;
+ }
+
+ Player_UpdateBottleHeld(play, this,
+ (this->itemAction == PLAYER_IA_BOTTLE_MILK) ? ITEM_MILK_HALF : ITEM_BOTTLE,
+ PLAYER_IA_BOTTLE_EMPTY);
+ }
+
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG);
+ } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) {
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK);
+ }
+}
+
+struct_8085D798 D_8085D798[] = {
+ { ACTOR_EN_ELF, 2, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E },
+ { ACTOR_EN_FISH, -1, ITEM_FISH, PLAYER_IA_BOTTLE_FISH, 0x62 },
+ { ACTOR_EN_INSECT, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 },
+ { ACTOR_EN_MUSHI2, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 },
+ { ACTOR_EN_TEST5, 0, ITEM_SPRING_WATER, PLAYER_IA_BOTTLE_SPRING_WATER, 0x67 },
+ { ACTOR_EN_TEST5, 1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 },
+ { ACTOR_BG_GORON_OYU, -1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 },
+ { ACTOR_EN_ZORAEGG, -1, ITEM_ZORA_EGG, PLAYER_IA_BOTTLE_ZORA_EGG, 0x69 },
+ { ACTOR_EN_DNP, -1, ITEM_DEKU_PRINCESS, PLAYER_IA_BOTTLE_DEKU_PRINCESS, 0x5F },
+ { ACTOR_EN_OT, -1, ITEM_SEAHORSE, PLAYER_IA_BOTTLE_SEAHORSE, 0x6E },
+ { ACTOR_OBJ_KINOKO, -1, ITEM_MUSHROOM, PLAYER_IA_BOTTLE_SEAHORSE, 0x6B },
+ { ACTOR_EN_POH, -1, ITEM_POE, PLAYER_IA_BOTTLE_POE, 0x65 },
+ { ACTOR_EN_BIGPO, -1, ITEM_BIG_POE, PLAYER_IA_BOTTLE_BIG_POE, 0x66 },
+ { ACTOR_EN_ELF, 6, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E },
+};
+
+void func_808534C0(Player* this, PlayState* play) {
+ struct_8085D200* sp24 = &D_8085D200[this->unk_AE8];
+
+ func_80832F24(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE7 != 0) {
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]);
+
+ if (this->unk_AE8 == 0) {
+ Message_StartTextbox(play, D_8085D798[this->unk_AE7 - 1].textId, &this->actor);
+
+ Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
+ this->unk_AE8 = 1;
+ } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ Actor* talkActor;
+
+ this->unk_AE7 = 0;
+ Player_StopCutscene(this);
+ func_800E0238(Play_GetCamera(play, CAM_ID_MAIN));
+
+ talkActor = this->talkActor;
+ if ((talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) {
+ Player_TalkWithPlayer(play, talkActor);
+ }
+ }
+ } else {
+ func_80839E74(this, play);
+ }
+ } else {
+ if (this->unk_AE7 == 0) {
+ s32 temp_ft5 = this->skelAnime.curFrame - sp24->unk_8;
+
+ if ((temp_ft5 >= 0) && (sp24->unk_9 >= temp_ft5)) {
+ if ((this->unk_AE8 != 0) && (temp_ft5 == 0)) {
+ Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER);
+ }
+
+ if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) {
+ Actor* interactRangeActor = this->interactRangeActor;
+
+ if (interactRangeActor != NULL) {
+ struct_8085D798* entry = D_8085D798;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(D_8085D798); i++) {
+ if (((interactRangeActor->id == entry->actorId) &&
+ ((entry->actorParams < 0) || (interactRangeActor->params == entry->actorParams)))) {
+ break;
+ }
+ entry++;
+ }
+
+ if (i < ARRAY_COUNT(D_8085D798)) {
+ this->unk_AE7 = i + 1;
+ this->unk_AE8 = 0;
+ this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000;
+ interactRangeActor->parent = &this->actor;
+ Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction);
+ func_8082DB90(play, this, sp24->unk_4);
+ }
+ }
+ }
+ }
+ }
+
+ if (this->skelAnime.curFrame <= 7.0f) {
+ this->stateFlags3 |= PLAYER_STATE3_800;
+ }
+ }
+}
+
+Vec3f D_8085D7EC = { 0.0f, 0.0f, 5.0f };
+
+void func_80853754(Player* this, PlayState* play) {
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_StopCutscene(this);
+ func_80839E74(this, play);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 37.0f)) {
+ s32 sp2C = 8;
+
+ Player_PlaySfx(this, NA_SE_EV_BOTTLE_CAP_OPEN);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP);
+ if (this->itemAction == PLAYER_IA_BOTTLE_FAIRY) {
+ Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
+ Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
+ sp2C = 1;
+ }
+
+ Player_SpawnFairy(play, this, &this->leftHandWorld.pos, &D_8085D7EC, sp2C);
+ }
+}
+
+void func_80853850(Player* this, PlayState* play) {
+ static Vec3f D_8085D7F8 = { 10.0f, 268 * 0.1f, 30.0f };
+ static s8 D_8085D804[PLAYER_FORM_MAX] = {
+ 0x2D, // PLAYER_FORM_FIERCE_DEITY
+ 0x4B, // PLAYER_FORM_GORON
+ 0x37, // PLAYER_FORM_ZORA
+ 0x23, // PLAYER_FORM_DEKU
+ 0x28, // PLAYER_FORM_HUMAN
+ };
+ static struct_8085D80C D_8085D80C[] = {
+ { ACTOR_EN_FISH, 0 }, // PLAYER_BOTTLE_FISH
+ { ACTOR_OBJ_AQUA, 0 }, // PLAYER_BOTTLE_SPRING_WATER
+ { ACTOR_OBJ_AQUA, 1 }, // PLAYER_BOTTLE_HOT_SPRING_WATER
+ { ACTOR_EN_ZORAEGG, 0x11 }, // PLAYER_BOTTLE_ZORA_EGG
+ { ACTOR_EN_DNP, 1 }, // PLAYER_BOTTLE_DEKU_PRINCESS
+ { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_GOLD_DUST
+ { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_1C
+ { ACTOR_EN_OT, 0x8000 }, // PLAYER_BOTTLE_SEAHORSE
+ { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_MUSHROOM
+ { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_HYLIAN_LOACH
+ { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_BUG
+ };
+ static AnimSfxEntry D_8085D838[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 38, NA_SE_VO_LI_AUTO_JUMP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 40, NA_SE_EV_BOTTLE_CAP_OPEN, STOP),
+ };
+
+ CollisionPoly* sp6C;
+ s32 sp68;
+ Vec3f sp5C;
+ f32 temp_fa0;
+ f32 temp_fv0;
+ f32 temp_fv1;
+ struct_8085D80C* sp4C;
+
+ D_8085D7F8.z = D_8085D804[this->transformation];
+ if (func_80835D58(play, this, &D_8085D7F8, &sp6C, &sp68, &sp5C)) {
+ temp_fv1 = this->actor.world.pos.x - sp5C.x;
+ temp_fa0 = this->actor.world.pos.z - sp5C.z;
+ temp_fv0 = sqrtf(SQ(temp_fv1) + SQ(temp_fa0));
+
+ if (temp_fv0 != 0.0f) {
+ temp_fv0 = 3.0f / temp_fv0;
+
+ this->actor.world.pos.x = this->actor.world.pos.x + (temp_fv1 * temp_fv0);
+ this->actor.world.pos.z = this->actor.world.pos.z + (temp_fa0 * temp_fv0);
+ }
+ }
+
+ func_80832F24(this);
+ func_8083249C(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_StopCutscene(this);
+ if (!func_80838A90(this, play)) {
+ func_80839E74(this, play);
+ }
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) {
+ sp4C = &D_8085D80C[GET_BOTTLE_FROM_IA(this->itemAction) - 1];
+
+ Actor_Spawn(&play->actorCtx, play, sp4C->actorId,
+ (Math_SinS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.x, this->leftHandWorld.pos.y,
+ (Math_CosS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.z, 0x4000,
+ this->actor.shape.rot.y, 0, sp4C->params);
+ Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
+ } else {
+ Player_PlayAnimSfx(this, D_8085D838);
+ }
+}
+
+AnimSfxEntry D_8085D840[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_PUT_OUT_ITEM, STOP),
+};
+
+void func_80853A5C(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ this->stateFlags3 |= PLAYER_STATE3_4000000;
+
+ func_8083249C(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->exchangeItemId == PLAYER_IA_NONE) {
+ Actor* talkActor = this->talkActor;
+
+ Player_StopCutscene(this);
+ this->getItemDrawIdPlusOne = GID_NONE + 1;
+
+ if ((talkActor->textId != 0) && (talkActor->textId != 0xFFFF)) {
+ this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED;
+ }
+ Player_TalkWithPlayer(play, talkActor);
+ } else {
+ GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->exchangeItemId] - 1];
+
+ if (Player_BottleFromIA(this, this->itemAction) <= PLAYER_BOTTLE_NONE) {
+ this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid);
+ }
+
+ if (this->unk_AE8 == 0) {
+ if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) {
+ Message_StartTextbox(play, this->actor.textId, &this->actor);
+ }
+
+ this->unk_AE8 = 1;
+ } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ Player_StopCutscene(this);
+ this->getItemDrawIdPlusOne = GID_NONE + 1;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
+ func_80839E74(this, play);
+ this->unk_B5E = 0xA;
+ }
+ }
+ } else if (this->unk_AE8 >= 0) {
+ if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) {
+ Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 2.0f)) {
+ GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->itemAction] - 1];
+
+ func_80838830(this, giEntry->objectId);
+ }
+ Player_PlayAnimSfx(this, D_8085D840);
+ }
+
+ if ((this->unk_AE7 == 0) && (this->targetedActor != NULL)) {
+ this->currentYaw = func_8083C62C(this, 0);
+ this->actor.shape.rot.y = this->currentYaw;
+ }
+}
+
+void func_80853CC0(Player* this, PlayState* play) {
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_re_dead_attack_wait);
+ }
+
+ if (play->sceneId != SCENE_SEA_BS) {
+ func_8082F164(this, BTN_R);
+ }
+
+ if (func_8082DE88(this, 0, 0x64)) {
+ func_80836988(this, play);
+ this->stateFlags2 &= ~PLAYER_STATE2_80;
+ }
+}
+
+void func_80853D68(Player* this, PlayState* play) {
+ CollisionPoly* floorPoly;
+ f32 var_fv0;
+ f32 temp_fv1;
+ f32 var_fa0;
+ s16 downwardSlopeYaw;
+ s16 var_v0;
+ Vec3f slopeNormal;
+
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_8083FBC4(play, this);
+ func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG),
+ this->actor.speed);
+
+ if (func_80838A90(this, play)) {
+ return;
+ }
+
+ if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) {
+ return;
+ }
+
+ floorPoly = this->actor.floorPoly;
+ if (floorPoly == NULL) {
+ func_80833AA0(this, play);
+ return;
+ }
+
+ Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw);
+ var_v0 = downwardSlopeYaw;
+ if (this->unk_AE7 != 0) {
+ var_v0 = downwardSlopeYaw + 0x8000;
+ }
+ if (this->linearVelocity < 0.0f) {
+ downwardSlopeYaw += 0x8000;
+ }
+
+ var_fv0 = (1.0f - slopeNormal.y) * 40.0f;
+ var_fv0 = CLAMP(var_fv0, 0.0f, 10.0f);
+
+ temp_fv1 = var_fv0 * var_fv0 * 0.015f;
+ var_fa0 = slopeNormal.y * 0.01f;
+ if (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1) {
+ var_fv0 = 0.0f;
+ var_fa0 = slopeNormal.y * 10.0f;
+ }
+ temp_fv1 = CLAMP_MIN(temp_fv1, 1.0f);
+
+ if (Math_AsymStepToF(&this->linearVelocity, var_fv0, temp_fv1, var_fa0) && (var_fv0 == 0.0f)) {
+ func_80836A98(this,
+ (this->unk_AE7 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType]
+ : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType],
+ play);
+ }
+
+ Math_SmoothStepToS(&this->currentYaw, downwardSlopeYaw, 0xA, 0xFA0, 0x320);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, var_v0, 0x7D0);
+}
+
+void func_80859CE0(PlayState* play, Player* this, s32 arg2);
+
+void func_80854010(Player* this, PlayState* play) {
+ if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) {
+ func_80859CE0(play, this, 0);
+ Player_SetAction(play, this, func_8085B08C, 0);
+ func_8085B08C(this, play);
+ }
+}
+
+void func_808540A0(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_80854010, 0);
+ this->unk_AE8 = 0x28;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10);
+}
+
+void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction);
+
+void func_80854118(Player* this, PlayState* play) {
+ if (D_80862B18 < 150.0f) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8 == 0) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
+ Player_AnimSfx_PlayFloorLand(this);
+ this->unk_AE8 = 1;
+ }
+ } else {
+ func_8085B384(this, play);
+ }
+ }
+
+ Math_SmoothStepToF(&this->actor.velocity.y, 2.0f, 0.3f, 8.0f, 0.5f);
+ }
+
+ if (play->csCtx.state != CS_STATE_IDLE) {
+ if (play->csCtx.playerCue != NULL) {
+ s32 pad;
+ f32 sp28 = this->actor.world.pos.y;
+
+ Player_Cutscene_SetPosAndYawToStart(this, play->csCtx.playerCue);
+ this->actor.world.pos.y = sp28;
+ }
+ }
+}
+
+void func_8085421C(Player* this, PlayState* play) {
+ if (this->skelAnime.animation == NULL) {
+ this->stateFlags2 |= PLAYER_STATE2_4000;
+ } else {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if ((this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) &&
+ PlayerAnimation_OnFrame(&this->skelAnime, 60.0f)) {
+ Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S);
+ }
+ }
+
+ if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) {
+ if (this->unk_AE7 != 0) {
+ if (this->unk_AE7 < 0) {
+ func_80169FDC(&play->state);
+ } else {
+ func_80169EFC(&play->state);
+ }
+ if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
+ gSaveContext.respawnFlag = -5;
+ }
+
+ play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
+ play_sound(NA_SE_OC_ABYSS);
+ } else {
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ }
+
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ }
+}
+
+void func_8085437C(Player* this, PlayState* play) {
+ func_808365DC(this, play);
+}
+
+void func_8085439C(Player* this, PlayState* play) {
+ this->actor.gravity = -1.0f;
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (this->actor.velocity.y < 0.0f) {
+ func_80833AA0(this, play);
+ } else if (this->actor.velocity.y < 6.0f) {
+ Math_StepToF(&this->linearVelocity, 3.0f, 0.5f);
+ }
+}
+
+void func_80854430(Player* this, PlayState* play) {
+ if (play->unk_1887C < 0) {
+ play->unk_1887C = 0;
+ func_80839ED0(this, play);
+ } else if (this->unk_AE7 == 0) {
+ if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
+ play->unk_1887C = 10;
+ func_80847880(play, this);
+ Player_SetAction(play, this, func_80854430, 1);
+ this->unk_AE7 = 1;
+ } else {
+ play->unk_1887C = 0;
+ func_80847190(play, this, 0);
+
+ if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
+ this->stateFlags1 |= PLAYER_STATE1_100000;
+ func_8083868C(play, this);
+ } else {
+ this->stateFlags1 &= ~PLAYER_STATE1_100000;
+ if ((play->sceneId == SCENE_20SICHITAI) &&
+ (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTO_BOX)) {
+ s32 requiredScopeTemp;
+
+ play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON;
+ }
+ }
+ }
+ } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button,
+ BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_A)) {
+ play->unk_1887C = -1;
+ func_80854614(this, play);
+ Player_SetAction(play, this, func_80854430, 0);
+ this->unk_AE7 = 0;
+ } else {
+ play->unk_1887C = 10;
+ func_80854614(this, play);
+ }
+}
+
+void func_80854614(Player* this, PlayState* play) {
+ this->unk_AA5 = PLAYER_UNKAA5_3;
+ func_8083868C(play, this);
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_8083216C(this, play);
+ this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y;
+ this->unk_AA6 |= 0x80;
+
+ if (play->unk_1887C < 0) {
+ play->unk_1887C++;
+ if (play->unk_1887C == 0) {
+ func_80839ED0(this, play);
+ }
+ }
+}
+
+void func_808546D0(Player* this, PlayState* play) {
+ if (this->unk_AE7 >= 0) {
+ if (this->unk_AE7 < 6) {
+ this->unk_AE7++;
+ } else {
+ this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f;
+ if (func_8082DE88(this, 1, 0x64)) {
+ this->unk_AE7 = -1;
+ EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x);
+ Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN);
+ }
+
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ func_80834104(play, this);
+ this->skelAnime.animation = NULL;
+ this->unk_AE8 = -0x28;
+ this->unk_AE7 = 1;
+ this->linearVelocity = 0.0f;
+ } else if (play->gameplayFrames % 4 == 0) {
+ Player_InflictDamage(play, -1);
+ }
+ }
+
+ this->stateFlags2 |= PLAYER_STATE2_4000;
+ } else if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80836988(this, play);
+ func_808339B4(this, 20);
+ }
+}
+
+void func_80854800(Player* this, PlayState* play) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_808345A8(this);
+
+ if (((this->unk_AE8 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) {
+ if (DECR(this->unk_AE8) == 0) {
+ func_80836988(this, play);
+ }
+ }
+
+ this->shockTimer = 40;
+ func_800B8F98(&this->actor, this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG));
+}
+
+void func_808548B8(Player* this, PlayState* play) {
+ AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation];
+
+ if (this->skelAnime.curFrame < (this->skelAnime.endFrame - 6.0f)) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ }
+
+ if (func_808401F4(play, this)) {
+ return;
+ }
+
+ if (this->linearVelocity >= 0.0f) {
+ func_8083FCF0(play, this, (this->transformation == PLAYER_FORM_GORON) ? 5.0f : 0.0f, attackInfoEntry->unk_C,
+ attackInfoEntry->unk_D);
+ }
+
+ if ((this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_LEFT) ||
+ (this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT)) {
+ this->unk_3D0.unk_00 = 3;
+ }
+
+ //! @bug Lunge Storage: If this block is prevented from running at the end of an animation that produces a lunge,
+ //! the prepared lunge will be retained until next time execution passes through here, which usually means the next
+ //! sword slash.
+ if ((this->stateFlags2 & PLAYER_STATE2_40000000) && PlayerAnimation_OnFrame(&this->skelAnime, 0.0f)) {
+ this->linearVelocity = 15.0f;
+ this->stateFlags2 &= ~PLAYER_STATE2_40000000;
+ }
+
+ if (this->linearVelocity > 12.0f) {
+ func_8083FBC4(play, this);
+ }
+
+ Math_StepToF(&this->linearVelocity, 0.0f, 5.0f);
+ func_8083A548(this);
+
+ if (PlayerAnimation_Update(play, &this->skelAnime) ||
+ ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) &&
+ (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) &&
+ func_808333CC(this))) {
+ D_80862B48 = this->unk_AE8;
+
+ if (!func_80848570(this, play)) {
+ PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4;
+
+ func_8082DC38(this);
+
+ if (anim == NULL) {
+ this->skelAnime.moveFlags &= ~8;
+ func_8085B384(this, play);
+ } else {
+ u8 moveFlags = this->skelAnime.moveFlags;
+
+ if (this->transformation == PLAYER_FORM_ZORA) {
+ if (func_8083A580(this, play)) {
+ anim = this->unk_284.animation;
+ }
+ this->unk_ADC = 0;
+ } else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) &&
+ (this->modelAnimType != PLAYER_ANIMTYPE_3)) {
+ anim = &gPlayerAnim_link_fighter_power_jump_kiru_end;
+ }
+
+ this->skelAnime.moveFlags = 0;
+ Player_SetAction(play, this, func_80849FE0, 1);
+ func_8082EC9C(play, this, anim);
+ this->currentYaw = this->actor.shape.rot.y;
+ this->skelAnime.moveFlags = moveFlags;
+ }
+ this->stateFlags3 |= PLAYER_STATE3_8;
+ }
+ } else if (((this->transformation == PLAYER_FORM_ZORA) &&
+ (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_PUNCH_KICK) &&
+ (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_JUMPKICK_FINISH)) ||
+ ((this->transformation == PLAYER_FORM_GORON) &&
+ (this->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))) {
+ this->unk_AE8 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0;
+ }
+}
+
+void func_80854C70(Player* this, PlayState* play) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ func_80832F24(this);
+
+ if (this->skelAnime.curFrame >= 6.0f) {
+ func_80836988(this, play);
+ }
+}
+
+// Array colour interpolation
+// arg0 is the interpolation parameter
+// arg1,5,9 are out colours
+// arg2,6,0xA are first values
+// arg3,7,0xB are second values
+// arg4,8,0xC are subtracted after interpolation
+void func_80854CD0(f32 arg0, s16* arg1, u8* arg2, u8* arg3, u8* arg4, s16* arg5, u8* arg6, u8* arg7, u8* arg8,
+ s16* arg9, u8* argA, u8* argB, u8* argC) {
+ s32 i;
+
+ for (i = 0; i < 3; i++) {
+ *arg1 = ((s32)((*arg2 - *arg3) * arg0) + *arg3) - *arg4;
+ *arg5 = ((s32)((*arg6 - *arg7) * arg0) + *arg7) - *arg8;
+ *arg9 = ((s32)((*argA - *argB) * arg0) + *argB) - *argC;
+
+ arg1++;
+ arg2++;
+ arg3++;
+ arg4++;
+ arg5++;
+ arg6++;
+ arg7++;
+ arg8++;
+ arg9++;
+ argA++;
+ argB++;
+ argC++;
+ }
+}
+
+// Black, probably in-function static
+u8 D_8085D844[] = { 0, 0, 0 };
+
+// arg1 is the colour interpolation parameter
+void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) {
+ struct_8085D848_unk_00 sp70;
+ struct_8085D848_unk_00* var_t0;
+ struct_8085D848_unk_00* var_v1;
+ u8* var_t3;
+ u8* var_t4;
+ u8* new_var;
+ s32 pad[4];
+
+ new_var = play->envCtx.unk_C4.diffuseColor1;
+ sp70.fogNear = play->envCtx.unk_C4.fogNear;
+ sp70.fogColor[0] = play->envCtx.unk_C4.fogColor[0];
+ sp70.fogColor[1] = play->envCtx.unk_C4.fogColor[1];
+ sp70.fogColor[2] = play->envCtx.unk_C4.fogColor[2];
+ sp70.ambientColor[0] = play->envCtx.unk_C4.ambientColor[0];
+ sp70.ambientColor[1] = play->envCtx.unk_C4.ambientColor[1];
+ sp70.ambientColor[2] = play->envCtx.unk_C4.ambientColor[2];
+
+ if (arg1 <= 1.0f) {
+ arg1 -= 0.0f;
+
+ var_v1 = &arg2[0];
+ var_t0 = &sp70;
+ var_t3 = D_8085D844;
+ var_t4 = new_var;
+ } else if (arg1 <= 2.0f) {
+ arg1 -= 1.0f;
+ var_v1 = &arg2[1];
+ var_t0 = &arg2[0];
+ var_t3 = D_8085D844;
+ var_t4 = D_8085D844;
+
+ } else if (arg1 <= 3.0f) {
+ arg1 -= 2.0f;
+ var_v1 = &arg2[2];
+ var_t0 = &arg2[1];
+ var_t3 = D_8085D844;
+ var_t4 = D_8085D844;
+
+ } else {
+ arg1 -= 3.0f;
+ var_v1 = &sp70;
+ var_t0 = &arg2[2];
+ var_t3 = new_var;
+ var_t4 = D_8085D844;
+ }
+
+ play->envCtx.lightSettings.fogNear =
+ ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.fogNear;
+
+ func_80854CD0(arg1, play->envCtx.lightSettings.fogColor, var_v1->fogColor, var_t0->fogColor,
+ play->envCtx.unk_C4.fogColor, play->envCtx.lightSettings.ambientColor, var_v1->ambientColor,
+ var_t0->ambientColor, play->envCtx.unk_C4.ambientColor, play->envCtx.lightSettings.diffuseColor1,
+ var_t3, var_t4, new_var);
+}
+
+struct_8085D848 D_8085D848[] = {
+ {
+ {
+ { 650, { 0, 0, 0 }, { 10, 0, 30 } },
+ { 300, { 200, 200, 255 }, { 0, 0, 0 } },
+ { 600, { 0, 0, 0 }, { 0, 0, 200 } },
+ },
+ {
+ { { -40.0f, 20.0f, -10.0f }, { 120, 200, 255 }, 1000 },
+ { { 0.0f, -10.0f, 0.0f }, { 255, 255, 255 }, 5000 },
+ { { -10.0f, 4.0f, 3.0f }, { 200, 200, 255 }, 5000 },
+ },
+ },
+ {
+ {
+ { 650, { 0, 0, 0 }, { 10, 0, 30 } },
+ { 300, { 200, 200, 255 }, { 0, 0, 0 } },
+ { 600, { 0, 0, 0 }, { 0, 0, 200 } },
+ },
+ {
+ { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 },
+ { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 },
+ { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 },
+ },
+ },
+};
+
+// arg2 is the colour interpolation parameter
+// arg3 both selects the light to use and scales the radius
+// arg4 selects the env fog/colour info
+void func_808550D0(PlayState* play, Player* this, f32 arg2, f32 arg3, s32 arg4) {
+ struct_8085D848* temp_a2 = &D_8085D848[arg4];
+ struct_8085D848_unk_18* lightInit = temp_a2->light;
+ Vec3f pos;
+
+ func_80854EFC(play, arg2, temp_a2->unk_00);
+
+ if (arg3 > 2.0f) {
+ arg3 -= 2.0f;
+ lightInit += 2;
+ } else if (arg3 > 1.0f) {
+ arg3 -= 1.0f;
+ lightInit++;
+ }
+
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &lightInit->pos, &pos);
+ Lights_PointNoGlowSetInfo(&this->lightInfo, pos.x, pos.y, pos.z, lightInit->color[0], lightInit->color[1],
+ lightInit->color[2], lightInit->radius * arg3);
+}
+
+AnimSfxEntry D_8085D8F0[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 2, NA_SE_PL_PUT_OUT_ITEM, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_IT_SET_TRANSFORM_MASK, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 11, NA_SE_PL_FREEZE_S, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_TRANSFORM_VOICE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_TRANSFORM_MASK_BROKEN, STOP),
+};
+
+AnimSfxEntry D_8085D904[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 8, NA_SE_IT_SET_TRANSFORM_MASK, STOP),
+};
+
+void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) {
+ func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend);
+ } else if ((this->skelAnime.animation == &gPlayerAnim_cl_setmask) ||
+ (this->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) {
+ if (this->unk_AE7 >= 58) {
+ Math_StepToS(&this->unk_AE8, 255, 50);
+ }
+
+ if (this->unk_AE7 >= 64) {
+ Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f);
+ } else if (this->unk_AE7 >= 0xE) {
+ Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f);
+ }
+
+ if (this->unk_AE7 > 65) {
+ Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f);
+ } else if (this->unk_AE7 >= 0x10) {
+ Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f);
+ }
+
+ if ((R_PLAY_FILL_SCREEN_ON == 0) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) {
+ Player_PlayAnimSfx(this, D_8085D8F0);
+ }
+ } else {
+ if (this->unk_AE7 >= 20) {
+ Math_StepToS(&this->unk_AE8, 255, 20);
+ }
+
+ if (R_PLAY_FILL_SCREEN_ON == 0) {
+ Player_PlayAnimSfx(this, D_8085D904);
+ if (this->unk_AE7 == 15) {
+ Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE);
+ }
+ }
+ }
+}
+
+u16 D_8085D908[] = {
+ WEEKEVENTREG_30_80, // PLAYER_FORM_FIERCE_DEITY
+ WEEKEVENTREG_30_20, // PLAYER_FORM_GORON
+ WEEKEVENTREG_30_40, // PLAYER_FORM_ZORA
+ WEEKEVENTREG_30_10, // PLAYER_FORM_DEKU
+};
+struct_8085D910 D_8085D910[] = {
+ { 0x10, 0xA, 0x3B, 0x3F },
+ { 9, 0x32, 0xA, 0xD },
+};
+
+void func_808553F4(Player* this, PlayState* play) {
+ struct_8085D910* sp4C = D_8085D910;
+ s32 sp48 = false;
+
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]);
+ sPlayerControlInput = play->state.input;
+
+ Camera_ChangeMode(play->cameraPtrs[play->activeCamId],
+ (this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP);
+ this->stateFlags2 |= PLAYER_STATE2_40;
+ this->actor.shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]) + 0x8000;
+
+ func_80855218(play, this, &sp4C);
+
+ if (this->unk_AE7 == 0x14) {
+ Play_EnableMotionBlurPriority(100);
+ }
+
+ if (R_PLAY_FILL_SCREEN_ON != 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA > 255) {
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+ this->actor.update = func_8012301C;
+ this->actor.draw = NULL;
+ this->unk_AE7 = 0;
+ Play_DisableMotionBlurPriority();
+ SET_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm]);
+ }
+ } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) ||
+ ((this->unk_AE7 >= 5) &&
+ (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) ||
+ CHECK_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm])) &&
+ CHECK_BTN_ANY(sPlayerControlInput->press.button,
+ BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)))) {
+ R_PLAY_FILL_SCREEN_ON = 45;
+ R_PLAY_FILL_SCREEN_R = 220;
+ R_PLAY_FILL_SCREEN_G = 220;
+ R_PLAY_FILL_SCREEN_B = 220;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+
+ if (sp48) {
+ if (CutsceneManager_GetCurrentCsId() == this->csId) {
+ func_800E0348(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId)));
+ }
+
+ if (this->transformation == PLAYER_FORM_HUMAN) {
+ AudioSfx_StopById(NA_SE_PL_TRANSFORM_VOICE);
+ AudioSfx_StopById(NA_SE_IT_TRANSFORM_MASK_BROKEN);
+ } else {
+ AudioSfx_StopById(NA_SE_PL_FACE_CHANGE);
+ }
+ }
+
+ Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH);
+ }
+
+ if (this->unk_AE7 >= sp4C->unk_0) {
+ if (this->unk_AE7 < sp4C->unk_2) {
+ Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f);
+ } else if (this->unk_AE7 < sp4C->unk_3) {
+ if (this->unk_AE7 == sp4C->unk_2) {
+ func_801000CC(NA_SE_EV_LIGHTNING_HARD);
+ }
+
+ Math_StepToF(&this->unk_B10[4], 2.0f, 0.5f);
+ } else {
+ Math_StepToF(&this->unk_B10[4], 3.0f, 0.2f);
+ }
+ }
+
+ if (this->unk_AE7 >= 0x10) {
+ if (this->unk_AE7 < 0x40) {
+ Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f);
+ } else if (this->unk_AE7 < 0x37) {
+ Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f);
+ } else {
+ Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f);
+ }
+ }
+
+ func_808550D0(play, this, this->unk_B10[4], this->unk_B10[5], (this->transformation == PLAYER_FORM_HUMAN) ? 0 : 1);
+}
+
+void func_80855818(Player* this, PlayState* play) {
+ Camera_ChangeMode(play->cameraPtrs[play->activeCamId],
+ (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP);
+
+ if (R_PLAY_FILL_SCREEN_ON != 0) {
+ R_PLAY_FILL_SCREEN_ALPHA -= R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
+ R_PLAY_FILL_SCREEN_ON = 0;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ }
+ }
+
+ if (this->unk_AE7++ < 4) {
+ if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) {
+ PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE,
+ 20.0f);
+ }
+ } else {
+ s32 pad;
+ f32 dist;
+ s16 angle;
+
+ func_800FF3A0(&dist, &angle, play->state.input);
+ if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) {
+ if (R_PLAY_FILL_SCREEN_ON == 0) {
+ this->stateFlags1 &= ~PLAYER_STATE1_2;
+ this->prevMask = this->currentMask;
+ this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION];
+ Player_StopCutscene(this);
+ play->envCtx.lightSettings = D_80862B50;
+ func_8085B384(this, play);
+ return;
+ }
+ }
+
+ Math_StepToF(&this->unk_B10[5], 4.0f, 0.2f);
+ }
+
+ func_808550D0(play, this, 0, this->unk_B10[5], (this->prevMask == PLAYER_MASK_NONE) ? 0 : 1);
+}
+
+void func_80855A7C(Player* this, PlayState* play) {
+ if (this->unk_AE8++ > 90) {
+ play->msgCtx.ocarinaMode = 4;
+ func_8085B384(this, play);
+ } else if (this->unk_AE8 == 10) {
+ func_80848640(play, this);
+ }
+}
+
+// Giant's Mask
+void func_80855AF4(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ func_80855218(play, this, NULL);
+ this->unk_AE7++;
+
+ if (!(this->stateFlags1 & PLAYER_STATE1_100)) {
+ this->prevMask = this->currentMask;
+ gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_GIANT;
+ Magic_Consume(play, 0, MAGIC_CONSUME_GIANTS_MASK);
+ this->currentBoots = PLAYER_BOOTS_GIANT;
+ this->prevBoots = PLAYER_BOOTS_GIANT;
+ func_80123140(play, this);
+ func_8085B384(this, play);
+ }
+}
+
+void func_80855B9C(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_40;
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (!(this->stateFlags1 & PLAYER_STATE1_100)) {
+ this->prevMask = this->currentMask;
+
+ gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_NONE;
+
+ this->currentBoots = PLAYER_BOOTS_HYLIAN;
+ this->prevBoots = PLAYER_BOOTS_HYLIAN;
+ func_80123140(play, this);
+ func_8085B384(this, play);
+ }
+}
+
+void func_80855C28(Player* this, PlayState* play) {
+ s16 sp3E;
+ s32 pad;
+ PlayerAnimationHeader* sp34;
+ s32 var_a0;
+
+ func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]);
+ sp3E = BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y);
+
+ var_a0 = 0;
+ if ((this->actor.floorHeight - this->actor.world.pos.y) < 60.0f) {
+ Math_StepToF(&this->unk_B10[5], 200.0f, 150.0f);
+ var_a0 = Math_StepToS(&this->unk_AE8, 0xFA0, 0x15E);
+ }
+
+ this->actor.shape.rot.y += this->unk_AE8;
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = 0;
+ this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = 0;
+ this->unk_ABC += this->unk_B10[5];
+
+ if (this->unk_ABC >= 0.0f) {
+ this->unk_ABC = 0.0f;
+ if ((var_a0 != 0) && (sp3E < 0)) {
+ if (BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y) >= 0) {
+ this->actor.shape.rot.y = this->actor.world.rot.y;
+ Player_StopCutscene(this);
+ if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) {
+ sp34 = D_8085D17C[this->transformation];
+ func_80836A5C(this, play);
+ PlayerAnimation_Change(play, &this->skelAnime, sp34, -2.0f / 3.0f, Animation_GetLastFrame(sp34),
+ 0.0f, ANIMMODE_ONCE, -6.0f);
+ } else {
+ func_80839E74(this, play);
+ }
+ }
+ }
+ } else if (this->unk_AE7 == 0) {
+ Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT);
+ this->unk_AE7 = 1;
+ }
+}
+
+void func_80855E08(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20;
+
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_hook_fly_wait);
+ }
+
+ Math_Vec3f_Sum(&this->actor.world.pos, &this->actor.velocity, &this->actor.world.pos);
+ if (func_80831124(play, this)) {
+ f32 var_fv0;
+
+ Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos);
+ func_80843178(play, this);
+
+ var_fv0 = this->actor.world.pos.y - this->actor.floorHeight;
+ var_fv0 = CLAMP_MAX(var_fv0, 20.0f);
+
+ this->actor.world.pos.y = this->actor.world.pos.y - var_fv0;
+ this->actor.shape.rot.x = 0;
+ this->linearVelocity = 1.0f;
+ this->actor.velocity.y = 0.0f;
+ this->actor.world.rot.x = this->actor.shape.rot.x;
+ func_80833AA0(this, play);
+ this->stateFlags2 &= ~PLAYER_STATE2_400;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
+ this->stateFlags3 |= PLAYER_STATE3_10000;
+ } else if ((this->skelAnime.animation != &gPlayerAnim_link_hook_fly_start) || (this->skelAnime.curFrame >= 4.0f)) {
+ this->actor.gravity = 0.0f;
+ Math_ScaledStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x, 0x800);
+ Player_RequestRumble(play, this, 100, 2, 100, SQ(0));
+ }
+}
+
+void func_80855F9C(PlayState* play, Player* this) {
+ f32 sp24;
+ s16 sp22;
+
+ this->stateFlags2 |= PLAYER_STATE2_20;
+ func_80832F78(this, &sp24, &sp22, 0.018f, play);
+ Math_ScaledStepToS(&this->currentYaw, sp22, 0x258);
+}
+
+s32 func_80856000(PlayState* play, Player* this) {
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f pos;
+ f32 sp28;
+
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y - 20.0f;
+ pos.z = this->actor.world.pos.z;
+ return BgCheck_EntityCheckCeiling(&play->colCtx, &sp28, &pos, 30.0f, &poly, &bgId, &this->actor);
+}
+
+void func_80856074(PlayState* play, Player* this) {
+ if (func_8083F8A8(play, this, 12.0f, 4, 0.0f, 10, 50, true)) {
+ EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 4, 8, 2, -1, 10, NULL);
+ }
+}
+
+void func_80856110(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, s16 scale, s16 scaleStep, s16 life) {
+ static Vec3f D_8085D918 = { 0.0f, 0.5f, 0.0f }; // velocity
+ static Vec3f D_8085D924 = { 0.0f, 0.5f, 0.0f }; // accel
+ static Color_RGBA8 D_8085D930 = { 255, 255, 55, 255 }; // primColor
+ static Color_RGBA8 D_8085D934 = { 100, 50, 0, 0 }; // envColor
+ Vec3f pos;
+
+ pos.x = this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y + arg2;
+ pos.z = this->actor.world.pos.z;
+
+ D_8085D918.y = arg3;
+ D_8085D924.y = arg4;
+
+ func_800B0EB0(play, &pos, &D_8085D918, &D_8085D924, &D_8085D930, &D_8085D934, scale, scaleStep, life);
+}
+
+// Deku Flower related
+void func_808561B0(Player* this, PlayState* play) {
+ DynaPolyActor* dyna;
+ s32 aux = 0xAE;
+ f32 temp_fv0_2;
+ s32 sp38;
+ s32 var_v1;
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if (func_80838A90(this, play)) {
+ return;
+ }
+
+ if (this->unk_AE7 == 0) {
+ this->unk_ABC += this->unk_B48;
+ if (this->unk_ABC < -1000.0f) {
+ this->unk_ABC = -1000.0f;
+ this->unk_AE7 = 1;
+ this->unk_B48 = 0.0f;
+ }
+ func_80856074(play, this);
+ } else if (this->unk_AE7 == 1) {
+ this->unk_B48 += -22.0f;
+ if (this->unk_B48 < -170.0f) {
+ this->unk_B48 = -170.0f;
+ }
+ this->unk_ABC += this->unk_B48;
+ if (this->unk_ABC < -3900.0f) {
+ this->unk_ABC = -3900.0f;
+ this->unk_AE7 = 2;
+ this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]);
+ this->actor.scale.y = 0.01f;
+ this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y;
+ } else {
+ temp_fv0_2 = Math_SinS((1000.0f + this->unk_ABC) * (-30.0f)) * 0.004f;
+ this->actor.scale.y = 0.01f + temp_fv0_2;
+ this->actor.scale.z = this->actor.scale.x = 0.01f - (this->unk_B48 * -0.000015f);
+
+ this->actor.shape.rot.y += (s16)(this->unk_B48 * 130.0f);
+ if (this->actor.floorBgId != BGCHECK_SCENE) {
+ dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId);
+
+ if (dyna != NULL) {
+ Math_Vec3f_StepToXZ(&this->actor.world.pos, &dyna->actor.world.pos, 1.0f);
+ }
+ }
+ }
+
+ func_80856074(play, this);
+ } else if (this->unk_AE7 == 2) {
+ if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) {
+ if (func_80856000(play, this)) {
+ this->unk_AE8 = 0;
+ } else {
+ this->unk_AE7 = 3;
+ if (this->unk_AE8 >= 10) {
+ this->unk_B48 = 2700.0f;
+ } else {
+ this->unk_B48 = 1450.0f;
+ }
+ func_8082E1F0(this, NA_SE_PL_DEKUNUTS_OUT_GRD);
+ }
+ } else if (this->unk_AE8 < 15) {
+ this->unk_AE8++;
+ if (this->unk_AE8 == 10) {
+ func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15);
+ }
+ }
+ func_80855F9C(play, this);
+ } else {
+ this->unk_ABC += this->unk_B48;
+
+ temp_fv0_2 = this->unk_ABC;
+ if (temp_fv0_2 >= 0.0f) {
+ f32 speed;
+
+ sp38 = (this->unk_AE8 >= 10);
+ var_v1 = -1;
+ speed = this->unk_B48 * this->actor.scale.y;
+ if (this->actor.floorBgId != BGCHECK_SCENE) {
+ dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId);
+ var_v1 = 0;
+ if ((dyna != NULL) && (dyna->actor.id == ACTOR_OBJ_ETCETERA) && (dyna->actor.params & 0x100)) {
+ var_v1 = 1;
+ speed *= aux / 100.0f;
+ }
+ }
+
+ Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos);
+ this->unk_ABC = 0.0f;
+ this->actor.world.pos.y += temp_fv0_2 * this->actor.scale.y;
+ func_80834DB8(this, &gPlayerAnim_pn_kakku, speed, play);
+ Player_SetAction(play, this, func_80856918, 1);
+ this->boomerangActor = NULL;
+
+ this->stateFlags3 |= PLAYER_STATE3_200;
+ if (sp38 != 0) {
+ this->stateFlags3 |= PLAYER_STATE3_2000;
+ }
+ if (var_v1 < 0) {
+ this->stateFlags3 |= PLAYER_STATE3_40000;
+ }
+
+ this->unk_AE7 = var_v1;
+ this->unk_AE8 = 9999;
+ Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20);
+ } else if (this->unk_ABC < 0.0f) {
+ func_80856074(play, this);
+ }
+ }
+
+ if (this->unk_ABC < -1500.0f) {
+ this->stateFlags3 |= PLAYER_STATE3_100;
+ if (this->unk_B86[0] < 8) {
+ this->unk_B86[0]++;
+ if (this->unk_B86[0] == 8) {
+ func_8082E1F0(this, NA_SE_PL_DEKUNUTS_BUD);
+ }
+ }
+ }
+}
+
+void func_808566C0(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex, f32 arg3, f32 arg4, f32 arg5,
+ s32 life) {
+ Color_RGBA8 primColor = { 255, 200, 200, 0 };
+ Color_RGBA8 envColor = { 255, 255, 0, 0 };
+ static Vec3f D_8085D940 = { 0.0f, 0.3f, 0.0f };
+ static Vec3f D_8085D94C = { 0.0f, -0.025f, 0.0f };
+ Vec3f pos;
+ s32 scale;
+ f32 sp34;
+ Vec3f* temp_v0;
+
+ if (Rand_ZeroOne() < 0.5f) {
+ sp34 = -1.0f;
+ } else {
+ sp34 = 1.0f;
+ }
+
+ D_8085D940.x = (Rand_ZeroFloat(arg4) + arg3) * sp34;
+ D_8085D94C.x = arg5 * sp34;
+ if (Rand_ZeroOne() < 0.5f) {
+ sp34 = -1.0f;
+ } else {
+ sp34 = 1.0f;
+ }
+
+ temp_v0 = &this->bodyPartsPos[bodyPartIndex];
+ D_8085D940.z = (Rand_ZeroFloat(arg4) + arg3) * sp34;
+ D_8085D94C.z = arg5 * sp34;
+ pos.x = temp_v0->x;
+ pos.y = Rand_ZeroFloat(15.0f) + temp_v0->y;
+ pos.z = temp_v0->z;
+ if (Rand_ZeroOne() < 0.5f) {
+ scale = 2000;
+ } else {
+ scale = -150;
+ }
+
+ EffectSsKirakira_SpawnDispersed(play, &pos, &D_8085D940, &D_8085D94C, &primColor, &envColor, scale, life);
+}
+
+void func_8085687C(Player* this) {
+}
+
+s32 func_80856888(f32* arg0, f32 arg1, f32 arg2) {
+ if (arg2 != 0.0f) {
+ if (arg1 < *arg0) {
+ arg2 = -arg2;
+ }
+
+ *arg0 += arg2;
+ if (((*arg0 - arg1) * arg2) >= 0.0f) {
+ *arg0 = arg1;
+ return true;
+ }
+ } else if (arg1 == *arg0) {
+ return true;
+ }
+
+ return false;
+}
+
+f32 D_8085D958[] = { 600.0f, 960.0f };
+Vec3f D_8085D960 = { -30.0f, 50.0f, 0.0f };
+Vec3f D_8085D96C = { 30.0f, 50.0f, 0.0f };
+
+// Flying as Deku?
+void func_80856918(Player* this, PlayState* play) {
+ if ((this->boomerangActor != NULL) && (this->boomerangActor->update == NULL)) {
+ this->boomerangActor = NULL;
+ }
+
+ if (func_80838A90(this, play)) {
+ return;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ func_80837134(play, this);
+ return;
+ }
+
+ if ((this->actor.velocity.y > 0.0f) && (this->stateFlags3 & PLAYER_STATE3_200)) {
+ this->actor.terminalVelocity = -20.0f;
+ this->actor.gravity = -5.5f;
+ Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20);
+ func_80856110(play, this, 0.0f, 0.0f, -1.0f, 500, 0, 8);
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) {
+ func_80833AA0(this, play);
+ }
+ } else if (!(this->stateFlags3 & PLAYER_STATE3_2000)) {
+ func_80833AA0(this, play);
+ } else if (this->stateFlags3 & PLAYER_STATE3_200) {
+ if (this->actor.velocity.y < 0.0f) {
+ if (this->unk_AE7 < 0) {
+ func_80833AA0(this, play);
+ } else {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (this->skelAnime.curFrame > 6.0f) {
+ this->actor.velocity.y = 6.0f;
+ this->stateFlags3 &= ~PLAYER_STATE3_200;
+ this->stateFlags3 |= PLAYER_STATE3_1000000;
+ func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN);
+ func_8019FD90(4, 2);
+ }
+ }
+ }
+
+ this->actor.terminalVelocity = -10.0f;
+ this->actor.gravity = -0.5f;
+ Player_ResetCylinder(this);
+ } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) {
+ func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish);
+ } else {
+ s16 temp_a0;
+ f32 temp_fv1;
+ s16 sp76;
+ s16 var_v1;
+ s16 var_a1;
+ f32 sp6C;
+ f32 sp68;
+ s16 sp66;
+ s16 temp_ft0;
+ s32 temp;
+ s16 var_v1_4;
+
+ this->linearVelocity = sqrtf(SQXZ(this->actor.velocity));
+ if (this->linearVelocity != 0.0f) {
+ var_a1 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
+
+ temp_a0 = this->actor.shape.rot.y - var_a1;
+ if (ABS_ALT(temp_a0) > 0x4000) {
+ this->linearVelocity = -this->linearVelocity;
+ var_a1 = var_a1 + 0x8000;
+ }
+ this->currentYaw = var_a1;
+ }
+
+ if (this->windSpeed != 0.0f) {
+ Math_SmoothStepToS(&this->unk_B8C, this->windAngleX, 3, 0x1F40, 0x190);
+ }
+
+ func_8085687C(this);
+
+ if (this->unk_AE8 != 0) {
+ this->unk_AE8--;
+ }
+
+ temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0);
+ PlayerAnimation_Update(play, &this->skelAnime);
+
+ if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) {
+ sp76 = 0x1770;
+ if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) {
+ func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) {
+ s32 i;
+
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D960,
+ &this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND]);
+ Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D96C,
+ &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND]);
+
+ for (i = 0; i < 13; i++) {
+ func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.6f, 1.0f, 0.8f, 17);
+ func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.6f, 1.0f, 0.8f, 17);
+ }
+ }
+ } else if ((this->unk_AE8 == 0) || (temp_fv1 < 0.0f)) {
+ sp76 = 0;
+ func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish);
+ } else {
+ sp76 = 0x1770 - (s32)((300.0f - temp_fv1) * 10.0f);
+
+ if (this->skelAnime.animation != &gPlayerAnim_pn_batabata) {
+ func_8082E55C(play, this, &gPlayerAnim_pn_batabata);
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) {
+ Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_STRUGGLE);
+ }
+ }
+
+ Math_AsymStepToS(&this->unk_B86[1], sp76, 0x190, 0x190);
+
+ this->unk_B8A += this->unk_B86[1];
+ temp = ABS_ALT(this->unk_B86[1]);
+ if (temp > 0xFA0) {
+ this->unk_B66 += (u8)(ABS_ALT(this->unk_B86[1]) * 0.01f);
+ }
+
+ if (this->unk_B66 > 200) {
+ this->unk_B66 -= 200;
+ func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.0f, 1.0f, 0.0f, 32);
+ func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.0f, 1.0f, 0.0f, 32);
+ }
+
+ func_8019FCB8(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f)));
+ if ((this->boomerangActor == NULL) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) {
+ if (AMMO(ITEM_NUT) == 0) {
+ play_sound(NA_SE_SY_ERROR);
+ } else {
+ this->boomerangActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x,
+ this->bodyPartsPos[PLAYER_BODYPART_WAIST].y,
+ this->bodyPartsPos[PLAYER_BODYPART_WAIST].z, -1, 0, 0, ARROW_TYPE_DEKU_NUT);
+ if (this->boomerangActor != NULL) {
+ this->boomerangActor->velocity.x = this->actor.velocity.x * 1.5f;
+ this->boomerangActor->velocity.z = this->actor.velocity.z * 1.5f;
+ Inventory_ChangeAmmo(ITEM_NUT, -1);
+ Actor_PlaySfx(this->boomerangActor, NA_SE_PL_DEKUNUTS_DROP_BOMB);
+ }
+ }
+ }
+
+ if (this->actor.velocity.y < 0.0f) {
+ if (sp76 != 0) {
+ this->actor.terminalVelocity = -0.38f;
+ this->actor.gravity = -0.2f;
+ } else {
+ this->actor.terminalVelocity = (this->unk_B86[1] * 0.0033f) + -20.0f;
+ this->actor.gravity = (this->unk_B86[1] * 0.00004f) + (REG(68) / 100.0f);
+ }
+ }
+
+ this->fallStartHeight = this->actor.world.pos.y;
+ func_80832F78(this, &sp6C, &sp66, 0.0f, play);
+ if (sp6C == 0.0f) {
+ sp68 = 0.1f;
+ } else {
+ s16 temp_v0_6 = this->currentYaw - sp66;
+
+ if (ABS_ALT(temp_v0_6) > 0x4000) {
+ sp6C = -sp6C;
+ sp66 += 0x8000;
+ }
+ sp68 = 0.25f;
+ }
+
+ Math_SmoothStepToS(&this->unk_B8C, sp6C * 600.0f, 8, 0xFA0, 0x64);
+ Math_ScaledStepToS(&this->currentYaw, sp66, 0xFA);
+
+ temp_ft0 = BINANG_SUB(sp66, this->currentYaw) * -2.0f;
+ temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40);
+ Math_SmoothStepToS(&this->unk_B8E, temp_ft0, 0x14, 0x320, 0x14);
+ sp6C = (sp6C * (this->unk_B86[1] * 0.0004f)) * fabsf(Math_SinS(this->unk_B8C));
+ func_80856888(&this->linearVelocity, sp6C, sp68);
+
+ sp6C = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y));
+ if (sp6C > 8.0f) {
+ sp6C = 8.0f / sp6C;
+ this->linearVelocity *= sp6C;
+ this->actor.velocity.y *= sp6C;
+ }
+ }
+
+ func_808378FC(play, this);
+}
+
+// Deku spinning related
+void func_808573A4(Player* this, PlayState* play) {
+ this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40;
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+ Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30);
+
+ if (!func_80838A90(this, play)) {
+ s16 prevYaw = this->currentYaw;
+ f32 sp40;
+ s16 sp3E;
+
+ func_80832F78(this, &sp40, &sp3E, 0.018f, play);
+ sp40 *= 1.0f - (0.9f * ((11100.0f - this->unk_B10[0]) / 11100.0f));
+ if (!func_8083A4A4(this, &sp40, &sp3E, REG(43) / 100.0f)) {
+ func_8083CB58(this, sp40, sp3E);
+ }
+
+ this->unk_B10[0] += -800.0f;
+ this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw));
+
+ if (Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0])) {
+ this->actor.shape.rot.y = this->currentYaw;
+ func_8083B2E4(this, play);
+ } else if (this->skelAnime.animation == &gPlayerAnim_pn_attack) {
+ this->stateFlags3 |= PLAYER_STATE3_100000;
+
+ if (this->unk_B10[1] < 0.0f) {
+ func_8082E438(play, this, func_8082ED20(this));
+ }
+ }
+
+ func_808566C0(play, this, PLAYER_BODYPART_WAIST, 1.0f, 0.5f, 0.0f, 32);
+
+ if (this->unk_B10[0] > 9500.0f) {
+ func_8083F8A8(play, this, 2.0f, 1, 2.5f, 10, 18, true);
+ }
+
+ func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, 2.0f,
+ this->currentYaw, this->actor.floorPoly, this->actor.floorBgId);
+ func_800B8F98(&this->actor, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG));
+ }
+}
+
+void func_80857640(Player* this, f32 arg1, s32 arg2) {
+ func_80834CD0(this, arg1, NA_SE_VO_LI_SWORD_N);
+ Player_PlaySfx(this, NA_SE_PL_GORON_BALLJUMP);
+ Player_StopHorizontalMovement(this);
+ if (this->unk_AE8 < arg2) {
+ this->unk_AE8 = arg2;
+ }
+ this->unk_AE7 = 1;
+ this->unk_B48 = 1.0f;
+}
+
+void func_808576BC(PlayState* play, Player* this) {
+ s32 var_v0 = ((this->actor.velocity.z * Math_CosS(this->currentYaw)) +
+ (this->actor.velocity.x * Math_SinS(this->currentYaw))) *
+ 800.0f;
+
+ var_v0 -= this->unk_AE8;
+ var_v0 = ABS_ALT(var_v0);
+
+ if (var_v0 <= 0x7D0) {
+ return;
+ }
+
+ if (var_v0 > 0x1770) {
+ func_800B8F98(&this->actor, NA_SE_PL_GORON_SLIP - SFX_FLAG);
+ }
+
+ if (func_8083F8A8(play, this, 12.0f, -1 - (var_v0 >> 0xC), (var_v0 >> 0xA) + 1.0f, (var_v0 >> 7) + 160, 20, true)) {
+ Player_PlaySfx(this, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG)
+ ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG
+ : NA_SE_PL_ROLL_DUST - SFX_FLAG);
+ }
+}
+
+void func_808577E0(Player* this) {
+ f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f;
+
+ if (this->unk_ABC < temp_fa1) {
+ this->unk_B48 += 0.08f;
+ } else {
+ this->unk_B48 += -0.07f;
+ }
+
+ this->unk_B48 = CLAMP(this->unk_B48, -0.2f, 0.14f);
+ if (fabsf(this->unk_B48) < 0.12f) {
+ if (Math_StepUntilF(&this->unk_ABC, temp_fa1, this->unk_B48)) {
+ this->unk_B48 = 0.0f;
+ }
+ } else {
+ this->unk_ABC += this->unk_B48;
+ this->unk_ABC = CLAMP(this->unk_ABC, -0.7f, 0.3f);
+ }
+}
+
+s32 func_80857950(PlayState* play, Player* this) {
+ if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) ||
+ ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) {
+ Player_SetAction(play, this, func_80849FE0, 1);
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f,
+ ANIMMODE_ONCE, 0.0f);
+ Player_PlaySfx(this, NA_SE_PL_BALL_TO_GORON);
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_80857A44(PlayState* play, Player* this) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+
+ this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800;
+ this->unk_AE7 = 4;
+ this->actor.shape.shadowScale = 30.0f;
+ this->unk_AE8 = this->linearVelocity * 500.0f;
+ this->unk_B08 = this->linearVelocity;
+ this->unk_B0C = 0.0f;
+ this->actor.home.rot.y = this->currentYaw;
+
+ return true;
+ }
+
+ return false;
+}
+
+void func_80857AEC(PlayState* play, Player* this) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->unk_B0C += this->unk_B08 * 0.05f;
+
+ if (this->unk_B86[1] == 0) {
+ if (this->unk_AE7 == 1) {
+ this->unk_AE7 = 2;
+ Player_RequestQuakeAndRumble(play, this, NA_SE_PL_GORON_PUNCH);
+ play->actorCtx.unk2 = 4;
+ EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f);
+ this->unk_AE8 = 0;
+ this->unk_B08 = 0.0f;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 0, 0, 0, 0);
+ } else {
+ this->unk_AE7 = 4;
+ }
+ }
+
+ Player_AnimSfx_PlayFloorLand(this);
+ }
+}
+
+// Goron rolling related
+void func_80857BE8(Player* this, PlayState* play) {
+ if (func_80833058(play, this, D_8085D050, 0)) {
+ return;
+ }
+
+ if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) {
+ return;
+ }
+
+ this->stateFlags3 |= PLAYER_STATE3_1000;
+ func_808577E0(this);
+
+ if (!func_80857950(play, this)) {
+ f32 spE4 = 0.0f;
+ s16 spE2 = this->currentYaw;
+ u16 spE0;
+ s32 spDC;
+ s32 spD8;
+
+ if (func_80840A30(play, this, &this->unk_B08, (this->doorType == PLAYER_DOORTYPE_STAIRCASE) ? 0.0f : 12.0f)) {
+ if (func_80857BE8 != this->actionFunc) {
+ return;
+ }
+
+ this->linearVelocity *= 0.1f;
+ func_80834CD0(this, 10.0f, 0);
+ if (this->unk_B86[1] != 0) {
+ this->unk_B86[1] = 0;
+ this->unk_AE7 = 3;
+ }
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) {
+ s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000);
+ s16 temp_v2;
+ s32 var_a2 = ABS_ALT(temp_v0);
+
+ this->unk_B0C += this->unk_B08 * 0.05f;
+ temp_v2 = ((temp_v0 >= 0) ? 1 : -1) * ((var_a2 + 0x100) & ~0x1FF);
+ this->currentYaw += BINANG_SUB(0x8000, (s16)(temp_v2 * 2));
+ this->actor.home.rot.y = this->currentYaw;
+ this->actor.shape.rot.y = this->currentYaw;
+
+ this->unk_B8C = 4;
+ Player_PlaySfx(this, NA_SE_IT_GORON_ROLLING_REFLECTION);
+ }
+
+ this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40);
+
+ if (this->unk_B8E != 0) {
+ this->unk_B8E--;
+ } else {
+ func_80832F78(this, &spE4, &spE2, 0.0f, play);
+ spE4 *= 2.6f;
+ }
+
+ if (this->unk_B8C != 0) {
+ this->unk_B8C--;
+ spE2 = this->currentYaw;
+ }
+
+ if (this->unk_B86[1] != 0) {
+ spE4 = 18.0f;
+ Math_StepToC(&this->unk_AE7, 4, 1);
+
+ if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) ||
+ (gSaveContext.save.saveInfo.playerData.magic == 0) ||
+ ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) {
+ if (Math_StepToS(&this->unk_B86[1], 0, 1)) {
+ this->stateFlags3 &= ~PLAYER_STATE3_80000;
+ Magic_Reset(play);
+ Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED);
+ }
+ this->unk_AE7 = 4;
+ } else if (this->unk_B86[1] < 7) {
+ if (!(this->stateFlags3 & PLAYER_STATE3_80000)) {
+ this->unk_3D0.unk_00 = 2;
+ }
+ this->unk_B86[1]++;
+ }
+ }
+
+ spDC = spE4 * 900.0f;
+
+ Math_AsymStepToF(&this->unk_B10[0], (this->unk_B8A != 0) ? 1.0f : 0.0f, 0.8f, 0.05f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ func_80857AEC(play, this);
+ if (this->unk_AE7 == 2) {
+ if (this->unk_B8A == 0) {
+ this->unk_AE7 = 4;
+ } else {
+ this->unk_B8A--;
+ this->unk_ABC = 0.0f;
+ this->unk_B48 = 0.14f;
+ }
+ } else if ((this->unk_B86[1] == 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) &&
+ (Inventory_GetBtnBItem(play) < ITEM_FD)) {
+ func_80857640(this, 14.0f, 0x1F40);
+ } else {
+ f32 spCC;
+ s16 spCA;
+ s16 spC8;
+ s32 var_a0;
+ s32 spC0;
+ f32 spBC;
+ f32 spB8;
+ f32 spB4;
+ f32 spB0;
+ f32 spAC;
+ f32 spA8;
+ f32 spA4;
+ f32 spA0;
+ Vec3f slopeNormal;
+ s16 downwardSlopeYaw;
+ s16 sp90 = this->currentYaw;
+ s16 sp8E = this->currentYaw - this->actor.home.rot.y;
+ f32 sp88 = Math_CosS(sp8E);
+
+ if (this->unk_B86[1] == 0) {
+ this->unk_B0C = 0.0f;
+ if (this->unk_AE7 >= 0x36) {
+ Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA);
+ this->unk_B08 = 18.0f;
+ this->unk_B86[1] = 1;
+ this->stateFlags3 |= PLAYER_STATE3_80000;
+ func_8082E1F0(this, NA_SE_PL_GORON_BALL_CHARGE_DASH);
+ }
+ } else {
+ this->unk_B0C = CLAMP(this->unk_B0C, 0.0f, 0.9f);
+ }
+
+ spBC = (1.0f - this->unk_B0C) * this->unk_B08 * sp88;
+ if ((spBC < 0.0f) || ((spE4 == 0.0f) && (ABS_ALT(sp8E) > 0xFA0))) {
+ spBC = 0.0f;
+ }
+
+ Math_StepToF(&this->unk_B0C, 0.0f, fabsf(sp88) * 20.0f);
+ var_a0 = spBC * 500.0f;
+ var_a0 = CLAMP_MIN(var_a0, 0);
+
+ spC0 = (s32)(spE4 * 400.0f) - var_a0;
+ spC0 = CLAMP_MIN(spC0, 0);
+
+ spDC = CLAMP_MIN(spDC, var_a0);
+
+ spAC = spBC * Math_SinS(this->actor.home.rot.y);
+ spA8 = spBC * Math_CosS(this->actor.home.rot.y);
+ spB4 = this->unk_B08 * Math_SinS(this->currentYaw);
+ spB0 = this->unk_B08 * Math_CosS(this->currentYaw);
+
+ spA4 = spB4 - spAC;
+ spA0 = spB0 - spA8;
+ this->linearVelocity = spBC;
+ this->currentYaw = this->actor.home.rot.y;
+ spCC = spE4;
+ spCA = spE2;
+
+ if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) {
+ if (this->unk_B86[1] == 0) {
+ this->unk_AE7 = 4;
+ }
+
+ if (this->unk_AE7 == 4) {
+ spDC = -0xFA0;
+ }
+ } else {
+ static Vec3f D_8085D978 = { -30.0f, 60.0f, 0.0f };
+ static Vec3f D_8085D984 = { 30.0f, 60.0f, 0.0f };
+ f32 sp84 = (((this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) ||
+ (this->floorSfxOffset == NA_SE_PL_WALK_ICE - SFX_FLAG) ||
+ (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG) ||
+ (sPlayerCurrentFloorType == FLOOR_TYPE_5)) &&
+ (spC0 >= 0x7D0))
+ ? 0.08f
+ : this->unk_AE8 * 0.0003f;
+ f32 sp80 = (Math_SinS(this->unk_B6C) * 8.0f) + 0.6f;
+ s16 var_a3;
+ s16 sp7C;
+ Vec3f sp70;
+ f32 sp6C;
+ f32 var_fa1;
+
+ if (this->unk_B86[1] == 0) {
+ if ((gSaveContext.magicState == MAGIC_STATE_IDLE) &&
+ (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) {
+ this->unk_AE7++;
+ func_800B8F98(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG);
+ } else {
+ this->unk_AE7 = 4;
+ }
+ }
+
+ if (spE4 != spCC) {
+ this->currentYaw = spE2;
+ }
+
+ sp84 = CLAMP_MIN(sp84, 0.0f);
+ sp80 = CLAMP_MIN(sp80, 0.0f);
+
+ Math_AsymStepToF(&this->linearVelocity, spE4, sp84, sp80);
+ spC8 = (s16)(fabsf(this->actor.speed) * 20.0f) + 300;
+ spC8 = CLAMP_MIN(spC8, 100);
+
+ sp7C = (s32)(BINANG_SUB(spE2, this->currentYaw) * -0.5f);
+ this->unk_B0C += (f32)(SQ(sp7C)) * 8e-9f;
+ Math_ScaledStepToS(&this->currentYaw, spE2, spC8);
+ sp6C = func_80835D2C(play, this, &D_8085D978, &sp70);
+
+ var_fa1 = func_80835D2C(play, this, &D_8085D984, &sp70) - sp6C;
+ if (fabsf(var_fa1) > 100.0f) {
+ var_fa1 = 0.0f;
+ }
+
+ var_a3 = Math_Atan2S_XY(60.0f, var_fa1);
+ if (ABS_ALT(var_a3) > 0x2AAA) {
+ var_a3 = 0;
+ }
+
+ Math_ScaledStepToS(&this->actor.shape.rot.z, var_a3 + sp7C, spC8);
+ }
+
+ spBC = this->linearVelocity;
+ this->actor.home.rot.y = this->currentYaw;
+ this->currentYaw = sp90;
+ Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw);
+
+ spB8 = sqrtf(SQ(spA4) + SQ(spA0));
+ if (this->unk_B86[1] != 0) {
+ if ((ABS_ALT(sp8E) + ABS_ALT(this->unk_B6C)) > 15000) {
+ this->unk_B86[1] = 0;
+ this->unk_AE7 = 4;
+ this->unk_B8E = 0x14;
+ this->unk_AE8 = 0;
+ this->stateFlags3 &= ~PLAYER_STATE3_80000;
+ Magic_Reset(play);
+ }
+ } else {
+ f32 temp_ft4_2 = (0.6f * slopeNormal.x) + spA4;
+ f32 temp_ft5 = (0.6f * slopeNormal.z) + spA0;
+ f32 temp_fv0_3 = sqrtf(SQ(temp_ft4_2) + SQ(temp_ft5));
+
+ if ((temp_fv0_3 < spB8) || (temp_fv0_3 < 6.0f)) {
+ spA4 = temp_ft4_2;
+ spA0 = temp_ft5;
+ spB8 = temp_fv0_3;
+ }
+ }
+
+ if (spB8 != 0.0f) {
+ f32 pad;
+ f32 sp54 = spB8 - 0.3f;
+
+ sp54 = CLAMP_MIN(sp54, 0.0f);
+
+ spB8 = sp54 / spB8;
+
+ spA4 *= spB8;
+ spA0 *= spB8;
+
+ if (sp54 != 0.0f) {
+ this->unk_B28 = Math_Atan2S_XY(spA0, spA4);
+ }
+
+ if (this->unk_AE8 == 0) {
+ s32 temp_v0_10 = this->unk_B86[0];
+ s32 temp_ft3_2 = sp54 * 800.0f;
+
+ this->unk_B86[0] += (s16)temp_ft3_2;
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (temp_ft3_2 != 0) &&
+ (((temp_v0_10 + temp_ft3_2) * temp_v0_10) <= 0)) {
+ spE0 = Player_GetFloorSfx(this, NA_SE_PL_GORON_ROLL);
+ func_8019F780(&this->actor.projectedPos, spE0, sp54);
+ }
+ }
+ }
+
+ spAC = Math_SinS(this->actor.home.rot.y) * spBC;
+ spA8 = Math_CosS(this->actor.home.rot.y) * spBC;
+
+ spB4 = spAC + spA4;
+ spB0 = spA8 + spA0;
+
+ this->unk_B08 = sqrtf(SQ(spB4) + SQ(spB0));
+ this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f);
+
+ this->currentYaw = Math_Atan2S_XY(spB0, spB4);
+ }
+
+ func_808576BC(play, this);
+
+ if (ABS_ALT(this->unk_AE8) > 0xFA0) {
+ this->stateFlags2 |= PLAYER_STATE2_8;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->linearVelocity = this->unk_B08 * Math_CosS(this->unk_B6C);
+ this->actor.velocity.y = this->unk_B08 * Math_SinS(this->unk_B6C);
+ }
+
+ if ((this->unk_B86[1] != 0) ||
+ SurfaceType_HasMaterialProperty(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId,
+ MATERIAL_PROPERTY_SOFT_IMPRINT)) {
+ func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos,
+ 15.0f, this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId);
+ } else {
+ func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2]));
+ }
+ } else {
+ Math_ScaledStepToS(&this->actor.shape.rot.z, 0, 0x190);
+
+ this->unk_B86[0] = 0;
+ if (this->unk_B86[1] != 0) {
+ this->actor.gravity = -1.0f;
+ Math_ScaledStepToS(&this->actor.home.rot.y, spE2, 0x190);
+
+ this->unk_B08 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)) *
+ ((this->linearVelocity >= 0.0f) ? 1.0f : -1.0f);
+ this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f);
+ } else {
+ this->unk_B48 += this->actor.velocity.y * 0.005f;
+ if (this->unk_AE7 == 1) {
+ if (this->actor.velocity.y > 0.0f) {
+ if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) {
+ this->actor.velocity.y = -this->actor.gravity;
+ }
+ } else {
+ this->unk_B8A = 0xA;
+ if (this->actor.velocity.y > -1.0f) {
+ this->actor.gravity = -0.2f;
+ } else {
+ this->unk_3D0.unk_00 = 1;
+ this->actor.gravity = -10.0f;
+ }
+ }
+ }
+ this->unk_B08 = this->linearVelocity;
+ }
+
+ func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2]));
+ }
+
+ Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0);
+
+ Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0);
+
+ if (this->unk_AE8 != 0) {
+ spD8 = this->actor.shape.rot.x;
+ this->actor.shape.rot.x += this->unk_AE8;
+
+ Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8));
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) {
+ spE0 =
+ Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL);
+ func_8019F780(&this->actor.projectedPos, spE0, this->unk_B08);
+ }
+ }
+
+ if (this->unk_AE7 == 2) {
+ Player_SetCylinderForAttack(this, DMG_GORON_POUND, 4, 60);
+ Actor_SetPlayerImpact(play, PLAYER_IMPACT_GORON_GROUND_POUND, 2, 100.0f, &this->actor.world.pos);
+ } else if (this->unk_B86[1] != 0) {
+ Player_SetCylinderForAttack(this, DMG_GORON_SPIKES, 1, 25);
+ } else {
+ Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 25);
+ }
+ }
+}
+
+void func_80858C84(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_8082E784(this);
+ func_8082E438(play, this, anim);
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80858CC8(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_8082E784(this);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE,
+ -8.0f);
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80858D48(PlayState* play, Player* this, PlayerAnimationHeader* anim) {
+ func_8082E784(this);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f);
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80858DB4(PlayState* play, Player* this, void* anim) {
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80858DDC(PlayState* play, Player* this, void* anim) {
+ func_80858C84(play, this, anim);
+}
+
+void func_80858DFC(PlayState* play, Player* this, void* anim) {
+ func_8082E784(this);
+ func_8082E5A8(play, this, anim);
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80858E40(PlayState* play, Player* this, void* anim) {
+ func_80858CC8(play, this, anim);
+}
+
+void func_80858E60(PlayState* play, Player* this, void* anim) {
+ func_80858D48(play, this, anim);
+}
+
+void func_80858E80(PlayState* play, Player* this, void* anim) {
+ func_8082EA60(play, this, anim);
+}
+
+void func_80858EA0(PlayState* play, Player* this, void* anim) {
+ func_8082EA10(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+}
+
+void func_80858EC0(PlayState* play, Player* this, void* anim) {
+ Player_AnimationPlayOnceReverse(play, this, anim);
+ func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+}
+
+void func_80858EFC(PlayState* play, Player* this, void* anim) {
+ func_8082EB18(play, this, anim);
+}
+
+void func_80858F1C(PlayState* play, Player* this, void* anim) {
+ func_8082EAC8(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80);
+}
+
+void func_80858F3C(PlayState* play, Player* this, void* anim) {
+ Player_AnimationPlayOnce(play, this, anim);
+}
+
+void func_80858F5C(PlayState* play, Player* this, void* anim) {
+ Player_AnimationPlayLoop(play, this, anim);
+}
+
+void func_80858F7C(PlayState* play, Player* this, void* anim) {
+ func_8082DB90(play, this, anim);
+}
+
+void func_80858F9C(PlayState* play, Player* this, void* anim) {
+ func_8082DB60(play, this, anim);
+}
+
+void func_80858FBC(PlayState* play, Player* this, void* anim) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+}
+
+void func_80858FE8(Player* this) {
+ if (this->skelAnime.animation == &gPlayerAnim_lost_horse_wait) {
+ Player_AnimSfx_PlayFloor(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG);
+ Player_PlaySfx(this, NA_SE_VO_LK_DRAGGED_DAMAGE - SFX_FLAG);
+ }
+}
+
+void (*D_8085D990[])(PlayState*, Player*, void*) = {
+ /* 0 */ NULL,
+ /* 1 */ func_80858DB4,
+ /* 2 */ func_80858DDC,
+ /* 3 */ func_80858E40,
+ /* 4 */ func_80858E60,
+ /* 5 */ func_80858E80,
+ /* 6 */ func_80858EA0,
+ /* 7 */ func_80858EFC,
+ /* 8 */ func_80858F1C,
+ /* 9 */ func_80858F3C,
+ /* 10 */ func_80858F5C,
+ /* 11 */ func_80858FBC,
+ /* 12 */ func_80859028,
+ /* 13 */ func_808591BC,
+ /* 14 */ func_80858DFC,
+ /* 15 */ func_80858F7C,
+ /* 16 */ func_80858F9C,
+ /* 17 */ func_80859168,
+ /* 18 */ func_80859210,
+ /* 19 */ func_80858EC0,
+};
+
+AnimSfxEntry D_8085D9E0[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 34, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 45, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 51, NA_SE_PL_CALM_HIT, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 64, NA_SE_PL_CALM_HIT, STOP),
+};
+AnimSfxEntry D_8085D9F0[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 7, NA_SE_VO_LI_DEMO_DAMAGE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 18, NA_SE_PL_BOUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_FREEZE, STOP),
+};
+AnimSfxEntry D_8085D9FC[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 14, NA_SE_PL_LAND_GROUND, STOP),
+};
+AnimSfxEntry D_8085DA00[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_GET_UP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_VO_LK_WAKE_UP, STOP),
+};
+AnimSfxEntry D_8085DA08[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 26, NA_SE_PL_LAND_GROUND, STOP),
+};
+AnimSfxEntry D_8085DA0C[] = {
+ ANIMSFX(ANIMSFX_TYPE_8, 16, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 36, NA_SE_NONE, STOP),
+};
+AnimSfxEntry D_8085DA14[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 55, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 55, NA_SE_VO_LK_CATCH_DEMO, STOP),
+};
+AnimSfxEntry D_8085DA1C[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 16, NA_SE_PL_BOUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 16, NA_SE_VO_LI_DAMAGE_S, STOP),
+};
+AnimSfxEntry D_8085DA28[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 28, NA_SE_PL_LAND_GROUND, STOP),
+};
+AnimSfxEntry D_8085DA2C[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 1, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 42, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 44, NA_SE_VO_LI_FALL_L, STOP),
+};
+AnimSfxEntry D_8085DA38[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 1, NA_SE_PL_BOUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_DAMAGE_S, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 39, NA_SE_PL_LAND_GROUND, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 49, NA_SE_NONE, STOP),
+};
+
+// gPlayerAnim_cl_nigeru
+AnimSfxEntry D_8085DA48[] = {
+ ANIMSFX(ANIMSFX_TYPE_6, 1, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 5, NA_SE_NONE, STOP),
+};
+AnimSfxEntry D_8085DA50[] = {
+ ANIMSFX(ANIMSFX_TYPE_6, 10, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 13, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 16, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 19, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 22, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 22, NA_SE_PL_SLIP, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 55, NA_SE_VO_LI_DAMAGE_S, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 62, NA_SE_NONE, STOP),
+};
+
+AnimSfxEntry D_8085DA70[] = {
+ ANIMSFX(ANIMSFX_TYPE_6, 42, NA_SE_NONE, CONTINUE),
+ ANIMSFX(ANIMSFX_TYPE_6, 48, NA_SE_NONE, STOP),
+};
+AnimSfxEntry D_8085DA78[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR, 2, NA_SE_PL_BOUND, STOP),
+};
+AnimSfxEntry D_8085DA7C[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_FREEZE, STOP),
+};
+AnimSfxEntry D_8085DA80[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_FALL_L, STOP),
+};
+AnimSfxEntry D_8085DA84[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_HANG, STOP),
+};
+AnimSfxEntry D_8085DA88[] = {
+ ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 26, NA_SE_NONE, STOP),
+};
+AnimSfxEntry D_8085DA8C[] = {
+ ANIMSFX(ANIMSFX_TYPE_VOICE, 4, NA_SE_VO_LI_SURPRISE, STOP),
+};
+AnimSfxEntry D_8085DA90[] = {
+ ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_PL_SIT_ON_HORSE, STOP),
+};
+
+void func_80859028(PlayState* play, Player* this, void* anim) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80858D48(play, this, anim);
+ this->unk_AE8 = 1;
+ }
+
+ if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) {
+ Player_PlayAnimSfx(this, D_8085DA08);
+ } else if (this->skelAnime.animation == &gPlayerAnim_lost_horse) {
+ Player_PlayAnimSfx(this, D_8085DA14);
+ } else if (this->skelAnime.animation == &gPlayerAnim_sirimochi) {
+ Player_PlayAnimSfx(this, D_8085DA38);
+ } else if (this->skelAnime.animation == &gPlayerAnim_alink_somukeru) {
+ Player_PlayAnimSfx(this, D_8085DA7C);
+ } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa) {
+ Player_PlayAnimSfx(this, D_8085DA84);
+ } else if (this->skelAnime.animation == &gPlayerAnim_cl_umanoru) {
+ Player_PlayAnimSfx(this, D_8085DA90);
+ } else {
+ func_80858FE8(this);
+ }
+}
+
+void func_80859168(PlayState* play, Player* this, void* anim) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082E794(this);
+ func_8082DB60(play, this, anim);
+ }
+}
+
+void func_808591BC(PlayState* play, Player* this, void* anim) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082EB18(play, this, anim);
+ this->unk_AE8 = 1;
+ }
+}
+
+void func_80859210(PlayState* play, Player* this, void* arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ Player_PlayAnimSfx(this, arg2);
+}
+
+void func_80859248(Player* this) {
+ if ((this->unk_398 == NULL) || (this->unk_398->update == NULL)) {
+ this->unk_398 = NULL;
+ }
+ this->targetedActor = this->unk_398;
+ if (this->unk_398 != NULL) {
+ this->actor.shape.rot.y = func_8083C62C(this, 0);
+ }
+}
+
+void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ this->stateFlags1 |= PLAYER_STATE1_8000000;
+ this->stateFlags2 |= PLAYER_STATE2_400;
+ this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000);
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim);
+ this->linearVelocity = 0.0f;
+}
+
+void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) {
+ this->actor.gravity = 0.0f;
+
+ if (this->unk_AE7 == 0) {
+ if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) {
+ this->unk_AE7 = 1;
+ } else {
+ func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y));
+ Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320);
+ func_8084748C(this, &this->actor.velocity.y, 4.0f, this->currentYaw);
+ }
+ } else {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE7 == 1) {
+ func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait);
+ } else {
+ Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait);
+ }
+ }
+ func_808475B4(this);
+ func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y);
+ }
+}
+
+void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_80859248(this);
+
+ if (func_801242B4(this)) {
+ func_80859300(play, this, 0);
+ } else {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) {
+ func_8083216C(this, play);
+ } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) {
+ func_8083D23C(this, play);
+ }
+ }
+}
+
+void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ func_8085929C(play, this, 0);
+ } else {
+ PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType];
+
+ if ((this->unk_396 == 6) || (this->unk_396 == 0x2E)) {
+ Player_AnimationPlayOnce(play, this, anim);
+ } else {
+ func_8082E784(this);
+ PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim),
+ ANIMMODE_LOOP, -4.0f);
+ }
+ Player_StopHorizontalMovement(this);
+ }
+}
+
+void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (func_80847880(play, this)) {
+ return;
+ }
+
+ if ((this->csMode == PLAYER_CSMODE_20) && (play->csCtx.state == CS_STATE_IDLE)) {
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
+ } else if (this->stateFlags1 & PLAYER_STATE1_8000000) {
+ func_80859300(play, this, 0);
+ this->actor.velocity.y = 0.0f;
+ } else {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) {
+ func_8083216C(this, play);
+ }
+ }
+}
+
+void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (this->actor.id == ACTOR_EN_TEST3) {
+ func_80838830(this, OBJECT_GI_MSSA);
+ this->stateFlags1 |= PLAYER_STATE1_400;
+ }
+
+ func_8082DB90(play, this,
+ (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA : &gPlayerAnim_link_demo_get_itemA);
+}
+
+void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) {
+ this->getItemDrawIdPlusOne = GID_MASK_SUN + 1;
+ Message_BombersNotebookQueueEvent(play, 0x1B);
+ Audio_PlayFanfare(NA_BGM_GET_NEW_MASK);
+ }
+}
+
+void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ f32 linearVelocity;
+ s16 yaw;
+
+ this->stateFlags1 &= ~PLAYER_STATE1_2000000;
+
+ yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0);
+ linearVelocity = this->linearVelocity;
+ this->actor.world.rot.y = yaw;
+ this->actor.shape.rot.y = yaw;
+ this->currentYaw = yaw;
+ if (linearVelocity <= 0.0f) {
+ this->linearVelocity = 0.1f;
+ } else if (linearVelocity > 2.5f) {
+ this->linearVelocity = 2.5f;
+ }
+
+ if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) {
+ R_PLAY_FILL_SCREEN_ON = 45;
+ R_PLAY_FILL_SCREEN_R = 255;
+ R_PLAY_FILL_SCREEN_G = 255;
+ R_PLAY_FILL_SCREEN_B = 255;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ play_sound(NA_SE_SY_WHITE_OUT_T);
+ }
+}
+
+void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2) {
+ f32 sp24;
+
+ if (R_PLAY_FILL_SCREEN_ON > 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA > 255) {
+ R_PLAY_FILL_SCREEN_ON = -64;
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+ gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
+ this->actor.update = func_8012301C;
+ this->actor.draw = NULL;
+ this->unk_AE7 = 0;
+ }
+ } else if (R_PLAY_FILL_SCREEN_ON < 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
+ R_PLAY_FILL_SCREEN_ON = 0;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ }
+ } else {
+ sp24 = 2.5f;
+ func_808411D4(play, this, &sp24, 0xA);
+ this->unk_AE8++;
+ if (this->unk_AE8 >= 0x15) {
+ this->csMode = PLAYER_CSMODE_10;
+ }
+ }
+}
+
+void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2) {
+ this->linearVelocity = 2.5f;
+ func_80835BF8(&this->actor.world.pos, this->actor.shape.rot.y, 180.0f, &this->unk_3A0);
+}
+
+void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2) {
+ f32 sp1C = 2.5f;
+
+ func_808411D4(play, this, &sp1C, 0xA);
+}
+
+void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_8083B23C(this, play);
+}
+
+void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_80859248(this);
+ if (this->unk_AE8 != 0) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ Player_AnimationPlayLoop(play, this, func_8082EF54(this));
+ this->unk_AE8 = 0;
+ }
+ func_8082FC60(this);
+ } else {
+ func_8083E958(play, this);
+ }
+}
+
+void func_80859AD0(PlayState* play, Player* this, UNK_PTR arg2) {
+ func_80840F90(play, this, arg2, 0.0f, 0, 0);
+}
+
+void func_80859AF8(PlayState* play, Player* this, UNK_PTR arg2) {
+ this->actor.shape.face = 0xF;
+ func_80840F90(play, this, arg2, 0.0f, 0, 0);
+}
+
+void func_80859B28(PlayState* play, Player* this, UNK_PTR arg2) {
+ func_80840F90(play, this, arg2, 0.0f, 0, 1);
+}
+
+void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_80858CC8(play, this, &gPlayerAnim_link_normal_okarina_start);
+ this->itemAction = PLAYER_IA_OCARINA;
+ Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
+}
+
+void Player_Cutscene_Translate(PlayState* play, Player* this, CsCmdActorCue* playerAction) {
+ f32 startX = playerAction->startPos.x;
+ f32 startY = playerAction->startPos.y;
+ f32 startZ = playerAction->startPos.z;
+ f32 diffX = playerAction->endPos.x - startX;
+ f32 diffY = playerAction->endPos.y - startY;
+ f32 diffZ = playerAction->endPos.z - startZ;
+ f32 progress = (((f32)(play->csCtx.curFrame - playerAction->startFrame)) /
+ ((f32)(playerAction->endFrame - playerAction->startFrame)));
+
+ this->actor.world.pos.x = (diffX * progress) + startX;
+ this->actor.world.pos.y = (diffY * progress) + startY;
+ this->actor.world.pos.z = (diffZ * progress) + startZ;
+}
+
+void func_80859C60(PlayState* play, Player* this, void* arg2) {
+ if (arg2 != NULL) {
+ Player_Cutscene_Translate(play, this, arg2);
+ }
+
+ PlayerAnimation_Update(play, &this->skelAnime);
+}
+
+void func_80859CA0(PlayState* play, Player* this, s32 arg2) {
+ func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]);
+ Player_StopHorizontalMovement(this);
+}
+
+void func_80859CE0(PlayState* play, Player* this, s32 arg2) {
+ this->actor.draw = Player_Draw;
+}
+
+void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_80841358(play, this, false);
+ func_8082DB90(play, this, &gPlayerAnim_link_demo_return_to_past);
+}
+
+void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+}
+
+struct_8085DA94 D_8085DA94[PLAYER_CSMODE_MAX] = {
+ /* PLAYER_CSMODE_0 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_1 */ { -1, { func_808594D0 } },
+ /* PLAYER_CSMODE_2 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_3 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_4 */ { 3, { &gPlayerAnim_link_demo_bikkuri } },
+ /* PLAYER_CSMODE_5 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_END */ { 0, { NULL } },
+ /* PLAYER_CSMODE_WAIT */ { -1, { func_808594D0 } },
+ /* PLAYER_CSMODE_8 */ { 2, { &gPlayerAnim_link_demo_furimuki } },
+ /* PLAYER_CSMODE_9 */ { -1, { func_8085978C } },
+ /* PLAYER_CSMODE_10 */ { 3, { &gPlayerAnim_link_demo_warp } },
+ /* PLAYER_CSMODE_11 */ { 5, { &gPlayerAnim_clink_demo_standup } },
+ /* PLAYER_CSMODE_12 */ { 7, { &gPlayerAnim_clink_demo_standup_wait } },
+ /* PLAYER_CSMODE_13 */ { 2, { &gPlayerAnim_link_demo_baru_op3 } },
+ /* PLAYER_CSMODE_14 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_15 */ { 3, { &gPlayerAnim_link_demo_jibunmiru } },
+ /* PLAYER_CSMODE_16 */ { -1, { func_80859B54 } },
+ /* PLAYER_CSMODE_17 */ { 2, { &gPlayerAnim_link_normal_okarina_end } },
+ /* PLAYER_CSMODE_18 */ { 16, { &gPlayerAnim_link_normal_hang_up_down } },
+ /* PLAYER_CSMODE_19 */ { -1, { func_80859CA0 } },
+ /* PLAYER_CSMODE_20 */ { -1, { func_808594D0 } },
+ /* PLAYER_CSMODE_21 */ { 3, { &gPlayerAnim_clink_demo_mimawasi } },
+ /* PLAYER_CSMODE_22 */ { 6, { &gPlayerAnim_om_get_mae } },
+ /* PLAYER_CSMODE_23 */ { 3, { &gPlayerAnim_link_demo_look_hand } },
+ /* PLAYER_CSMODE_24 */ { 3, { &gPlayerAnim_link_normal_wait_typeB_20f } },
+ /* PLAYER_CSMODE_25 */ { -1, { func_80859CFC } },
+ /* PLAYER_CSMODE_26 */ { -1, { func_8085A66C } },
+ /* PLAYER_CSMODE_27 */ { 3, { &gPlayerAnim_link_demo_zeldamiru } },
+ /* PLAYER_CSMODE_28 */ { 3, { &gPlayerAnim_link_demo_kenmiru1 } },
+ /* PLAYER_CSMODE_29 */ { 3, { &gPlayerAnim_link_demo_kenmiru2 } },
+ /* PLAYER_CSMODE_30 */ { 3, { &gPlayerAnim_link_demo_kenmiru2_modori } },
+ /* PLAYER_CSMODE_31 */ { 6, { &gameplay_keep_Linkanim_00D310 } },
+ /* PLAYER_CSMODE_32 */ { -1, { func_80859FCC } },
+ /* PLAYER_CSMODE_33 */ { 3, { &gPlayerAnim_demo_rakka } },
+ /* PLAYER_CSMODE_34 */ { 4, { &gPlayerAnim_demo_pikupiku } },
+ /* PLAYER_CSMODE_35 */ { 3, { &gameplay_keep_Linkanim_00D2B8 } },
+ /* PLAYER_CSMODE_36 */ { -1, { func_8085A120 } },
+ /* PLAYER_CSMODE_37 */ { -1, { func_8085A19C } },
+ /* PLAYER_CSMODE_38 */ { 6, { &gameplay_keep_Linkanim_00D278 } },
+ /* PLAYER_CSMODE_39 */ { 6, { &gameplay_keep_Linkanim_00D288 } },
+ /* PLAYER_CSMODE_40 */ { 5, { &gPlayerAnim_rakuba } },
+ /* PLAYER_CSMODE_41 */ { 5, { &gPlayerAnim_bajyo_furikaeru } },
+ /* PLAYER_CSMODE_42 */ { 5, { &gPlayerAnim_okiagaru } },
+ /* PLAYER_CSMODE_43 */ { 5, { &gPlayerAnim_okiagaru_tatu } },
+ /* PLAYER_CSMODE_44 */ { 7, { &gPlayerAnim_bajyo_walk } },
+ /* PLAYER_CSMODE_45 */ { 5, { &gPlayerAnim_rakka } },
+ /* PLAYER_CSMODE_46 */ { 5, { &gPlayerAnim_sirimochi } },
+ /* PLAYER_CSMODE_47 */ { 5, { &gPlayerAnim_spotlight } },
+ /* PLAYER_CSMODE_48 */ { 3, { &gPlayerAnim_al_hensin } },
+ /* PLAYER_CSMODE_49 */ { 5, { &gPlayerAnim_dl_jibunmiru } },
+ /* PLAYER_CSMODE_50 */ { 5, { &gPlayerAnim_vs_yousei } },
+ /* PLAYER_CSMODE_51 */ { 5, { &gPlayerAnim_urusai } },
+ /* PLAYER_CSMODE_52 */ { 5, { &gPlayerAnim_okarinatori } },
+ /* PLAYER_CSMODE_53 */ { 5, { &gPlayerAnim_lost_horse } },
+ /* PLAYER_CSMODE_54 */ { 4, { &gPlayerAnim_lost_horse_wait } },
+ /* PLAYER_CSMODE_55 */ { 5, { &gPlayerAnim_lost_horse2 } },
+ /* PLAYER_CSMODE_56 */ { 14, { &gPlayerAnim_okarinatori } },
+ /* PLAYER_CSMODE_57 */ { 5, { &gPlayerAnim_cl_tobikakaru } },
+ /* PLAYER_CSMODE_58 */ { -1, { func_8085978C } },
+ /* PLAYER_CSMODE_59 */ { 5, { &gameplay_keep_Linkanim_00D0A0 } },
+ /* PLAYER_CSMODE_60 */ { 2, { &gPlayerAnim_cl_furafura } },
+ /* PLAYER_CSMODE_61 */ { 7, { &gPlayerAnim_cl_nigeru } },
+ /* PLAYER_CSMODE_62 */ { 5, { &gPlayerAnim_cl_ononoki } },
+ /* PLAYER_CSMODE_63 */ { 3, { &gPlayerAnim_al_gaku } },
+ /* PLAYER_CSMODE_64 */ { 3, { &gPlayerAnim_al_fuwafuwa } },
+ /* PLAYER_CSMODE_65 */ { 3, { &gPlayerAnim_al_fuwafuwa_modori } },
+ /* PLAYER_CSMODE_66 */ { 3, { &gPlayerAnim_al_elf_tobidasi } },
+ /* PLAYER_CSMODE_67 */ { -1, { func_8085968C } },
+ /* PLAYER_CSMODE_68 */ { -1, { func_8085A24C } },
+ /* PLAYER_CSMODE_69 */ { -1, { func_8085A330 } },
+ /* PLAYER_CSMODE_70 */ { 7, { &gPlayerAnim_cl_tewofuru } },
+ /* PLAYER_CSMODE_71 */ { 5, { &gPlayerAnim_cl_jibun_miru } },
+ /* PLAYER_CSMODE_72 */ { 5, { &gPlayerAnim_cl_hoo } },
+ /* PLAYER_CSMODE_73 */ { 3, { &gPlayerAnim_al_yareyare } },
+ /* PLAYER_CSMODE_74 */ { 3, { &gPlayerAnim_al_yes } },
+ /* PLAYER_CSMODE_75 */ { 3, { &gPlayerAnim_al_no } },
+ /* PLAYER_CSMODE_76 */ { 3, { &gPlayerAnim_al_unun } },
+ /* PLAYER_CSMODE_77 */ { 7, { &gPlayerAnim_dl_yusaburu } },
+ /* PLAYER_CSMODE_78 */ { 5, { &gPlayerAnim_dl_kokeru } },
+ /* PLAYER_CSMODE_79 */ { 3, { &gPlayerAnim_alink_powerup } },
+ /* PLAYER_CSMODE_80 */ { 4, { &gPlayerAnim_alink_rakkatyu } },
+ /* PLAYER_CSMODE_81 */ { 3, { &gPlayerAnim_alink_kyoro } },
+ /* PLAYER_CSMODE_82 */ { 4, { &gPlayerAnim_alink_yurayura } },
+ /* PLAYER_CSMODE_83 */ { 3, { &gPlayerAnim_alink_somukeru } },
+ /* PLAYER_CSMODE_84 */ { 5, { &gPlayerAnim_alink_fukitobu } },
+ /* PLAYER_CSMODE_85 */ { 3, { &gameplay_keep_Linkanim_00CFC8 } },
+ /* PLAYER_CSMODE_86 */ { 4, { &gPlayerAnim_alink_tereru } },
+ /* PLAYER_CSMODE_87 */ { 5, { &gameplay_keep_Linkanim_00D1D0 } },
+ /* PLAYER_CSMODE_88 */ { 3, { &gPlayerAnim_alink_kaitenmiss } },
+ /* PLAYER_CSMODE_89 */ { 4, { &gameplay_keep_Linkanim_00CFC0 } },
+ /* PLAYER_CSMODE_90 */ { 4, { &gameplay_keep_Linkanim_00CFB8 } },
+ /* PLAYER_CSMODE_91 */ { 4, { &gameplay_keep_Linkanim_00D050 } },
+ /* PLAYER_CSMODE_92 */ { 4, { &gameplay_keep_Linkanim_00D048 } },
+ /* PLAYER_CSMODE_93 */ { -1, { func_8085A8C4 } },
+ /* PLAYER_CSMODE_94 */ { 3, { &gPlayerAnim_alink_ozigi } },
+ /* PLAYER_CSMODE_95 */ { 3, { &gPlayerAnim_alink_ozigi_modori } },
+ /* PLAYER_CSMODE_96 */ { 9, { &gPlayerAnim_link_normal_back_downA } },
+ /* PLAYER_CSMODE_97 */ { -1, { func_8085A530 } },
+ /* PLAYER_CSMODE_98 */ { 15, { &gPlayerAnim_cl_maskoff } },
+ /* PLAYER_CSMODE_99 */ { 7, { &gPlayerAnim_cl_kubisime } },
+ /* PLAYER_CSMODE_100 */ { 3, { &gPlayerAnim_alink_ee } },
+ /* PLAYER_CSMODE_101 */ { 3, { &gameplay_keep_Linkanim_00CFF0 } },
+ /* PLAYER_CSMODE_102 */ { -1, { func_8085A768 } },
+ /* PLAYER_CSMODE_103 */ { -1, { func_8085AA60 } },
+ /* PLAYER_CSMODE_104 */ { 5, { &gPlayerAnim_cl_dakisime } },
+ /* PLAYER_CSMODE_105 */ { 5, { &gPlayerAnim_kf_omen } },
+ /* PLAYER_CSMODE_106 */ { 5, { &gPlayerAnim_kf_dakiau } },
+ /* PLAYER_CSMODE_107 */ { 5, { &gPlayerAnim_kf_hanare } },
+ /* PLAYER_CSMODE_108 */ { 5, { &gPlayerAnim_kf_miseau } },
+ /* PLAYER_CSMODE_109 */ { 5, { &gPlayerAnim_kf_awase } },
+ /* PLAYER_CSMODE_110 */ { 7, { &gPlayerAnim_kf_tetunagu_loop } },
+ /* PLAYER_CSMODE_111 */ { 3, { &gPlayerAnim_link_keirei } },
+ /* PLAYER_CSMODE_112 */ { 5, { &gPlayerAnim_cl_umanoru } },
+ /* PLAYER_CSMODE_113 */ { 5, { &gPlayerAnim_cl_wakare } },
+ /* PLAYER_CSMODE_114 */ { 4, { &gPlayerAnim_alink_dance_loop } },
+ /* PLAYER_CSMODE_115 */ { 2, { &gPlayerAnim_link_demo_goma_furimuki } },
+ /* PLAYER_CSMODE_116 */ { 7, { &gPlayerAnim_link_uma_anim_fastrun } },
+ /* PLAYER_CSMODE_117 */ { 5, { &gPlayerAnim_cl_umamiage } },
+ /* PLAYER_CSMODE_118 */ { 7, { &gPlayerAnim_demo_suwari1 } },
+ /* PLAYER_CSMODE_119 */ { 7, { &gPlayerAnim_demo_suwari2 } },
+ /* PLAYER_CSMODE_120 */ { 7, { &gPlayerAnim_demo_suwari3 } },
+ /* PLAYER_CSMODE_121 */ { -1, { func_80859990 } },
+ /* PLAYER_CSMODE_122 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_123 */ { -1, { func_80859A10 } },
+ /* PLAYER_CSMODE_124 */ { 7, { &gPlayerAnim_clink_demo_get1 } },
+ /* PLAYER_CSMODE_125 */ { 5, { &gPlayerAnim_clink_demo_get2 } },
+ /* PLAYER_CSMODE_126 */ { 5, { &gPlayerAnim_clink_demo_get3 } },
+ /* PLAYER_CSMODE_127 */ { 3, { &gPlayerAnim_link_demo_gurad } },
+ /* PLAYER_CSMODE_128 */ { 4, { &gPlayerAnim_link_demo_sita_wait } },
+ /* PLAYER_CSMODE_129 */ { 3, { &gPlayerAnim_L_1kyoro } },
+ /* PLAYER_CSMODE_130 */ { 3, { &gPlayerAnim_L_2kyoro } },
+ /* PLAYER_CSMODE_131 */ { 3, { &gPlayerAnim_L_sagaru } },
+ /* PLAYER_CSMODE_132 */ { 3, { &gPlayerAnim_L_bouzen } },
+ /* PLAYER_CSMODE_133 */ { 3, { &gPlayerAnim_L_kamaeru } },
+ /* PLAYER_CSMODE_134 */ { 3, { &gPlayerAnim_L_hajikareru } },
+ /* PLAYER_CSMODE_135 */ { 3, { &gPlayerAnim_L_ken_miru } },
+ /* PLAYER_CSMODE_136 */ { 3, { &gPlayerAnim_L_mukinaoru } },
+ /* PLAYER_CSMODE_137 */ { 3, { &gPlayerAnim_link_demo_return_to_past } },
+ /* PLAYER_CSMODE_138 */ { 3, { &gPlayerAnim_link_last_hit_motion1 } },
+ /* PLAYER_CSMODE_139 */ { 3, { &gPlayerAnim_link_last_hit_motion2 } },
+};
+
+struct_8085DA94 D_8085DEF4[PLAYER_CSMODE_MAX] = {
+ /* PLAYER_CSMODE_0 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_1 */ { -1, { func_80859414 } },
+ /* PLAYER_CSMODE_2 */ { -1, { func_80859AD0 } },
+ /* PLAYER_CSMODE_3 */ { -1, { func_80859B28 } },
+ /* PLAYER_CSMODE_4 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_5 */ { -1, { func_8085ADA0 } },
+ /* PLAYER_CSMODE_END */ { -1, { func_8085AACC } },
+ /* PLAYER_CSMODE_WAIT */ { -1, { func_808595B8 } },
+ /* PLAYER_CSMODE_8 */ { 18, { D_8085DA70 } },
+ /* PLAYER_CSMODE_9 */ { -1, { func_80859890 } },
+ /* PLAYER_CSMODE_10 */ { -1, { func_80859C60 } },
+ /* PLAYER_CSMODE_11 */ { 18, { D_8085D9E0 } },
+ /* PLAYER_CSMODE_12 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_13 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_14 */ { 0, { NULL } },
+ /* PLAYER_CSMODE_15 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_16 */ { 17, { &gPlayerAnim_link_normal_okarina_swing } },
+ /* PLAYER_CSMODE_17 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_18 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_19 */ { -1, { func_8085A710 } },
+ /* PLAYER_CSMODE_20 */ { -1, { func_808595B8 } },
+ /* PLAYER_CSMODE_21 */ { 12, { &gPlayerAnim_clink_demo_mimawasi_wait } },
+ /* PLAYER_CSMODE_22 */ { -1, { func_80859D70 } },
+ /* PLAYER_CSMODE_23 */ { 12, { &gPlayerAnim_link_demo_look_hand_wait } },
+ /* PLAYER_CSMODE_24 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_25 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_26 */ { -1, { func_8085A6C0 } },
+ /* PLAYER_CSMODE_27 */ { 12, { &gPlayerAnim_link_demo_zeldamiru_wait } },
+ /* PLAYER_CSMODE_28 */ { 12, { &gPlayerAnim_link_demo_kenmiru1_wait } },
+ /* PLAYER_CSMODE_29 */ { 12, { &gPlayerAnim_link_demo_kenmiru2_wait } },
+ /* PLAYER_CSMODE_30 */ { 12, { &gPlayerAnim_demo_link_nwait } },
+ /* PLAYER_CSMODE_31 */ { 12, { &gameplay_keep_Linkanim_00D318 } },
+ /* PLAYER_CSMODE_32 */ { -1, { func_80859FF4 } },
+ /* PLAYER_CSMODE_33 */ { -1, { Player_Cutscene_TranslateReverse } },
+ /* PLAYER_CSMODE_34 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_35 */ { 12, { &gameplay_keep_Linkanim_00D2C0 } },
+ /* PLAYER_CSMODE_36 */ { -1, { func_8085A144 } },
+ /* PLAYER_CSMODE_37 */ { -1, { func_8085A1D4 } },
+ /* PLAYER_CSMODE_38 */ { 12, { &gameplay_keep_Linkanim_00D280 } },
+ /* PLAYER_CSMODE_39 */ { 12, { &gameplay_keep_Linkanim_00D290 } },
+ /* PLAYER_CSMODE_40 */ { 18, { D_8085D9F0 } },
+ /* PLAYER_CSMODE_41 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_42 */ { 18, { D_8085DA00 } },
+ /* PLAYER_CSMODE_43 */ { 13, { &gPlayerAnim_okiagaru_wait } },
+ /* PLAYER_CSMODE_44 */ { -1, { func_8085A364 } },
+ /* PLAYER_CSMODE_45 */ { 18, { D_8085DA2C } },
+ /* PLAYER_CSMODE_46 */ { 12, { &gPlayerAnim_sirimochi_wait } },
+ /* PLAYER_CSMODE_47 */ { 12, { &gPlayerAnim_spotlight_wait } },
+ /* PLAYER_CSMODE_48 */ { 12, { &gPlayerAnim_al_hensin_loop } },
+ /* PLAYER_CSMODE_49 */ { 12, { &gPlayerAnim_dl_jibunmiru_wait } },
+ /* PLAYER_CSMODE_50 */ { 18, { D_8085DA50 } },
+ /* PLAYER_CSMODE_51 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_52 */ { 18, { D_8085D9FC } },
+ /* PLAYER_CSMODE_53 */ { 12, { &gPlayerAnim_lost_horse_wait } },
+ /* PLAYER_CSMODE_54 */ { -1, { func_8085A364 } },
+ /* PLAYER_CSMODE_55 */ { 18, { D_8085DA1C } },
+ /* PLAYER_CSMODE_56 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_57 */ { 18, { D_8085DA0C } },
+ /* PLAYER_CSMODE_58 */ { -1, { func_808599DC } },
+ /* PLAYER_CSMODE_59 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_60 */ { 18, { D_8085DA28 } },
+ /* PLAYER_CSMODE_61 */ { -1, { func_8085A364 } },
+ /* PLAYER_CSMODE_62 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_63 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_64 */ { 12, { &gPlayerAnim_al_fuwafuwa_loop } },
+ /* PLAYER_CSMODE_65 */ { -1, { func_8085A40C } },
+ /* PLAYER_CSMODE_66 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_67 */ { -1, { func_80859708 } },
+ /* PLAYER_CSMODE_68 */ { -1, { func_8085A2AC } },
+ /* PLAYER_CSMODE_69 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_70 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_71 */ { -1, { func_8085A40C } },
+ /* PLAYER_CSMODE_72 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_73 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_74 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_75 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_76 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_77 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_78 */ { 18, { D_8085DA78 } },
+ /* PLAYER_CSMODE_79 */ { 12, { &gPlayerAnim_alink_powerup_loop } },
+ /* PLAYER_CSMODE_80 */ { -1, { func_8085A364 } },
+ /* PLAYER_CSMODE_81 */ { 12, { &gPlayerAnim_alink_kyoro_loop } },
+ /* PLAYER_CSMODE_82 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_83 */ { 12, { &gPlayerAnim_alink_somukeru_loop } },
+ /* PLAYER_CSMODE_84 */ { 18, { D_8085DA80 } },
+ /* PLAYER_CSMODE_85 */ { 12, { &gameplay_keep_Linkanim_00CFD0 } },
+ /* PLAYER_CSMODE_86 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_87 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_88 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_89 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_90 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_91 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_92 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_93 */ { -1, { func_8085A940 } },
+ /* PLAYER_CSMODE_94 */ { 12, { &gPlayerAnim_alink_ozigi_loop } },
+ /* PLAYER_CSMODE_95 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_96 */ { -1, { func_8085A4A4 } },
+ /* PLAYER_CSMODE_97 */ { -1, { func_8085A5DC } },
+ /* PLAYER_CSMODE_98 */ { -1, { func_8085AA84 } },
+ /* PLAYER_CSMODE_99 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_100 */ { 12, { &gPlayerAnim_alink_ee_loop } },
+ /* PLAYER_CSMODE_101 */ { 12, { &gameplay_keep_Linkanim_00CFF8 } },
+ /* PLAYER_CSMODE_102 */ { -1, { func_8085A7C0 } },
+ /* PLAYER_CSMODE_103 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_104 */ { 13, { &gPlayerAnim_cl_dakisime_loop } },
+ /* PLAYER_CSMODE_105 */ { 13, { &gPlayerAnim_kf_omen_loop } },
+ /* PLAYER_CSMODE_106 */ { 13, { &gPlayerAnim_kf_dakiau_loop } },
+ /* PLAYER_CSMODE_107 */ { 13, { &gPlayerAnim_kf_hanare_loop } },
+ /* PLAYER_CSMODE_108 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_109 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_110 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_111 */ { 12, { &gPlayerAnim_link_kei_wait } },
+ /* PLAYER_CSMODE_112 */ { 13, { &gPlayerAnim_cl_umanoru_loop } },
+ /* PLAYER_CSMODE_113 */ { 13, { &gPlayerAnim_cl_wakare_loop } },
+ /* PLAYER_CSMODE_114 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_115 */ { -1, { func_8085AA10 } },
+ /* PLAYER_CSMODE_116 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_117 */ { -1, { func_8085A364 } },
+ /* PLAYER_CSMODE_118 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_119 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_120 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_121 */ { -1, { func_808599DC } },
+ /* PLAYER_CSMODE_122 */ { -1, { func_80859AF8 } },
+ /* PLAYER_CSMODE_123 */ { -1, { func_80859A44 } },
+ /* PLAYER_CSMODE_124 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_125 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_126 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_127 */ { 12, { &gPlayerAnim_link_demo_gurad_wait } },
+ /* PLAYER_CSMODE_128 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_129 */ { 12, { &gPlayerAnim_L_kw } },
+ /* PLAYER_CSMODE_130 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_131 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_132 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_133 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_134 */ { -1, { func_80859D44 } },
+ /* PLAYER_CSMODE_135 */ { 11, { NULL } },
+ /* PLAYER_CSMODE_136 */ { 12, { &gPlayerAnim_L_kennasi_w } },
+ /* PLAYER_CSMODE_137 */ { -1, { func_80859EBC } },
+ /* PLAYER_CSMODE_138 */ { -1, { func_80859F4C } },
+ /* PLAYER_CSMODE_139 */ { -1, { func_80859F4C } },
+};
+
+PlayerAnimationHeader* D_8085E354[PLAYER_FORM_MAX] = {
+ &gPlayerAnim_L_okarina_get, // PLAYER_FORM_FIERCE_DEITY
+ &gPlayerAnim_L_okarina_get, // PLAYER_FORM_GORON
+ &gPlayerAnim_L_okarina_get, // PLAYER_FORM_ZORA
+ &gPlayerAnim_L_okarina_get, // PLAYER_FORM_DEKU
+ &gPlayerAnim_om_get, // PLAYER_FORM_HUMAN
+};
+
+struct_8085E368 D_8085E368[PLAYER_FORM_MAX] = {
+ { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_FIERCE_DEITY
+ { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_GORON
+ { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_ZORA
+ { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_DEKU
+ { { -200, 500, 0 }, { 600, 400, 600 } }, // PLAYER_FORM_HUMAN
+};
+
+Color_RGBA8 D_8085E3A4 = { 255, 255, 255, 0 };
+Color_RGBA8 D_8085E3A8 = { 0, 128, 128, 0 };
+
+void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) {
+ struct_8085E368* posInfo;
+ Vec3f effectPos;
+ Vec3f randPos;
+
+ func_808591BC(play, this, D_8085E354[this->transformation]);
+
+ if (this->rightHandType != 0xFF) {
+ this->rightHandType = 0xFF;
+ } else {
+ posInfo = &D_8085E368[this->transformation];
+ randPos.x = Rand_CenteredFloat(posInfo->range.x) + posInfo->base.x;
+ randPos.y = Rand_CenteredFloat(posInfo->range.y) + posInfo->base.y;
+ randPos.z = Rand_CenteredFloat(posInfo->range.z) + posInfo->base.z;
+ SkinMatrix_Vec3fMtxFMultXYZ(&this->shieldMf, &randPos, &effectPos);
+ EffectSsKirakira_SpawnDispersed(play, &effectPos, &gZeroVec3f, &gZeroVec3f, &D_8085E3A4, &D_8085E3A8, 600, -10);
+ }
+}
+
+void func_80859EBC(PlayState* play, Player* this, s32 arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8085AACC(play, this, arg2);
+ } else if (this->unk_AE8 == 0) {
+ Item_Give(play, ITEM_SWORD_RAZOR);
+ func_80841358(play, this, false);
+ } else {
+ func_808484CC(this);
+ }
+}
+
+void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8083FCF0(play, this, 0.0f, 99.0f, this->skelAnime.endFrame - 8.0f);
+ }
+ if (this->heldItemAction != PLAYER_IA_SWORD_GILDED) {
+ func_80841358(play, this, true);
+ }
+}
+
+void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (this->transformation != PLAYER_FORM_DEKU) {
+ gSaveContext.save.playerForm = PLAYER_FORM_DEKU;
+ }
+}
+
+void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (gSaveContext.save.playerForm != this->transformation) {
+ this->actor.update = func_8012301C;
+ this->actor.draw = NULL;
+ }
+}
+
+void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg) {
+ CsCmdActorCue* playerAction = arg;
+ f32 xEnd = playerAction->endPos.x;
+ f32 yEnd = playerAction->endPos.y;
+ f32 zEnd = playerAction->endPos.z;
+ f32 xDiff;
+ f32 yDiff;
+ f32 zDiff;
+ f32 progress;
+
+ xDiff = playerAction->startPos.x - xEnd;
+ yDiff = playerAction->startPos.y - yEnd;
+ zDiff = playerAction->startPos.z - zEnd;
+
+ progress = ((f32)(playerAction->endFrame - play->csCtx.curFrame)) /
+ ((f32)(playerAction->endFrame - playerAction->startFrame));
+
+ this->actor.world.pos.x = (xDiff * progress) + xEnd;
+ this->actor.world.pos.y = (yDiff * progress) + yEnd;
+ this->actor.world.pos.z = (zDiff * progress) + zEnd;
+ PlayerAnimation_Update(play, &this->skelAnime);
+}
+
+void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (this->transformation != PLAYER_FORM_FIERCE_DEITY) {
+ gSaveContext.save.playerForm = PLAYER_FORM_FIERCE_DEITY;
+ }
+}
+
+void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ if (gSaveContext.save.playerForm != this->transformation) {
+ this->actor.update = func_8012301C;
+ this->actor.draw = NULL;
+ }
+}
+
+void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_demo_rakka);
+ this->unk_AAA = -0x8000;
+}
+
+void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2) {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ this->actor.gravity = 0.0f;
+ Math_StepToF(&this->actor.velocity.y, -this->actor.terminalVelocity, -((f32)REG(68) / 100.0f));
+}
+
+void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_8082DB90(play, this, D_8085D17C[this->transformation]);
+ this->itemAction = PLAYER_IA_OCARINA;
+ Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
+}
+
+void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if ((PlayerAnimation_Update(play, &this->skelAnime)) &&
+ (this->skelAnime.animation == D_8085D17C[this->transformation])) {
+ func_808525C4(play, this);
+ return;
+ }
+ if (this->unk_AE8 != 0) {
+ func_8085255C(play, this);
+ }
+}
+
+void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2) {
+ Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]);
+}
+
+void func_8085A364(PlayState* play, Player* this, void* arg2) {
+ Player_Cutscene_Translate(play, this, arg2);
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_8082EB18(play, this, &gPlayerAnim_cl_umamiage_loop);
+ }
+
+ if (this->skelAnime.animation == &gPlayerAnim_cl_nigeru) {
+ Player_PlayAnimSfx(this, D_8085DA48);
+ } else if (this->skelAnime.animation == &gPlayerAnim_alink_rakkatyu) {
+ func_800B8F98(&this->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG);
+ } else {
+ func_80858FE8(this);
+ }
+}
+
+void func_8085A40C(PlayState* play, Player* this, void* arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ func_80859CA0(play, this, arg2);
+ } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa_modori) {
+ Player_PlayAnimSfx(this, D_8085DA88);
+ } else if (this->skelAnime.animation == &gPlayerAnim_cl_jibun_miru) {
+ Player_PlayAnimSfx(this, D_8085DA8C);
+ }
+}
+
+void func_8085A4A4(PlayState* play, Player* this, void* arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB);
+ this->unk_AE8 = 1;
+ }
+ if (this->unk_AE8 != 0) {
+ func_80832F24(this);
+ }
+}
+
+void func_8085A530(PlayState* play, Player* this, void* arg2) {
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_give_other, 1.0f,
+ (play->sceneId == SCENE_ALLEY) ? IREG(56) : 0.0f,
+ Animation_GetLastFrame(&gPlayerAnim_link_normal_give_other), ANIMMODE_ONCE, -8.0f);
+}
+
+void func_8085A5DC(PlayState* play, Player* this, void* arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8++ >= 0x15) {
+ PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP,
+ -16.0f);
+ }
+ }
+}
+
+void func_8085A66C(PlayState* play, Player* this, void* arg2) {
+ if (func_801242B4(this)) {
+ func_8085929C(play, this, 0);
+ } else {
+ func_80858E40(play, this, &gPlayerAnim_link_demo_kousan);
+ }
+}
+
+void func_8085A6C0(PlayState* play, Player* this, void* anim) {
+ if (func_801242B4(this)) {
+ func_80859300(play, this, 0);
+ } else {
+ func_80858FBC(play, this, anim);
+ }
+}
+
+void func_8085A710(PlayState* play, Player* this, void* anim) {
+ func_80858FBC(play, this, anim);
+ if (func_8083D23C(this, play)) {
+ play->csCtx.state = CS_STATE_STOP;
+ CutsceneManager_Stop(CutsceneManager_GetCurrentCsId());
+ }
+}
+
+void func_8085A768(PlayState* play, Player* this, void* arg2) {
+ func_80838830(this, OBJECT_GI_RESERVE_C_01);
+ func_80858E40(play, this, &gPlayerAnim_link_normal_give_other);
+ this->stateFlags2 &= ~PLAYER_STATE2_1000000;
+}
+
+void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ if (this->unk_AE8 == 0) {
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) ||
+ (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
+ this->getItemDrawIdPlusOne = GID_NONE + 1;
+ this->unk_AE8 = -1;
+ } else {
+ this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1;
+ }
+ } else if (this->unk_AE8 < 0) {
+ if (Actor_HasParent(&this->actor, play)) {
+ this->actor.parent = NULL;
+ this->unk_AE8 = 1;
+ } else {
+ Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f);
+ }
+ }
+ } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES);
+ }
+}
+
+void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) {
+ R_PLAY_FILL_SCREEN_ON = 45;
+ R_PLAY_FILL_SCREEN_R = 255;
+ R_PLAY_FILL_SCREEN_G = 255;
+ R_PLAY_FILL_SCREEN_B = 255;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ play_sound(NA_SE_SY_WHITE_OUT_T);
+ }
+}
+
+void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (R_PLAY_FILL_SCREEN_ON > 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA > 255) {
+ R_PLAY_FILL_SCREEN_ON = -64;
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+ gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
+ this->actor.update = func_8012301C;
+ this->actor.draw = NULL;
+ this->unk_AE7 = 0;
+ }
+ } else if (R_PLAY_FILL_SCREEN_ON < 0) {
+ R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON;
+ if (R_PLAY_FILL_SCREEN_ALPHA < 0) {
+ R_PLAY_FILL_SCREEN_ON = 0;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
+ }
+ } else {
+ PlayerAnimation_Update(play, &this->skelAnime);
+ }
+}
+
+void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ }
+}
+
+void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2) {
+ func_80848640(play, this);
+}
+
+void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (PlayerAnimation_Update(play, &this->skelAnime)) {
+ this->stateFlags2 |= PLAYER_STATE2_1000000;
+ }
+}
+
+void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2) {
+ if (func_801242B4(this)) {
+ func_808353DC(play, this);
+ func_8082DC64(play, this);
+ } else {
+ func_80839ED0(this, play);
+ if (!func_808391D8(this, play)) {
+ func_8083D23C(this, play);
+ }
+ }
+
+ this->csMode = PLAYER_CSMODE_0;
+ this->unk_AA5 = PLAYER_UNKAA5_0;
+}
+
+void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction) {
+ this->actor.world.pos.x = playerAction->startPos.x;
+ this->actor.world.pos.y = playerAction->startPos.y;
+ this->actor.world.pos.z = playerAction->startPos.z;
+
+ this->currentYaw = this->actor.shape.rot.y = playerAction->rot.y;
+}
+
+void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* playerAction) {
+ f32 xDiff = playerAction->startPos.x - (s32)this->actor.world.pos.x;
+ f32 yDiff = playerAction->startPos.y - (s32)this->actor.world.pos.y;
+ f32 zDiff = playerAction->startPos.z - (s32)this->actor.world.pos.z;
+ f32 dist;
+ s16 temp_v0;
+
+ temp_v0 = (s16)playerAction->rot.y - this->actor.shape.rot.y;
+ dist = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff));
+ if (this->linearVelocity == 0.0f) {
+ if ((dist > 50.0f) || (ABS_ALT(temp_v0) > 0x4000)) {
+ Player_Cutscene_SetPosAndYawToStart(this, playerAction);
+ }
+ }
+
+ this->skelAnime.moveFlags = 0;
+ func_8082E784(this);
+}
+
+void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, struct_8085DA94* arg3) {
+ if (arg3->type > 0) {
+ D_8085D990[arg3->type](play, this, arg3->anim);
+ } else if (arg3->type < 0) {
+ arg3->func(play, this, cue);
+ }
+
+ if ((D_80862B6C & 4) && !(this->skelAnime.moveFlags & ANIM_FLAG_4)) {
+ this->skelAnime.morphTable[PLAYER_LIMB_ROOT - 1].y /= this->ageProperties->unk_08;
+ D_80862B6C = 0;
+ }
+}
+
+void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) {
+ if ((csMode != PLAYER_CSMODE_1) && (csMode != PLAYER_CSMODE_WAIT) && (csMode != PLAYER_CSMODE_20) &&
+ (csMode != PLAYER_CSMODE_END)) {
+ func_8082DCA0(play, this);
+ }
+}
+
+void func_8085ADA0(PlayState* play, Player* this, s32 arg2) {
+ CsCmdActorCue* cue = (this->actor.id == ACTOR_EN_TEST3)
+ ? play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_506)]
+ : play->csCtx.playerCue;
+ s32 var_a0 = false;
+ s32 pad;
+ s32 csMode;
+
+ if ((play->csCtx.state == CS_STATE_IDLE) || (play->csCtx.state == CS_STATE_STOP) ||
+ (play->csCtx.state == CS_STATE_RUN_UNSTOPPABLE)) {
+ if ((D_8085D384[this->unk_396] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) {
+ this->unk_AA5 = PLAYER_UNKAA5_5;
+
+ if (func_80838A90(this, play)) {
+ this->csMode = PLAYER_CSMODE_0;
+ }
+ return;
+ } else {
+ var_a0 = true;
+
+ if (D_8085D384[this->unk_396] != PLAYER_CSMODE_16) {
+ this->csMode = PLAYER_CSMODE_END;
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
+ this->unk_396 = 0;
+ Player_StopHorizontalMovement(this);
+ return;
+ }
+ }
+ }
+
+ if (!var_a0 && (cue == NULL)) {
+ this->actor.flags &= ~ACTOR_FLAG_40;
+ return;
+ }
+
+ if (!var_a0 && (this->unk_396 != cue->id)) {
+ csMode = D_8085D384[cue->id];
+
+ if ((csMode >= PLAYER_CSMODE_0) && (gDisablePlayerCsModeStartPos == 0)) {
+ if ((csMode == PLAYER_CSMODE_2) || (csMode == PLAYER_CSMODE_3)) {
+ Player_Cutscene_8085ABA8(this, cue);
+ } else {
+ Player_Cutscene_SetPosAndYawToStart(this, cue);
+ }
+ }
+
+ if (csMode == PLAYER_CSMODE_108) {
+ this->stateFlags3 |= PLAYER_STATE3_20000000;
+ } else if (csMode == PLAYER_CSMODE_110) {
+ this->stateFlags3 &= ~PLAYER_STATE3_20000000;
+ }
+
+ D_80862B6C = this->skelAnime.moveFlags;
+
+ func_8082E794(this);
+ func_8085AD5C(play, this, ABS_ALT(csMode));
+ func_8085AC9C(play, this, cue, &D_8085DA94[ABS_ALT(csMode)]);
+
+ this->unk_AE8 = 0;
+ this->unk_AE7 = 0;
+ this->unk_396 = cue->id;
+ }
+
+ csMode = D_8085D384[this->unk_396];
+ func_8085AC9C(play, this, cue, &D_8085DEF4[ABS_ALT(csMode)]);
+
+ if ((u16)cue->rot.x != 0) {
+ Math_SmoothStepToS(&this->actor.focus.rot.x, (u16)cue->rot.x, 4, 0x2710, 0);
+ func_80832754(this, false);
+ }
+}
+
+void func_8085B08C(Player* this, PlayState* play) {
+ if (this->csMode != this->prevCsMode) {
+ D_80862B6C = this->skelAnime.moveFlags;
+ func_8082E794(this);
+
+ this->prevCsMode = this->csMode;
+ func_8085AD5C(play, this, this->csMode);
+ func_8085AC9C(play, this, NULL, &D_8085DA94[this->csMode]);
+ }
+
+ func_8085AC9C(play, this, NULL, &D_8085DEF4[this->csMode]);
+}
+
+s32 Player_StartFishing(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ func_8082DE50(play, player);
+ func_80831990(play, player, ITEM_FISHING_ROD);
+ return 1;
+}
+
+// Player_GrabPlayerImpl? Player_GrabPlayerNoChecks?
+void func_8085B170(PlayState* play, Player* this) {
+ func_8082DE50(play, this);
+ Player_SetAction(play, this, func_80853CC0, 0);
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack);
+ this->stateFlags2 |= PLAYER_STATE2_80;
+ func_8082DAD4(this);
+ Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HELD);
+}
+
+s32 Player_GrabPlayer(PlayState* play, Player* this) {
+ if (!Player_InBlockingCsMode(play, this) && (this->invincibilityTimer >= 0) && !func_801240DC(this)) {
+ if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 |
+ PLAYER_STATE1_200000 | PLAYER_STATE1_800000))) {
+ if (!(this->stateFlags2 & PLAYER_STATE2_80) && !(this->stateFlags3 & PLAYER_STATE3_80)) {
+ func_8085B170(play, this);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) {
+ Player* player = GET_PLAYER(play);
+
+ if (this != NULL) {
+ if (csMode == PLAYER_CSMODE_0) {
+ return func_8084E034 == this->actionFunc;
+ }
+
+ if ((this->actor.id == ACTOR_EN_TEST3) && (csMode < 0)) {
+ func_8083B0E4(play, this, this->actor.home.rot.y);
+ return false;
+ }
+
+ if (this->actor.id == ACTOR_EN_TEST3) {
+ player = this;
+ }
+ }
+
+ if ((player->actor.id == ACTOR_EN_TEST3) || !Player_InBlockingCsMode(play, player)) {
+ func_8082DE50(play, player);
+ Player_SetAction(play, player, func_8085B08C, 0);
+ player->csMode = csMode;
+ player->unk_398 = &this->actor;
+ func_8082DAD4(player);
+
+ return true;
+ }
+
+ return false;
+}
+
+void func_8085B384(Player* this, PlayState* play) {
+ Player_SetAction(play, this, func_80849FE0, 1);
+ func_8082E438(play, this, func_8082ED20(this));
+ this->currentYaw = this->actor.shape.rot.y;
+}
+
+/**
+ * Returns true if Player's health reaches zero
+ */
+s32 Player_InflictDamage(PlayState* play, s32 damage) {
+ Player* player = GET_PLAYER(play);
+
+ if ((player->stateFlags2 & PLAYER_STATE2_80) || !Player_InBlockingCsMode(play, player)) {
+ if (func_808339D4(play, player, damage) == 0) {
+ player->stateFlags2 &= ~PLAYER_STATE2_80;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+// Start talking with the given actor
+void Player_TalkWithPlayer(PlayState* play, Actor* actor) {
+ s32 pad;
+ Player* player = GET_PLAYER(play);
+
+ func_808323C0(player, CS_ID_GLOBAL_TALK);
+ if ((player->talkActor != NULL) || (actor == player->tatlActor) ||
+ CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000)) {
+ actor->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ }
+
+ player->talkActor = actor;
+ player->exchangeItemId = PLAYER_IA_NONE;
+ player->targetedActor = actor;
+
+ if (actor->textId == 0xFFFF) {
+ func_800B7298(play, actor, PLAYER_CSMODE_1);
+ actor->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ func_8082DE14(play, player);
+ } else {
+ if (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) {
+ player->actor.textId = 0;
+ } else {
+ player->actor.flags |= ACTOR_FLAG_TALK_REQUESTED;
+ player->actor.textId = actor->textId;
+ }
+
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
+ s32 sp24 = player->unk_AE8;
+
+ func_8082DE14(play, player);
+ func_80837B60(play, player);
+ player->unk_AE8 = sp24;
+ } else {
+ if (func_801242B4(player)) {
+ func_80832558(play, player, func_80837B60);
+ func_8082E634(play, player, &gPlayerAnim_link_swimer_swim_wait);
+ } else if ((actor->category != ACTORCAT_NPC) || (player->heldItemAction == PLAYER_IA_FISHING_ROD)) {
+ func_80837B60(play, player);
+
+ if (!func_80123420(player)) {
+ if ((actor != player->tatlActor) && (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40))) {
+ func_8082DB90(play, player, &gPlayerAnim_link_normal_backspace);
+ } else {
+ Player_AnimationPlayLoop(play, player, func_8082ED20(player));
+ }
+ }
+ } else {
+ func_80832558(play, player, func_80837B60);
+ func_8082DB90(play, player,
+ (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40))
+ ? &gPlayerAnim_link_normal_backspace
+ : &gPlayerAnim_link_normal_talk_free);
+ }
+
+ if (player->skelAnime.animation == &gPlayerAnim_link_normal_backspace) {
+ func_8082E920(play, player, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE);
+ }
+ func_8082DAD4(player);
+ }
+
+ player->stateFlags1 |= PLAYER_STATE1_40 | PLAYER_STATE1_20000000;
+ }
+
+ if ((player->tatlActor == player->talkActor) && ((player->talkActor->textId & 0xFF00) != 0x200)) {
+ player->tatlActor->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ }
+}
+
+void func_8085B74C(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 temp_fv1;
+ f32 linearVelocity = player->linearVelocity;
+
+ if (linearVelocity < 0.0f) {
+ linearVelocity = -linearVelocity;
+ player->actor.world.rot.y += 0x8000;
+ }
+
+ temp_fv1 = R_RUN_SPEED_LIMIT / 100.0f;
+
+ if (temp_fv1 < linearVelocity) {
+ gSaveContext.entranceSpeed = temp_fv1;
+ } else {
+ gSaveContext.entranceSpeed = linearVelocity;
+ }
+
+ func_80835324(play, player, 400.0f,
+ (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) ? D_80862B16 : player->actor.world.rot.y);
+ player->stateFlags1 |= (PLAYER_STATE1_1 | PLAYER_STATE1_20000000);
+}
+
+void func_8085B820(PlayState* play, s16 arg1) {
+ Player* player = GET_PLAYER(play);
+
+ player->actor.focus.rot.y = arg1;
+ func_80836D8C(player);
+}
+
+PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId) {
+ PlayerItemAction itemAction = Player_ItemToItemAction(this, itemId);
+
+ if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) &&
+ (itemAction == GET_IA_FROM_MASK(this->currentMask))) {
+ itemAction = PLAYER_IA_NONE;
+ }
+
+ if ((itemAction <= PLAYER_IA_NONE) || (itemAction >= PLAYER_IA_MAX)) {
+ return PLAYER_IA_MINUS1;
+ }
+
+ this->itemAction = PLAYER_IA_NONE;
+ this->actionFunc = NULL;
+ func_80831760(play, this, func_80853A5C, 0);
+ this->csId = CS_ID_GLOBAL_TALK;
+ this->itemAction = itemAction;
+ Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_give_other);
+ this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000);
+ this->getItemDrawIdPlusOne = GID_NONE + 1;
+ this->exchangeItemId = itemAction;
+
+ return itemAction;
+}
+
+s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode) {
+ Player* player = GET_PLAYER(play);
+
+ if (!(player->actor.flags & ACTOR_FLAG_TALK_REQUESTED)) {
+ return false;
+ }
+
+ PlayerAnimation_Change(play, &player->skelAnime, (talkAnim == NULL) ? func_8082ED20(player) : talkAnim, 2.0f / 3.0f,
+ 0.0f, Animation_GetLastFrame(talkAnim), animMode, -6.0f);
+ return true;
+}
diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
index ef88015b7..e63d414d9 100644
--- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
+++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c
@@ -65,7 +65,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) {
gSPSegment(POLY_XLU_DISP++, 0x06,
play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
index 2d80b4161..b1472e55d 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c
@@ -68,7 +68,7 @@ void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this) {
radius = this->rScale * 0.0025f;
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
Play_GetFloorSurface(play, &mf, &this->pos);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
index b17a43fbe..c9565b968 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
@@ -92,7 +92,7 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
this->rPrimColorA);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0);
@@ -135,7 +135,7 @@ void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this) {
mtx2 = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult);
if (mtx2 != NULL) {
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
this->rPrimColorA);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
index 681aac01d..41c9f0692 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c
@@ -59,7 +59,7 @@ void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 150, 150, 150, 0);
gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
index d8394b159..87e50fb5f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c
@@ -83,7 +83,7 @@ void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 50, this->rAlpha);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
index 543363ade..556903ca1 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c
@@ -82,7 +82,7 @@ void EffectSsDeadDb_Draw(PlayState* play, u32 index, EffectSs* this) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
this->rPrimColorA);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
index 9f124d39e..c9fa170df 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c
@@ -109,7 +109,7 @@ void EffectSsDeadDd_Draw(PlayState* play, u32 index, EffectSs* this) {
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult);
if (mtx != NULL) {
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rAlpha);
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
index 6243b4302..b40513e21 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c
@@ -59,7 +59,7 @@ void EffectSsDeadDs_Draw(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(play->state.gfxCtx);
scale = this->rScale * 0.01f;
- func_8012C974(play->state.gfxCtx);
+ Gfx_SetupDL60_XluNoCD(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, this->rAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0);
pos = this->pos;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
index b6e3b747f..8a4c80980 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c
@@ -97,7 +97,7 @@ void EffectSsDtBubble_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
(this->rPrimColorA * this->life) / this->rLifespan);
gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB,
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
index 10e8fbeed..22580fd81 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c
@@ -107,7 +107,7 @@ void EffectSsDust_Draw(PlayState* play, u32 index, EffectSs* this) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPPipeSync(POLY_XLU_DISP++);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[this->rTexIndex]));
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0);
gDPPipeSync(POLY_XLU_DISP++);
if (this->rDrawFlags & DUST_DRAWFLAG1) {
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
index 9d78d4d71..a786327fa 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c
@@ -52,7 +52,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
this->rScaleMax = initParams->scale;
- if (initParams->params & ENFIRE_PARAMS_USE_SCALE) {
+ if (initParams->params & ENFIRE_PARAM_USE_SCALE) {
this->rScale = initParams->scale;
} else {
this->rScale = 0;
@@ -88,7 +88,7 @@ void EffectSsEnFire_Draw(PlayState* play, u32 index, EffectSs* this) {
redGreen = 0;
}
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, redGreen * 12.7f, 0, 0, 0);
gDPSetPrimColor(POLY_XLU_DISP++, 0x0, 0x80, redGreen * 12.7f, redGreen * 12.7f, 0, 255);
gSPSegment(
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h
index 0f17477b8..491df81a5 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h
@@ -4,7 +4,7 @@
#include "global.h"
#define ENFIRE_FLAGS_BODYPART_POS_VEC3S (1 << 15)
-#define ENFIRE_PARAMS_USE_SCALE (1 << 15)
+#define ENFIRE_PARAM_USE_SCALE (1 << 15)
typedef struct {
/* 0x00 */ Actor* actor;
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
index 21a0f1019..cf019c6cf 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c
@@ -60,7 +60,7 @@ u32 EffectSsEnIce_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
this->rEnvColorG = initParams->envColor.g;
this->rEnvColorB = initParams->envColor.b;
this->rAlphaMode = 1;
- this->rPitch = randPlusMinusPoint5Scaled(0x10000);
+ this->rPitch = Rand_CenteredFloat(0x10000);
} else if (initParams->type == ENICE_TYPE_NORMAL) {
Math_Vec3f_Copy(&this->pos, &initParams->pos);
Math_Vec3f_Copy(&this->vec, &initParams->pos);
@@ -112,7 +112,7 @@ void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_RotateXS(this->rPitch, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
func_800BCC68(&this->pos, play);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, gameplayFrames & 0xFF, 0x20, 0x10, 1, 0,
@@ -142,7 +142,7 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) {
} else {
this->actor = NULL;
if (this->life >= 9) {
- rand = randPlusMinusPoint5Scaled(0xFFFF);
+ rand = Rand_CenteredFloat(0xFFFF);
this->accel.x = Math_SinS(rand) * (Rand_ZeroOne() + 1.0f);
this->accel.z = Math_CosS(rand) * (Rand_ZeroOne() + 1.0f);
this->life = 8;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
index 03522f5af..91b699f5f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
@@ -72,7 +72,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c
index cd7c6d5bd..4edc1e3b1 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c
@@ -62,11 +62,11 @@ void EffectSsFhgFlash_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
if (this->rParams != FHGFLASH_SHOCK_NO_ACTOR) {
- func_8012C448(play->state.gfxCtx);
+ Gfx_SetupDL44_Xlu(play->state.gfxCtx);
Matrix_RotateXS(this->rXZRot, MTXMODE_APPLY);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_DECAL2);
} else {
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
Matrix_ReplaceRotation(&play->billboardMtxF);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_SURF2);
}
@@ -90,9 +90,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) {
Player* player = GET_PLAYER(play);
randBodyPart = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f);
- this->pos.x = player->bodyPartsPos[randBodyPart].x + randPlusMinusPoint5Scaled(10.0f);
- this->pos.y = player->bodyPartsPos[randBodyPart].y + randPlusMinusPoint5Scaled(15.0f);
- this->pos.z = player->bodyPartsPos[randBodyPart].z + randPlusMinusPoint5Scaled(10.0f);
+ this->pos.x = player->bodyPartsPos[randBodyPart].x + Rand_CenteredFloat(10.0f);
+ this->pos.y = player->bodyPartsPos[randBodyPart].y + Rand_CenteredFloat(15.0f);
+ this->pos.z = player->bodyPartsPos[randBodyPart].z + Rand_CenteredFloat(10.0f);
} else if ((this->rParams >= FHGFLASH_SHOCK_GOHT_2) && (this->rParams <= FHGFLASH_SHOCK_GOHT_6)) {
s32 pad;
Vec3f* bodyPartPos;
@@ -105,9 +105,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) {
bodyPartPos = &goht->unk_2F00[this->rParams][index].unk_00;
}
- this->pos.x = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->x;
- this->pos.y = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->y;
- this->pos.z = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->z;
+ this->pos.x = Rand_CenteredFloat(70.0f) + bodyPartPos->x;
+ this->pos.y = Rand_CenteredFloat(70.0f) + bodyPartPos->y;
+ this->pos.z = Rand_CenteredFloat(70.0f) + bodyPartPos->z;
}
if (this->life < 100) {
this->rAlpha -= 50;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h
index c2f231269..4f8cd94fe 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h
@@ -4,30 +4,30 @@
#include "global.h"
typedef enum {
- /* 0x00 */ FHGFLASH_LIGHTBALL,
- /* 0x01 */ FHGFLASH_SHOCK
+ /* 0 */ FHGFLASH_LIGHTBALL,
+ /* 1 */ FHGFLASH_SHOCK
} FhgFlashType;
typedef enum {
- /* 0x00 */ FHGFLASH_LIGHTBALL_GREEN,
- /* 0x01 */ FHGFLASH_LIGHTBALL_LIGHTBLUE,
- /* 0x02 */ FHGFLASH_LIGHTBALL_RED,
- /* 0x03 */ FHGFLASH_LIGHTBALL_YELLOW,
- /* 0x04 */ FHGFLASH_LIGHTBALL_BLUE,
- /* 0x05 */ FHGFLASH_LIGHTBALL_PURPLE,
- /* 0x06 */ FHGFLASH_LIGHTBALL_ORANGE,
- /* 0x07 */ FHGFLASH_LIGHTBALL_WHITE1,
- /* 0x08 */ FHGFLASH_LIGHTBALL_WHITE2
+ /* 0 */ FHGFLASH_LIGHTBALL_GREEN,
+ /* 1 */ FHGFLASH_LIGHTBALL_LIGHTBLUE,
+ /* 2 */ FHGFLASH_LIGHTBALL_RED,
+ /* 3 */ FHGFLASH_LIGHTBALL_YELLOW,
+ /* 4 */ FHGFLASH_LIGHTBALL_BLUE,
+ /* 5 */ FHGFLASH_LIGHTBALL_PURPLE,
+ /* 6 */ FHGFLASH_LIGHTBALL_ORANGE,
+ /* 7 */ FHGFLASH_LIGHTBALL_WHITE1,
+ /* 8 */ FHGFLASH_LIGHTBALL_WHITE2
} FhgFlashLightBallParam;
typedef enum {
- /* 0x00 */ FHGFLASH_SHOCK_NO_ACTOR,
- /* 0x01 */ FHGFLASH_SHOCK_PLAYER,
- /* 0x02 */ FHGFLASH_SHOCK_GOHT_2,
- /* 0x03 */ FHGFLASH_SHOCK_GOHT_3,
- /* 0x04 */ FHGFLASH_SHOCK_GOHT_4,
- /* 0x05 */ FHGFLASH_SHOCK_GOHT_5,
- /* 0x06 */ FHGFLASH_SHOCK_GOHT_6
+ /* 0 */ FHGFLASH_SHOCK_NO_ACTOR,
+ /* 1 */ FHGFLASH_SHOCK_PLAYER,
+ /* 2 */ FHGFLASH_SHOCK_GOHT_2,
+ /* 3 */ FHGFLASH_SHOCK_GOHT_3,
+ /* 4 */ FHGFLASH_SHOCK_GOHT_4,
+ /* 5 */ FHGFLASH_SHOCK_GOHT_5,
+ /* 6 */ FHGFLASH_SHOCK_GOHT_6
} FhgFlashLightningParam;
typedef struct {
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
index 1742b03fd..57ac1af69 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c
@@ -121,7 +121,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Scale(1.0f, temp1, 1.0f / temp1, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0);
gSPSegment(
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
index 24aadc0ec..597379229 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c
@@ -93,7 +93,7 @@ void EffectSsGRipple_DrawRipple(PlayState* play2, EffectSs* this, TexturePtr tex
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
this->rPrimColorA);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
index ccc2951c6..e80c02a11 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c
@@ -97,7 +97,7 @@ void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sSparkTextures[this->rTexIndex]));
- func_8012C974(gfxCtx);
+ Gfx_SetupDL60_XluNoCD(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
gSPDisplayList(POLY_XLU_DISP++, this->gfx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
index 8d7647bfe..46397dc19 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c
@@ -58,7 +58,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP
this->rType = initParams->type;
} else {
switch (initParams->type) {
- case 0:
+ case EFFSSGSPLASH_TYPE_0:
this->rgPrimColorR = 255;
this->rgPrimColorG = 255;
this->rgPrimColorB = 255;
@@ -67,9 +67,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP
this->rgEnvColorG = 255;
this->rgEnvColorB = 255;
this->rgEnvColorA = 200;
- this->rType = 0;
+ this->rType = EFFSSGSPLASH_TYPE_0;
break;
- case 1:
+ case EFFSSGSPLASH_TYPE_1:
this->rgPrimColorR = 255;
this->rgPrimColorG = 255;
this->rgPrimColorB = 255;
@@ -78,9 +78,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP
this->rgEnvColorG = 255;
this->rgEnvColorB = 255;
this->rgEnvColorA = 255;
- this->rType = 1;
+ this->rType = EFFSSGSPLASH_TYPE_1;
break;
- case 2:
+ case EFFSSGSPLASH_TYPE_2:
this->rgPrimColorR = 255;
this->rgPrimColorG = 255;
this->rgPrimColorB = 255;
@@ -89,7 +89,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP
this->rgEnvColorG = 255;
this->rgEnvColorB = 255;
this->rgEnvColorA = 200;
- this->rType = 2;
+ this->rType = EFFSSGSPLASH_TYPE_2;
break;
}
}
@@ -100,7 +100,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) {
s16 texIndex;
switch (this->rType) {
- case 0:
+ case EFFSSGSPLASH_TYPE_0:
texIndex = this->rgTexIndex / 100;
if (texIndex > 7) {
texIndex = 7;
@@ -108,7 +108,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) {
EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]);
break;
- case 1:
+ case EFFSSGSPLASH_TYPE_1:
texIndex = this->rgTexIndex / 100;
if (texIndex > 7) {
texIndex = 7;
@@ -116,7 +116,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) {
EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]);
break;
- case 2:
+ case EFFSSGSPLASH_TYPE_2:
texIndex = this->rgTexIndex / 100;
if (texIndex > 7) {
texIndex = 7;
@@ -129,7 +129,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) {
void EffectSsGSplash_Update(PlayState* play, u32 index, EffectSs* this) {
Vec3f newSplashPos;
- if ((this->rType == 1) && (this->life == 5)) {
+ if ((this->rType == EFFSSGSPLASH_TYPE_1) && (this->life == 5)) {
newSplashPos = this->pos;
newSplashPos.y += ((this->rgScale * 20) * 0.002f);
EffectSsGSplash_Spawn(play, &newSplashPos, 0, 0, 2, this->rgScale / 2);
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h
index 9d3fbcd13..363db3e5a 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h
@@ -3,6 +3,12 @@
#include "global.h"
+typedef enum EffSsGSplashType {
+ /* 0 */ EFFSSGSPLASH_TYPE_0,
+ /* 1 */ EFFSSGSPLASH_TYPE_1,
+ /* 2 */ EFFSSGSPLASH_TYPE_2
+} EffSsGSplashType;
+
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ u8 type;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
index e1a9371cd..15444ad47 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c
@@ -72,7 +72,7 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) {
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
}
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, this->gfx);
CLOSE_DISPS(gfxCtx);
@@ -88,7 +88,7 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) {
gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
}
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPDisplayList(POLY_XLU_DISP++, this->gfx);
CLOSE_DISPS(gfxCtx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c
index 36eb650f7..b290c05e4 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c
@@ -134,7 +134,7 @@ void EffectSsHitmark_Draw(PlayState* play, u32 index, EffectSs* this) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
tex = sTextures[(this->rType * 8) + (this->rTexIndex)];
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(tex));
- func_8012C9BC(gfxCtx);
+ Gfx_SetupDL61_Xlu(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0);
gSPDisplayList(POLY_XLU_DISP++, this->gfx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
index 9efadc99e..29a35cf34 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c
@@ -65,7 +65,7 @@ void EffectSsIcePiece_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_RotateYS(this->rYaw, MTXMODE_APPLY);
Matrix_RotateXS(this->rPitch, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)(s32)alpha);
func_800BCC68(&this->pos, play);
gSPSegment(
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c
index e1c2bc72d..ffd8c300a 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c
@@ -52,7 +52,7 @@ void EffectSsIceSmoke_Draw(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 235, 235, this->rAlpha);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, this->rScrollX * this->life, this->rScrollY * this->life, 0x20,
diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
index 17d7edc1e..8c4fc5877 100644
--- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c
@@ -55,7 +55,7 @@ void EffectSsKFire_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(xzScale, yScale, xzScale, MTXMODE_APPLY);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, play->state.frames * this->rScroll, 0x20,
0x80));
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
index e424c0b44..1104a28a3 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
@@ -107,7 +107,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) {
if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
if (colorIndex >= 0) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r,
D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255);
@@ -115,7 +115,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) {
gSPDisplayList(POLY_XLU_DISP++, this->gfx);
} else {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (colorIndex >= 0) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r,
D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c
index 540d9e505..4e8f11f5c 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c
@@ -108,7 +108,7 @@ void EffectSsKirakira_Draw(PlayState* play, u32 index, EffectSs* this) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
(((s8)((55.0f / this->rLifespan) * this->life) + 200)));
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
@@ -139,8 +139,8 @@ void func_80977DB4(PlayState* play, u32 index, EffectSs* this) {
void func_80977E6C(PlayState* play, u32 index, EffectSs* this) {
this->velocity.x *= 0.95f;
this->velocity.z *= 0.95f;
- this->accel.x = randPlusMinusPoint5Scaled(0.2f);
- this->accel.z = randPlusMinusPoint5Scaled(0.2f);
+ this->accel.x = Rand_CenteredFloat(0.2f);
+ this->accel.z = Rand_CenteredFloat(0.2f);
this->rEnvColorA += this->rAlphaStep;
if (this->rEnvColorA < 0) {
diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
index 9037b20f4..61eb3aebd 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c
@@ -119,7 +119,7 @@ void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this) {
if (mtx != NULL) {
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C9BC(gfxCtx);
+ Gfx_SetupDL61_Xlu(gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, sLightningTextures[texIndex]);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB,
this->rPrimColorA);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c
index 3402eb2b7..69b24c029 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c
@@ -68,7 +68,7 @@ u32 EffectSsSbn_Init(PlayState* play, u32 index, EffectSs* this, void* initParam
this->rReg4 = 250;
this->rReg4Step = 30;
- this->rScale = randPlusMinusPoint5Scaled(100.0f) + (initParams->scale * 120.0f);
+ this->rScale = Rand_CenteredFloat(100.0f) + (initParams->scale * 120.0f);
if (this->rScale < 600) {
this->rScale = 600;
} else if (this->rScale > 1500) {
@@ -135,7 +135,7 @@ void EffectSsSbn_DrawSliding(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha);
@@ -175,7 +175,7 @@ void EffectSsSbn_Draw(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C2DC(gfxCtx);
+ Gfx_SetupDL25_Xlu(gfxCtx);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
index a9a190948..312ed5f2f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c
@@ -70,7 +70,7 @@ void EffectSsSibuki_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA);
gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c
index cd0ea0fad..773984c80 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c
@@ -46,14 +46,14 @@ void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
f32 scale = this->rgScale / 100.0f;
- func_8012C28C(gfxCtx);
- func_8012C2DC(play->state.gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
OPEN_DISPS(gfxCtx);
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
- POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
+ POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL);
gDPPipeSync(POLY_XLU_DISP++);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c
index 4f1aa5d91..c1615e2bf 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c
@@ -50,7 +50,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Scale(0.01f, 0.0025f, 0.01f, MTXMODE_APPLY);
Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C28C(gfxCtx);
+ Gfx_SetupDL25_Opa(gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList);
gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
index 6e6b48156..1856ba6ac 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c
@@ -21,10 +21,10 @@ EffectSsInit Effect_Ss_Stone1_InitVars = {
};
typedef struct {
- /* 0x00 */ TexturePtr texture;
- /* 0x04 */ Color_RGBA8 primColor;
- /* 0x08 */ Color_RGBA8 envColor;
-} EffStoneDrawInfo;
+ /* 0x0 */ TexturePtr texture;
+ /* 0x4 */ Color_RGBA8 primColor;
+ /* 0x8 */ Color_RGBA8 envColor;
+} EffStoneDrawInfo; // size = 0xC
static EffStoneDrawInfo sDrawInfo[] = {
{ gEffStone8Tex, { 200, 0, 0, 255 }, { 0, 0, 0, 255 } },
@@ -65,7 +65,7 @@ void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this) {
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- func_8012C9BC(gfxCtx);
+ Gfx_SetupDL61_Xlu(gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(drawParams->texture));
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, drawParams->primColor.r, drawParams->primColor.g, drawParams->primColor.b,
255);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h
index b50868b81..627bbd4f2 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h
@@ -4,8 +4,8 @@
#include "global.h"
typedef struct {
- /* 0x00 */ Vec3f pos;
- /* 0x0C */ s32 reg0;
+ /* 0x0 */ Vec3f pos;
+ /* 0xC */ s32 reg0;
} EffectSsStone1InitParams; // size = 0x10
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
index 759e1511c..03bc1e81d 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
@@ -7,6 +7,8 @@
#include "global.h"
#include "z_fbdemo_wipe3.h"
+#define THIS ((TransitionWipe3*)thisx)
+
void* TransitionWipe3_Init(void* thisx);
void TransitionWipe3_Destroy(void* thisx);
void TransitionWipe3_Update(void* thisx, s32 updateRate);
@@ -17,37 +19,159 @@ void TransitionWipe3_SetColor(void* thisx, u32 color);
void TransitionWipe3_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe3_IsDone(void* thisx);
-#if 0
-TransitionInit TransitionWipe3_InitVars = {
- TransitionWipe3_Init,
- TransitionWipe3_Destroy,
- TransitionWipe3_Update,
- TransitionWipe3_Draw,
- TransitionWipe3_Start,
- TransitionWipe3_SetType,
- TransitionWipe3_SetColor,
- TransitionWipe3_SetEnvColor,
- TransitionWipe3_IsDone,
+#include "assets/overlays/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.c"
+
+TexturePtr sTransWipe3Textures[] = {
+ fbdemo_tex_000520, fbdemo_tex_000920, fbdemo_tex_000D20, fbdemo_tex_001120,
+ fbdemo_tex_001520, fbdemo_tex_000520, fbdemo_tex_000520, fbdemo_tex_000520,
};
-#endif
+TransitionInit TransitionWipe3_InitVars = {
+ TransitionWipe3_Init, TransitionWipe3_Destroy, TransitionWipe3_Update,
+ TransitionWipe3_Draw, TransitionWipe3_Start, TransitionWipe3_SetType,
+ TransitionWipe3_SetColor, TransitionWipe3_SetEnvColor, TransitionWipe3_IsDone,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Start.s")
+#define TRANS3_GET_SPEED(type) (type & 1)
+#define TRANS3_GET_TEX_INDEX(type) ((type >> 1) & 7)
+#define TRANS3_GET_COLOR(type) ((type >> 4) & 3)
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Init.s")
+typedef enum {
+ /* 0 */ TRANS_WIPE3_DIR_IN,
+ /* 1 */ TRANS_WIPE3_DIR_OUT
+} TransitionWipe3Direction;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Destroy.s")
+typedef enum {
+ /* 0 */ TRANS_WIPE3_SPEED_SLOW,
+ /* 1 */ TRANS_WIPE3_SPEED_FAST
+} TransitionWipe3Speed;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/func_80AC68B4.s")
+typedef enum {
+ /* 0 */ TRANS_WIPE3_COLOR_BLACK,
+ /* 1 */ TRANS_WIPE3_COLOR_WHITE,
+ /* 2 */ TRANS_WIPE3_COLOR_GRAY
+} TransitionWipe3Color;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Update.s")
+void TransitionWipe3_Start(void* thisx) {
+ TransitionWipe3* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Draw.s")
+ this->isDone = false;
+ this->curTexture = sTransWipe3Textures[this->texIndex % ARRAY_COUNTU(sTransWipe3Textures)];
+ if (this->speedType == TRANS_WIPE3_SPEED_SLOW) {
+ this->wipeSpeed = 20;
+ } else {
+ this->wipeSpeed = 10;
+ }
+ if (this->colorType == TRANS_WIPE3_COLOR_BLACK) {
+ this->color.rgba = RGBA8(0, 0, 0, 255);
+ } else if (this->colorType == TRANS_WIPE3_COLOR_WHITE) {
+ this->color.rgba = RGBA8(255, 255, 255, 255);
+ } else {
+ this->color.rgba = RGBA8(160, 160, 160, 255);
+ }
+ if (this->dir != TRANS_WIPE3_DIR_IN) {
+ this->scrollY = 0;
+ } else {
+ this->scrollY = 500;
+ if (this->texIndex == 2) {
+ func_8019F128(NA_SE_OC_SECRET_WARP_OUT);
+ }
+ }
+ guPerspective(&this->projection, &this->normal, 60.0f, 4.0f / 3.0f, 10.0f, 12800.0f, 1.0f);
+ guLookAt(&this->lookAt, 0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_IsDone.s")
+void* TransitionWipe3_Init(void* thisx) {
+ TransitionWipe3* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetType.s")
+ bzero(this, sizeof(TransitionWipe3));
+ return this;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetColor.s")
+void TransitionWipe3_Destroy(void* thisx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetEnvColor.s")
+void TransitionWipe3_UpdateScrollY(void* thisx, f32 scroll) {
+ TransitionWipe3* this = THIS;
+
+ this->scrollY = (s32)(500.0f * scroll);
+}
+
+void TransitionWipe3_Update(void* thisx, s32 updateRate) {
+ TransitionWipe3* this = THIS;
+
+ if (this->dir != TRANS_WIPE3_DIR_IN) {
+ if ((this->scrollY == 0) && (this->texIndex == 2)) {
+ func_8019F128(NA_SE_OC_SECRET_WARP_IN);
+ }
+ this->scrollY += (this->wipeSpeed * 3) / updateRate;
+ if (this->scrollY >= 500) {
+ this->scrollY = 500;
+ this->isDone = true;
+ }
+ } else {
+ this->scrollY -= (this->wipeSpeed * 3) / updateRate;
+ if (this->scrollY <= 0) {
+ this->scrollY = 0;
+ this->isDone = true;
+ }
+ }
+}
+
+void TransitionWipe3_Draw(void* thisx, Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ Mtx* modelView = &THIS->modelView[THIS->frame];
+ f32 scale = 14.8f;
+ Gfx* texScroll;
+
+ THIS->frame ^= 1;
+ gDPPipeSync(gfx++);
+ texScroll = Gfx_BranchTexScroll(&gfx, THIS->scrollX, THIS->scrollY, 16, 64);
+ gSPSegment(gfx++, 0x09, texScroll);
+ gSPSegment(gfx++, 0x08, THIS->curTexture);
+ gDPSetColor(gfx++, G_SETPRIMCOLOR, THIS->color.rgba);
+ gDPSetColor(gfx++, G_SETENVCOLOR, THIS->color.rgba);
+ gSPMatrix(gfx++, &THIS->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
+ gSPPerspNormalize(gfx++, THIS->normal);
+ gSPMatrix(gfx++, &THIS->lookAt, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
+
+ if (scale != 1.0f) {
+ guScale(modelView, scale, scale, 1.0f);
+ gSPMatrix(gfx++, modelView, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ }
+ gSPDisplayList(gfx++, sTransWipe3DL);
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
+
+s32 TransitionWipe3_IsDone(void* thisx) {
+ TransitionWipe3* this = THIS;
+
+ return this->isDone;
+}
+
+void TransitionWipe3_SetType(void* thisx, s32 type) {
+ TransitionWipe3* this = THIS;
+
+ if (type & TRANS_TYPE_SET_PARAMS) {
+ this->speedType = TRANS3_GET_SPEED(type);
+ this->texIndex = TRANS3_GET_TEX_INDEX(type);
+ this->colorType = TRANS3_GET_COLOR(type);
+ } else if (type == TRANS_INSTANCE_TYPE_FILL_OUT) {
+ this->dir = TRANS_WIPE3_DIR_OUT;
+ } else {
+ this->dir = TRANS_WIPE3_DIR_IN;
+ }
+}
+
+void TransitionWipe3_SetColor(void* thisx, u32 color) {
+ TransitionWipe3* this = THIS;
+
+ this->color.rgba = color;
+}
+
+void TransitionWipe3_SetEnvColor(void* thisx, u32 color) {
+ TransitionWipe3* this = THIS;
+
+ this->envColor.rgba = color;
+}
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
index b023ecb8b..711f97952 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
@@ -5,7 +5,22 @@
#include "color.h"
typedef struct {
- /* 0x000 */ char unk_0[0x120];
+ /* 0x000 */ Color_RGBA8_u32 color;
+ /* 0x008 */ Color_RGBA8_u32 envColor;
+ /* 0x004 */ u32 scrollX;
+ /* 0x00C */ s32 scrollY;
+ /* 0x010 */ s32 wipeSpeed;
+ /* 0x014 */ u8 dir;
+ /* 0x015 */ u8 colorType;
+ /* 0x016 */ u8 speedType;
+ /* 0x017 */ u8 texIndex;
+ /* 0x018 */ u8 isDone;
+ /* 0x019 */ u8 frame;
+ /* 0x01A */ u16 normal;
+ /* 0x01C */ TexturePtr curTexture;
+ /* 0x020 */ Mtx projection;
+ /* 0x060 */ Mtx lookAt;
+ /* 0x0A0 */ Mtx modelView[2];
} TransitionWipe3; // size = 0x120
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
index 48c8bdf58..9e11df190 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
@@ -81,7 +81,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
Gfx* gfx = *gfxP;
s32 width = gScreenWidth;
s32 height = gScreenHeight;
- void* sp50 = D_801FBB90;
+ void* workBuffer = gWorkBuffer;
TransitionWipe5* this = THIS;
s32 alpha = (1.0f - this->unk_0C) * 255.0f;
@@ -92,7 +92,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
- func_8014116C(&gfx, D_0F000000, sp50, width, height, 1);
+ func_8014116C(&gfx, D_0F000000, workBuffer, width, height, 1);
} else {
if (alpha == 255) {
gDPSetOtherMode(gfx++,
@@ -108,7 +108,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
gDPSetEnvColor(gfx++, 255, 255, 255, alpha);
gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0,
ENVIRONMENT);
- func_8014116C(&gfx, sp50, D_0F000000, width, height, 0);
+ func_8014116C(&gfx, workBuffer, D_0F000000, width, height, 0);
}
gDPPipeSync(gfx++);
gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
index 845baa3cb..134c6457b 100644
--- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
+++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
@@ -4,9 +4,10 @@
* Description: "Dawn of ... day" screen
*/
+#include "global.h"
#include "z_daytelop.h"
+#include "z64save.h"
#include "z64shrink_window.h"
-#include "z64view.h"
#include "misc/daytelop_static/daytelop_static.h"
#include "interface/icon_item_gameover_static/icon_item_gameover_static.h"
@@ -129,7 +130,8 @@ void DayTelop_Draw(DayTelopState* this) {
GraphicsContext* gfxCtx = this->state.gfxCtx;
OPEN_DISPS(gfxCtx);
- func_8012C628(this->state.gfxCtx);
+
+ Gfx_SetupDL39_Opa(this->state.gfxCtx);
if (gSaveContext.save.day >= 9) {
// Draw a white screen
@@ -139,7 +141,7 @@ void DayTelop_Draw(DayTelopState* this) {
gDPFillRectangle(POLY_OPA_DISP++, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
- func_8012C628(this->state.gfxCtx);
+ Gfx_SetupDL39_Opa(this->state.gfxCtx);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h
index a7350e898..da49827c3 100644
--- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h
+++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h
@@ -1,16 +1,13 @@
#ifndef Z64_DAYTELOP_H
#define Z64_DAYTELOP_H
-#include "global.h"
-
-void DayTelop_Init(GameState* thisx);
-void DayTelop_Destroy(GameState* thisx);
+#include "z64game.h"
+#include "z64view.h"
typedef struct {
/* 0x000 */ GameState state;
/* 0x0A4 */ void* daytelopStaticFile;
/* 0x0A8 */ void* gameoverStaticFile;
- /* 0x0AC */ UNK_TYPE1 unk_AC[0x4];
/* 0x0B0 */ View view;
/* 0x218 */ UNK_TYPE1 unk_218[0x28];
/* 0x240 */ s16 transitionCountdown;
@@ -24,4 +21,7 @@ typedef enum {
/* 2 */ DAYTELOP_HOURSTEXT_ON
} DaytelopFadeState;
+void DayTelop_Init(GameState* thisx);
+void DayTelop_Destroy(GameState* thisx);
+
#endif
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h b/src/overlays/gamestates/ovl_file_choose/z_file_choose.h
deleted file mode 100644
index f3231ec56..000000000
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef Z64_FILE_CHOOSE_H
-#define Z64_FILE_CHOOSE_H
-
-#include "global.h"
-
-void FileSelect_Init(GameState* thisx);
-void FileSelect_Destroy(GameState* thisx);
-
-typedef struct FileSelectState {
- /* 0x00000 */ GameState state;
- /* 0x000A4 */ Vtx* unk_A4;
- /* 0x000A8 */ u8* staticSegment;
- /* 0x000AC */ u8* parameterSegment;
- /* 0x000B0 */ u8* titleSegment;
- /* 0x000B8 */ View view;
- /* 0x00220 */ SramContext sramCtx;
- /* 0x00248 */ SkyboxContext skyboxCtx;
- /* 0x00470 */ MessageContext msgCtx;
- /* 0x12550 */ Font font;
- /* 0x242E0 */ EnvironmentContext envCtx;
- /* 0x243E0 */ Vtx* unk_243E0;
- /* 0x243E4 */ Vtx* unk_243E4;
- /* 0x243E8 */ u8 newf2[2][6];
- /* 0x243F4 */ u8 newf[2][6];
- /* 0x24400 */ UNK_TYPE1 unk_24400[0xC];
- /* 0x2440C */ u16 unk_2440C[2];
- /* 0x24410 */ u16 unk_24410[2];
- /* 0x24414 */ u8 unk_24414[2][8]; // playername
- /* 0x24424 */ u8 unk_24424[2][8]; // playername
- /* 0x24434 */ s16 healthCapacity[2];
- /* 0x24438 */ u16 unk_24438[2];
- /* 0x2443C */ s16 health[2];
- /* 0x24440 */ u16 unk_24440[2];
- /* 0x24444 */ u32 unk_24444[2];
- /* 0x2444C */ u32 unk_2444C[2];
- /* 0x24454 */ s8 unk_24454[2];
- /* 0x24456 */ u8 unk_24456[2];
- /* 0x24458 */ u16 unk_24458[2];
- /* 0x2445C */ u16 unk_2445C[2];
- /* 0x24460 */ s16 unk_24460[2];
- /* 0x24464 */ s16 unk_24464[2];
- /* 0x24468 */ u8 unk_24468[2];
- /* 0x2446A */ u8 unk_2446A[2];
- /* 0x2446C */ s16 rupees[2];
- /* 0x24470 */ s16 unk_24470[2];
- /* 0x24474 */ s8 unk_24474[2];
- /* 0x24476 */ s8 unk_24476[2];
- /* 0x24478 */ s8 maskCount[2];
- /* 0x2447A */ s8 unk_2447A[2];
- /* 0x2447C */ s8 heartPieceCount[2];
- /* 0x2447E */ s8 unk_2447E[2];
- /* 0x24480 */ s16 unk_24480;
- /* 0x24482 */ s16 unk_24482;
- /* 0x24484 */ s16 unk_24484;
- /* 0x24486 */ s16 unk_24486;
- /* 0x24488 */ s16 unk_24488;
- /* 0x2448A */ s16 unk_2448A;
- /* 0x2448C */ s16 unk_2448C;
- /* 0x2448E */ s16 unk_2448E;
- /* 0x24490 */ s16 unk_24490;
- /* 0x24492 */ s16 unk_24492[3];
- /* 0x24498 */ s16 unk_24498;
- /* 0x2449A */ s16 unk_2449A[6];
- /* 0x244A6 */ s16 fileNum;
- /* 0x244A8 */ s16 unk_244A8;
- /* 0x244AA */ s16 unk_244AA;
- /* 0x244AC */ s16 unk_244AC;
- /* 0x244AE */ s16 unk_244AE;
- /* 0x244B0 */ s16 unk_244B0[3];
- /* 0x244B6 */ s16 unk_244B6[2];
- /* 0x244BA */ s16 unk_244BA;
- /* 0x244BC */ s16 unk_244BC[3];
- /* 0x244C2 */ s16 unk_244C2[3];
- /* 0x244C8 */ s16 unk_244C8[3];
- /* 0x244CE */ s16 unk_244CE[3];
- /* 0x244D4 */ s16 unk_244D4[3];
- /* 0x244DA */ s16 unk_244DA[4];
- /* 0x244E2 */ s16 unk_244E2;
- /* 0x244E4 */ s16 unk_244E4;
- /* 0x244E6 */ s16 unk_244E6;
- /* 0x244E8 */ s16 unk_244E8;
- /* 0x244EA */ s16 unk_244EA[4];
- /* 0x244F2 */ s16 unk_244F2;
- /* 0x244F4 */ s16 unk_244F4;
- /* 0x244F6 */ s16 unk_244F6[2];
- /* 0x244FA */ s16 unk_244FA;
- /* 0x244FC */ s16 unk_244FC;
- /* 0x244FE */ s16 unk_244FE;
- /* 0x24500 */ s16 unk_24500;
- /* 0x24502 */ s16 unk_24502;
- /* 0x24504 */ s16 unk_24504;
- /* 0x24506 */ s16 unk_24506;
- /* 0x24508 */ s16 unk_24508;
- /* 0x2450A */ s16 unk_2450A;
- /* 0x2450C */ f32 unk_2450C;
- /* 0x24510 */ s16 unk_24510;
- /* 0x24512 */ s16 unk_24512;
- /* 0x24514 */ s16 unk_24514;
- /* 0x24516 */ s16 unk_24516;
- /* 0x24518 */ s16 unk_24518;
- /* 0x2451A */ s16 unk_2451A;
- /* 0x2451C */ s16 unk_2451C;
- /* 0x2451E */ s16 unk_2451E[5];
- /* 0x24528 */ s16 unk_24528;
- /* 0x2452A */ s16 unk_2452A;
- /* 0x2452C */ s16 unk_2452C[4];
- /* 0x24534 */ s16 unk_24534[4];
- /* 0x2453C */ s16 unk_2453C[4];
- /* 0x24544 */ s16 unk_24544[4];
- /* 0x2454C */ s16 unk_2454C;
- /* 0x2454E */ s16 unk_2454E;
- /* 0x24550 */ s16 unk_24550;
-} FileSelectState; // size = 0x24558
-
-#endif
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c
deleted file mode 100644
index 2e0e9a0d4..000000000
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * File: z_file_choose_80807940.c
- * Overlay: ovl_file_choose
- * Description:
- */
-
-#include "z_file_choose.h"
-#include "z64rumble.h"
-
-extern UNK_TYPE D_01002800;
-extern UNK_TYPE D_01007980;
-extern UNK_TYPE D_0102A6B0;
-extern UNK_TYPE D_0102B170;
-extern UNK_TYPE D_010310F0;
-extern UNK_TYPE D_010311F0;
-
-// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file
-extern GfxMasterList D_0E000000;
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807940.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807A78.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807C58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808214.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808D30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808F1C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809DF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809EA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A3CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A418.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A4A0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A6BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A708.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BBFC.s")
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
index da9144e7c..0cc43ad50 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c
@@ -4,96 +4,2545 @@
* Description:
*/
-#include "z_file_choose.h"
+#include "z_file_select.h"
+#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "z64rumble.h"
+#include "z64save.h"
#include "z64shrink_window.h"
#include "z64view.h"
+#include "interface/parameter_static/parameter_static.h"
+#include "misc/title_static/title_static.h"
-extern UNK_TYPE D_01002800;
-extern UNK_TYPE D_01007980;
-extern UNK_TYPE D_0102A6B0;
-extern UNK_TYPE D_0102B170;
-extern UNK_TYPE D_010310F0;
-extern UNK_TYPE D_010311F0;
+s32 D_808144F10 = 100;
+f32 D_808144F14 = 8.0f;
+f32 D_808144F18 = 100.0f;
+s32 D_808144F1C = 0;
-// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file
-extern GfxMasterList D_0E000000;
+static Gfx sScreenFillSetupDL[] = {
+ gsDPPipeSync(),
+ gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
+ G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_1PRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsSPEndDisplayList(),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC20.s")
+s16 sFileInfoBoxPartWidths[] = {
+ 36, 36, 36, 36, 24, 28, 28,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080bc44.s")
+s16 sWindowContentColors[] = { 100, 150, 255 };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080BC4C.s")
+s16 sFileSelectSkyboxRotation = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC58.s")
+s16 sWalletFirstDigit[] = {
+ 1, // tens (Default Wallet)
+ 0, // hundreds (Adult Wallet)
+ 0, // hundreds (Giant Wallet)
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BDAC.s")
+void FileSelect_IncrementConfigMode(FileSelectState* this) {
+ this->configMode++;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_RenderView.s")
+void FileSelect_Noop1(void) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BE60.s")
+void FileSelect_Noop2(FileSelectState* this) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C040.s")
+void FileSelect_InitModeUpdate(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C228.s")
+ if (this->configMode == CM_FADE_IN_START) {
+ if (gSaveContext.options.optionId != 0xA51D) { // Magic number?
+ this->configMode++;
+ } else {
+ this->menuMode = FS_MENU_MODE_CONFIG;
+ this->configMode = CM_FADE_IN_START;
+ this->titleLabel = FS_TITLE_SELECT_FILE;
+ this->nextTitleLabel = FS_TITLE_OPEN_FILE;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C29C.s")
+ if (this->configMode == CM_FADE_IN_END) {
+ this->screenFillAlpha -= 40;
+ if (this->screenFillAlpha <= 0) {
+ this->screenFillAlpha = 0;
+ this->configMode++; // CM_MAIN_MENU
+ }
+ } else if (this->configMode == CM_MAIN_MENU) {
+ FileSelect_IncrementConfigMode(this); // CM_SETUP_COPY_SOURCE
+ } else {
+ this->screenFillAlpha += 40;
+ if (this->screenFillAlpha >= 255) {
+ this->screenFillAlpha = 255;
+ this->menuMode = FS_MENU_MODE_CONFIG;
+ this->configMode = CM_FADE_IN_START;
+ this->titleLabel = FS_TITLE_SELECT_FILE;
+ this->nextTitleLabel = FS_TITLE_OPEN_FILE;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C324.s")
+void FileSelect_InitModeDraw(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C3A8.s")
+ Gfx_SetupDL39_Opa(this->state.gfxCtx);
+ FileSelect_Noop2(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D164.s")
+void FileSelect_SetView(FileSelectState* this, f32 eyeX, f32 eyeY, f32 eyeZ) {
+ Vec3f eye;
+ Vec3f lookAt;
+ Vec3f up;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D170.s")
+ eye.x = eyeX;
+ eye.y = eyeY;
+ eye.z = eyeZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D1BC.s")
+ lookAt.x = lookAt.y = lookAt.z = 0.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D220.s")
+ up.x = up.z = 0.0f;
+ up.y = 1.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D284.s")
+ View_LookAt(&this->view, &eye, &lookAt, &up);
+ View_Apply(&this->view, VIEW_ALL | VIEW_FORCE_VIEWING | VIEW_FORCE_VIEWPORT | VIEW_FORCE_PROJECTION_PERSPECTIVE);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D2EC.s")
+Gfx* FileSelect_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 width, s16 height, s16 point) {
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D3D0.s")
+ gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D40C.s")
+ return gfx;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D6D4.s")
+/**
+ * Fade in the menu window and title label.
+ * If a file is occupied fade in the name, name box, and connector.
+ * Fade in the copy erase and options button according to the window alpha.
+ */
+void FileSelect_FadeInMenuElements(FileSelectState* this) {
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080F25C.s")
+ this->titleAlpha[FS_TITLE_CUR] += 20;
+ this->windowAlpha += 16;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808108DC.s")
+ for (i = 0; i < 3; i++) {
+ this->fileButtonAlpha[i] = this->windowAlpha;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80811CB8.s")
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha;
+ this->connectorAlpha[i] += 20;
+ if (this->connectorAlpha[i] >= 255) {
+ this->connectorAlpha[i] = 255;
+ }
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha;
+ this->connectorAlpha[i] += 20;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812460.s")
+ if (this->connectorAlpha[i] >= 255) {
+ this->connectorAlpha[i] = 255;
+ }
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812668.s")
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = this->windowAlpha;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812760.s")
+/**
+ * Converts a numerical value to hundreds-tens-ones digits
+ */
+void FileSelect_SplitNumber(u16 value, u16* hundreds, u16* tens, u16* ones) {
+ *hundreds = 0;
+ *tens = 0;
+ *ones = value;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812840.s")
+ do {
+ if ((*ones - 100) < 0) {
+ break;
+ }
+ (*hundreds)++;
+ *ones -= 100;
+ } while (true);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812980.s")
+ do {
+ if ((*ones - 10) < 0) {
+ break;
+ }
+ (*tens)++;
+ *ones -= 10;
+ } while (true);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812A6C.s")
+// Start of Config Mode Update Functions
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D44.s")
+/**
+ * Reduce the alpha of the black screen fill to create a fade in effect.
+ * Additionally, slide the window from the right to the center of the screen.
+ * Update function for `CM_FADE_IN_START`
+ */
+void FileSelect_StartFadeIn(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D94.s")
+ FileSelect_FadeInMenuElements(this);
+ this->screenFillAlpha -= 40;
+ this->windowPosX -= 20;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812E94.s")
+ if (this->windowPosX <= -94) {
+ this->windowPosX = -94;
+ this->configMode = CM_FADE_IN_END;
+ this->screenFillAlpha = 0;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812ED0.s")
+/**
+ * Finish fading in the remaining menu elements.
+ * Fade in the controls text at the bottom of the screen.
+ * Update function for `CM_FADE_IN_END`
+ */
+void FileSelect_FinishFadeIn(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_UpdateAndDrawSkybox.s")
+ this->controlsAlpha += 20;
+ FileSelect_FadeInMenuElements(this);
-void FileSelect_Main(GameState* thisx);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Main.s")
+ if (this->titleAlpha[FS_TITLE_CUR] >= 255) {
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->controlsAlpha = 255;
+ this->windowAlpha = 200;
+ this->configMode = CM_MAIN_MENU;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80813908.s")
+u8 sEmptyName[] = { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Destroy.s")
+/**
+ * Update the cursor and wait for the player to select a button to change menus accordingly.
+ * If an empty file is selected, enter the name entry config mode.
+ * If an occupied file is selected, enter the `Select` menu mode.
+ * If copy, erase, or options is selected, set config mode accordingly.
+ * Lastly, set any warning labels if appropriate.
+ * Update function for `CM_MAIN_MENU`
+ */
+void FileSelect_UpdateMainMenu(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Init.s")
+ if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ if (this->buttonIndex <= FS_BTN_MAIN_FILE_3) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->configMode = CM_ROTATE_TO_NAME_ENTRY;
+ this->kbdButton = FS_KBD_BTN_NONE;
+ this->charPage = FS_CHAR_PAGE_HIRA;
+ if (gSaveContext.options.language != 0) {
+ this->charPage = FS_CHAR_PAGE_ENG;
+ }
+ this->kbdX = 0;
+ this->kbdY = 0;
+ this->charIndex = 0;
+ this->charBgAlpha = 0;
+ this->newFileNameCharCount = 0;
+ this->nameEntryBoxPosX = 120;
+ this->nameEntryBoxAlpha = 0;
+ Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName));
+ } else {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->actionTimer = 4;
+ this->selectMode = SM_FADE_MAIN_TO_SELECT;
+ this->selectedFileIndex = this->buttonIndex;
+ this->menuMode = FS_MENU_MODE_SELECT;
+ this->nextTitleLabel = FS_TITLE_OPEN_FILE;
+ }
+ } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->configMode = CM_ROTATE_TO_NAME_ENTRY;
+ this->kbdButton = FS_KBD_BTN_NONE;
+ this->charPage = FS_CHAR_PAGE_HIRA;
+ if (gSaveContext.options.language != 0) {
+ this->charPage = FS_CHAR_PAGE_ENG;
+ }
+ this->kbdX = 0;
+ this->kbdY = 0;
+ this->charIndex = 0;
+ this->charBgAlpha = 0;
+ this->newFileNameCharCount = 0;
+ this->nameEntryBoxPosX = 120;
+ this->nameEntryBoxAlpha = 0;
+ Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName));
+ } else {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->actionTimer = 4;
+ this->selectMode = SM_FADE_MAIN_TO_SELECT;
+ this->selectedFileIndex = this->buttonIndex;
+ this->menuMode = FS_MENU_MODE_SELECT;
+ this->nextTitleLabel = FS_TITLE_OPEN_FILE;
+ }
+ } else if (this->warningLabel == FS_WARNING_NONE) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->prevConfigMode = this->configMode;
+
+ if (this->buttonIndex == FS_BTN_MAIN_COPY) {
+ this->configMode = CM_SETUP_COPY_SOURCE;
+ this->nextTitleLabel = FS_TITLE_COPY_FROM;
+ } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) {
+ this->configMode = CM_SETUP_ERASE_SELECT;
+ this->nextTitleLabel = FS_TITLE_ERASE_FILE;
+ } else {
+ this->configMode = CM_MAIN_TO_OPTIONS;
+ this->kbdButton = FS_KBD_BTN_HIRA;
+ this->kbdX = 0;
+ this->kbdY = 0;
+ this->charBgAlpha = 0;
+ this->newFileNameCharCount = 0;
+ this->nameEntryBoxPosX = 120;
+ }
+ this->actionTimer = 4;
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN;
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState));
+ } else {
+ if (ABS_ALT(this->stickAdjY) > 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ if (this->stickAdjY > 30) {
+ this->buttonIndex--;
+ if (this->buttonIndex == FS_BTN_MAIN_FILE_3) {
+ this->buttonIndex = FS_BTN_MAIN_FILE_2;
+ }
+ if (this->buttonIndex < FS_BTN_MAIN_FILE_1) {
+ this->buttonIndex = FS_BTN_MAIN_OPTIONS;
+ }
+ } else {
+ this->buttonIndex++;
+ if (this->buttonIndex == FS_BTN_MAIN_FILE_3) {
+ this->buttonIndex = FS_BTN_MAIN_COPY;
+ }
+ if (this->buttonIndex > FS_BTN_MAIN_OPTIONS) {
+ this->buttonIndex = FS_BTN_MAIN_FILE_1;
+ }
+ }
+ }
+
+ if (this->buttonIndex == FS_BTN_MAIN_COPY) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) &&
+ !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_FILE_COPY;
+ this->emptyFileTextAlpha = 255;
+ } else if (NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) &&
+ NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_EMPTY_FILES;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else {
+ if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_FILE_COPY;
+ this->emptyFileTextAlpha = 255;
+ } else if (SLOT_OCCUPIED(this, 0) && SLOT_OCCUPIED(this, 1) && SLOT_OCCUPIED(this, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_EMPTY_FILES;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+ } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) &&
+ !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_FILE_ERASE;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else {
+ if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) {
+ this->warningButtonIndex = this->buttonIndex;
+ this->warningLabel = FS_WARNING_NO_FILE_ERASE;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+}
+
+/**
+ * Update function for `CM_UNUSED_31`
+ */
+void FileSelect_UnusedCM31(GameState* thisx) {
+}
+
+/**
+ * Delay the next config mode from running until `D_80814564` reaches 254.
+ * Because the timer increments by 2, the delay is 127 frames (assuming the value was not changed by reg editor).
+ * Unused in the final game, was possibly used for debugging.
+ * Update function for `CM_UNUSED_DELAY`
+ */
+void FileSelect_UnusedCMDelay(GameState* thisx) {
+ static s16 D_80814564 = 0;
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ D_80814564 += 2;
+
+ if (D_80814564 == 254) {
+ this->configMode = this->nextConfigMode;
+ D_80814564 = 0;
+ }
+}
+
+/**
+ * Rotate the window from the main menu to the name entry menu.
+ * Update function for `CM_ROTATE_TO_NAME_ENTRY`
+ */
+void FileSelect_RotateToNameEntry(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->windowRot += 50.0f;
+
+ if (this->windowRot >= 314.0f) {
+ this->windowRot = 314.0f;
+ this->configMode = CM_START_NAME_ENTRY;
+ }
+}
+
+/**
+ * Rotate the window from the main menu to the options menu.
+ * Update function for `CM_MAIN_TO_OPTIONS`
+ */
+void FileSelect_RotateToOptions(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->windowRot += 50.0f;
+
+ if (this->windowRot >= 314.0f) {
+ this->windowRot = 314.0f;
+ this->configMode = CM_START_OPTIONS;
+ }
+}
+
+/**
+ * Rotate the window from the options menu to the main menu.
+ * Update function for `CM_NAME_ENTRY_TO_MAIN` and `CM_OPTIONS_TO_MAIN`
+ */
+void FileSelect_RotateToMain(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->windowRot += 50.0f;
+
+ if (this->windowRot >= 628.0f) {
+ this->windowRot = 0.0f;
+ this->configMode = CM_MAIN_MENU;
+ }
+}
+
+void (*sConfigModeUpdateFuncs[])(GameState*) = {
+ // Main Menu
+ FileSelect_StartFadeIn, // CM_FADE_IN_START
+ FileSelect_FinishFadeIn, // CM_FADE_IN_END
+ FileSelect_UpdateMainMenu, // CM_MAIN_MENU
+ // Copy File
+ FileSelect_SetupCopySource, // CM_SETUP_COPY_SOURCE
+ FileSelect_SelectCopySource, // CM_SELECT_COPY_SOURCE
+ FileSelect_SetupCopyDest1, // CM_SETUP_COPY_DEST_1
+ FileSelect_SetupCopyDest2, // CM_SETUP_COPY_DEST_2
+ FileSelect_SelectCopyDest, // CM_SELECT_COPY_DEST
+ FileSelect_ExitToCopySource1, // CM_EXIT_TO_COPY_SOURCE_1
+ FileSelect_ExitToCopySource2, // CM_EXIT_TO_COPY_SOURCE_2
+ FileSelect_SetupCopyConfirm1, // CM_SETUP_COPY_CONFIRM_1
+ FileSelect_SetupCopyConfirm2, // CM_SETUP_COPY_CONFIRM_2
+ FileSelect_CopyConfirm, // CM_COPY_CONFIRM
+ FileSelect_CopyWaitForFlashSave, // CM_COPY_WAIT_FOR_FLASH_SAVE
+ FileSelect_ReturnToCopyDest, // CM_RETURN_TO_COPY_DEST
+ FileSelect_CopyAnim1, // CM_COPY_ANIM_1
+ FileSelect_CopyAnim2, // CM_COPY_ANIM_2
+ FileSelect_CopyAnim3, // CM_COPY_ANIM_3
+ FileSelect_CopyAnim4, // CM_COPY_ANIM_4
+ FileSelect_CopyAnim5, // CM_COPY_ANIM_5
+ FileSelect_ExitCopyToMain, // CM_COPY_RETURN_MAIN
+ // Erase File
+ FileSelect_SetupEraseSelect, // CM_SETUP_ERASE_SELECT
+ FileSelect_EraseSelect, // CM_ERASE_SELECT
+ FileSelect_SetupEraseConfirm1, // CM_SETUP_ERASE_CONFIRM_1
+ FileSelect_SetupEraseConfirm2, // CM_SETUP_ERASE_CONFIRM_2
+ FileSelect_EraseConfirm, // CM_ERASE_CONFIRM
+ FileSelect_ExitToEraseSelect1, // CM_EXIT_TO_ERASE_SELECT_1
+ FileSelect_ExitToEraseSelect2, // CM_EXIT_TO_ERASE_SELECT_2
+ FileSelect_EraseAnim1, // CM_ERASE_ANIM_1
+ FileSelect_EraseWaitForFlashSave, // CM_ERASE_WAIT_FOR_FLASH_SAVE
+ FileSelect_EraseAnim2, // CM_ERASE_ANIM_2
+ FileSelect_EraseAnim3, // CM_ERASE_ANIM_3
+ FileSelect_ExitEraseToMain, // CM_EXIT_ERASE_TO_MAIN
+ FileSelect_UnusedCM31, // CM_UNUSED_31
+ // New File Name Entry
+ FileSelect_RotateToNameEntry, // CM_ROTATE_TO_NAME_ENTRY
+ FileSelect_StartNameEntry, // CM_START_NAME_ENTRY
+ FileSelect_UpdateKeyboardCursor, // CM_NAME_ENTRY
+ FileSelect_NameEntryWaitForFlashSave, // CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE
+ FileSelect_RotateToMain, // CM_NAME_ENTRY_TO_MAIN
+ // Options
+ FileSelect_RotateToOptions, // CM_MAIN_TO_OPTIONS
+ FileSelect_StartOptions, // CM_START_OPTIONS
+ FileSelect_UpdateOptionsMenu, // CM_OPTIONS_MENU
+ FileSelect_OptionsWaitForFlashSave, // CM_OPTIONS_WAIT_FOR_FLASH_SAVE
+ FileSelect_RotateToMain, // CM_OPTIONS_TO_MAIN
+ // Possible Debug
+ FileSelect_UnusedCMDelay, // CM_UNUSED_DELAY
+};
+
+s16 sCursorAlphaTargets[] = { 70, 200 };
+
+/**
+ * Updates the alpha of the cursor to make it pulsate.
+ */
+void FileSelect_PulsateCursor(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s32 alphaStep =
+ ABS_ALT(this->highlightColor[3] - sCursorAlphaTargets[this->highlightPulseDir]) / this->highlightTimer;
+
+ if (this->highlightColor[3] >= sCursorAlphaTargets[this->highlightPulseDir]) {
+ this->highlightColor[3] -= alphaStep;
+ } else {
+ this->highlightColor[3] += alphaStep;
+ }
+
+ this->highlightTimer--;
+
+ if (this->highlightTimer == 0) {
+ this->highlightColor[3] = sCursorAlphaTargets[this->highlightPulseDir];
+ this->highlightTimer = 20;
+ this->highlightPulseDir ^= 1;
+ }
+}
+
+void FileSelect_ConfigModeUpdate(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ sConfigModeUpdateFuncs[this->configMode](&this->state);
+}
+
+void FileSelect_SetWindowVtx(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 i;
+ s16 j;
+ s16 x;
+ s32 tmp;
+ s32 tmp2;
+ s32 tmp3;
+
+ this->windowVtx = GRAPH_ALLOC(this->state.gfxCtx, 80 * sizeof(Vtx));
+ tmp = this->windowPosX - 90;
+
+ for (x = 0, i = 0; i < 4; i++) {
+ tmp += 0x40;
+ tmp2 = (i == 3) ? 0x30 : 0x40;
+
+ for (j = 0, tmp3 = 0x50; j < 5; j++, x += 4, tmp3 -= 0x20) {
+ this->windowVtx[x].v.ob[0] = this->windowVtx[x + 2].v.ob[0] = tmp;
+
+ this->windowVtx[x + 1].v.ob[0] = this->windowVtx[x + 3].v.ob[0] = tmp2 + tmp;
+
+ this->windowVtx[x].v.ob[1] = this->windowVtx[x + 1].v.ob[1] = tmp3;
+
+ this->windowVtx[x + 2].v.ob[1] = this->windowVtx[x + 3].v.ob[1] = tmp3 - 0x20;
+
+ this->windowVtx[x].v.ob[2] = this->windowVtx[x + 1].v.ob[2] = this->windowVtx[x + 2].v.ob[2] =
+ this->windowVtx[x + 3].v.ob[2] = 0;
+
+ this->windowVtx[x].v.flag = this->windowVtx[x + 1].v.flag = this->windowVtx[x + 2].v.flag =
+ this->windowVtx[x + 3].v.flag = 0;
+
+ this->windowVtx[x].v.tc[0] = this->windowVtx[x].v.tc[1] = this->windowVtx[x + 1].v.tc[1] =
+ this->windowVtx[x + 2].v.tc[0] = 0;
+
+ this->windowVtx[x + 1].v.tc[0] = this->windowVtx[x + 3].v.tc[0] = tmp2 << 5;
+
+ this->windowVtx[x + 2].v.tc[1] = this->windowVtx[x + 3].v.tc[1] = 32 << 5;
+
+ this->windowVtx[x].v.cn[0] = this->windowVtx[x + 2].v.cn[0] = this->windowVtx[x].v.cn[1] =
+ this->windowVtx[x + 2].v.cn[1] = this->windowVtx[x].v.cn[2] = this->windowVtx[x + 2].v.cn[2] =
+ this->windowVtx[x + 1].v.cn[0] = this->windowVtx[x + 3].v.cn[0] = this->windowVtx[x + 1].v.cn[1] =
+ this->windowVtx[x + 3].v.cn[1] = this->windowVtx[x + 1].v.cn[2] =
+ this->windowVtx[x + 3].v.cn[2] = this->windowVtx[x].v.cn[3] =
+ this->windowVtx[x + 2].v.cn[3] = this->windowVtx[x + 1].v.cn[3] =
+ this->windowVtx[x + 3].v.cn[3] = 255;
+ }
+ }
+}
+
+s16 D_80814620[] = { 8, 8, 8, 0 };
+s16 D_80814628[] = { 12, 12, 12, 0 };
+s16 D_80814630[] = { 12, 12, 12, 0 };
+s16 D_80814638[] = {
+ 88, 104, 120, 940, 944, 948,
+};
+s16 D_80814644[] = { 88, 104, 120, 944 };
+s16 D_8081464C[] = { 940, 944 };
+s16 D_80814650[] = { 940, 944 };
+
+/*
+ * fileSelect->windowContentVtx[0] -> Title Label (4)
+ *
+ * fileSelect->windowContentVtx[4] -> File 1 InfoBox (28)
+ * fileSelect->windowContentVtx[32] -> File 2 InfoBox (28)
+ * fileSelect->windowContentVtx[60] -> File 3 InfoBox (28)
+ *
+ * ** FILE 1 **
+ *
+ * fileSelect->windowContentVtx[88] -> File Button
+ * fileSelect->windowContentVtx[92] -> File Name Box
+ * fileSelect->windowContentVtx[96] -> Connectors
+ * fileSelect->windowContentVtx[100] -> Blank Button (Owl Save)
+ *
+ * ** FILE 2 **
+ *
+ * fileSelect->windowContentVtx[104] -> Repeat of File 1 above
+ *
+ * ** FILE 3 **
+ *
+ * fileSelect->windowContentVtx[120] -> Repeat of File 1 above
+ *
+ * ** FILE 1 Info **
+ *
+ * fileSelect->windowContentVtx[136] -> File Name (32)
+ * fileSelect->windowContentVtx[168] -> File Name Shadow (32)
+ * fileSelect->windowContentVtx[200] -> Rupee Digits (12)
+ * fileSelect->windowContentVtx[212] -> Rupee Digits Shadow (12)
+ * fileSelect->windowContentVtx[224] -> Mask Count (8)
+ * fileSelect->windowContentVtx[232] -> Mask Count Shadow (8)
+ * fileSelect->windowContentVtx[240] -> Hearts (80)
+ * fileSelect->windowContentVtx[320] -> Remains (16)
+ * fileSelect->windowContentVtx[336] -> Rupee Icon (4)
+ * fileSelect->windowContentVtx[340] -> Heart Piece Count (4)
+ * fileSelect->windowContentVtx[344] -> Mask Text (8)
+ * fileSelect->windowContentVtx[352] -> Owl Save Icon (4)
+ * fileSelect->windowContentVtx[356] -> Day Text (8)
+ * fileSelect->windowContentVtx[364] -> Time Digits (20)
+ * fileSelect->windowContentVtx[384] -> Time Digits Shadow (20)
+ *
+ * ** FILE 2 Info **
+ *
+ * fileSelect->windowContentVtx[404] -> Repeat of File 1 above
+ *
+ * ** FILE 3 Info **
+ *
+ * fileSelect->windowContentVtx[672] -> Repeat of File 1 above
+ *
+ * fileSelect->windowContentVtx[940] -> Action buttons (copy/erase/yes/quit)
+ * fileSelect->windowContentVtx[944] -> Action buttons (copy/erase/yes/quit)
+ * fileSelect->windowContentVtx[948] -> Option Button
+ * fileSelect->windowContentVtx[952] -> Highlight over currently selected button
+ * fileSelect->windowContentVtx[956] -> Warning labels
+ */
+
+#ifdef NON_MATCHING
+// regalloc at the beginning is fixed by removing FAKE: labelled code
+void FileSelect_SetWindowContentVtx(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ u16 vtxId;
+ s16 j;
+ s16 index;
+ s16 spAC;
+ s16 i; // a3
+ u16 spA4[3];
+ u16* ptr;
+ s32 posY; // sp9C
+ s32 relPosY; // sp98
+ s32 tempPosY;
+ s32 posX; // s1
+ s32 temp_t5;
+
+ this->windowContentVtx = GRAPH_ALLOC(this->state.gfxCtx, 960 * sizeof(Vtx));
+
+ // Initialize all windowContentVtx
+ for (vtxId = 0; vtxId < 960; vtxId += 4) {
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 0x12C;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 16;
+
+ // y-coord (top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = 0;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 16;
+
+ // z-coordinate
+ this->windowContentVtx[vtxId + 0].v.ob[2] = this->windowContentVtx[vtxId + 1].v.ob[2] =
+ this->windowContentVtx[vtxId + 2].v.ob[2] = this->windowContentVtx[vtxId + 3].v.ob[2] = 0;
+
+ //! FAKE:
+ if (index && index && index) {}
+
+ // flag
+ this->windowContentVtx[vtxId + 0].v.flag = this->windowContentVtx[vtxId + 1].v.flag =
+ this->windowContentVtx[vtxId + 2].v.flag = this->windowContentVtx[vtxId + 3].v.flag = 0;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 0].v.tc[0] = this->windowContentVtx[vtxId + 0].v.tc[1] =
+ this->windowContentVtx[vtxId + 1].v.tc[1] = this->windowContentVtx[vtxId + 2].v.tc[0] = 0;
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] =
+ this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200;
+
+ // alpha
+ this->windowContentVtx[vtxId + 0].v.cn[0] = this->windowContentVtx[vtxId + 1].v.cn[0] =
+ this->windowContentVtx[vtxId + 2].v.cn[0] = this->windowContentVtx[vtxId + 3].v.cn[0] =
+ this->windowContentVtx[vtxId + 0].v.cn[1] = this->windowContentVtx[vtxId + 1].v.cn[1] =
+ this->windowContentVtx[vtxId + 2].v.cn[1] = this->windowContentVtx[vtxId + 3].v.cn[1] =
+ this->windowContentVtx[vtxId + 0].v.cn[2] = this->windowContentVtx[vtxId + 1].v.cn[2] =
+ this->windowContentVtx[vtxId + 2].v.cn[2] = this->windowContentVtx[vtxId + 3].v.cn[2] =
+ this->windowContentVtx[vtxId + 0].v.cn[3] = this->windowContentVtx[vtxId + 1].v.cn[3] =
+ this->windowContentVtx[vtxId + 2].v.cn[3] =
+ this->windowContentVtx[vtxId + 3].v.cn[3] = 255;
+ }
+
+ /** Title Label **/
+
+ // x-coord (left)
+ this->windowContentVtx[0].v.ob[0] = this->windowContentVtx[2].v.ob[0] = this->windowPosX;
+ // x-coord (right)
+ this->windowContentVtx[1].v.ob[0] = this->windowContentVtx[3].v.ob[0] = this->windowContentVtx[0].v.ob[0] + 0x80;
+ // y-coord (top)
+ this->windowContentVtx[0].v.ob[1] = this->windowContentVtx[1].v.ob[1] = 0x48;
+ // y-coord (bottom)
+ this->windowContentVtx[2].v.ob[1] = this->windowContentVtx[3].v.ob[1] = this->windowContentVtx[0].v.ob[1] - 0x10;
+ // texture coordinates
+ this->windowContentVtx[1].v.tc[0] = this->windowContentVtx[3].v.tc[0] = 0x1000;
+
+ /** File InfoBox **/
+
+ // Loop through 3 files
+ for (vtxId = 4, i = 0; i < 3; i++) {
+ posX = this->windowPosX - 6;
+
+ // Loop through 7 textures
+ for (j = 0; j < 7; j++, vtxId += 4) {
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + sFileInfoBoxPartWidths[j];
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] =
+ this->fileNamesY[i] + 0x2C;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x38;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] =
+ sFileInfoBoxPartWidths[j] << 5;
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x700;
+
+ // Update X position
+ posX += sFileInfoBoxPartWidths[j];
+ }
+ }
+
+ // File Buttons
+
+ posX = this->windowPosX - 6;
+ posY = 44;
+
+ // Loop through 3 files
+ for (j = 0; j < 3; j++, vtxId += 16, posY -= 0x10) {
+
+ /* File Button */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] =
+ this->buttonYOffsets[j] + posY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800;
+
+ /* File Name Box */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = posX + 0x40;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] =
+ this->windowContentVtx[vtxId + 4].v.ob[0] + 0x6C;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] =
+ this->buttonYOffsets[j] + posY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] =
+ this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0xD80;
+
+ /* Connectors */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] = posX + 0x34;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] =
+ this->windowContentVtx[vtxId + 8].v.ob[0] + 0x18;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] =
+ this->buttonYOffsets[j] + posY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] =
+ this->windowContentVtx[vtxId + 8].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 9].v.tc[0] = this->windowContentVtx[vtxId + 11].v.tc[0] = 0x300;
+
+ /* Blank Button (Owl Save) */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] = posX + 0xA9;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] =
+ this->windowContentVtx[vtxId + 12].v.ob[0] + 0x34;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] =
+ this->buttonYOffsets[j] + posY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] =
+ this->windowContentVtx[vtxId + 12].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 13].v.tc[0] = this->windowContentVtx[vtxId + 15].v.tc[0] = 0x680;
+ }
+
+ posY = 44;
+
+ // Loop through 3 files
+ for (j = 0; j < 3; j++, posY -= 16) {
+ if (!gSaveContext.flashSaveAvailable) {
+ // Should skip vtxId
+ // vtxId += 268;
+ continue;
+ }
+
+ // Account for owl-save offset
+
+ spAC = j;
+ if (this->isOwlSave[j + 2]) {
+ spAC = j + 2;
+ }
+
+ /* File name */
+
+ posX = this->windowPosX - 6;
+
+ if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) {
+ relPosY = this->fileNamesY[j] + 0x2C;
+ } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) {
+ relPosY = this->buttonYOffsets[j] + posY;
+ } else {
+ relPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j];
+ }
+
+ tempPosY = relPosY - 2;
+
+ // Loop through 8 characters of file name
+ for (i = 0; i < 8; i++, vtxId += 4) {
+
+ index = this->fileNames[j][i];
+
+ /* File Name */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] =
+ D_80814280[index] + posX + 0x4E;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0xB;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC;
+
+ /* File Name Shadow */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 32].v.ob[0] = this->windowContentVtx[vtxId + 34].v.ob[0] =
+ D_80814280[index] + posX + 0x4F;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 33].v.ob[0] = this->windowContentVtx[vtxId + 35].v.ob[0] =
+ this->windowContentVtx[vtxId + 32].v.ob[0] + 0xB;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 32].v.ob[1] = this->windowContentVtx[vtxId + 33].v.ob[1] = tempPosY - 1;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 34].v.ob[1] = this->windowContentVtx[vtxId + 35].v.ob[1] =
+ this->windowContentVtx[vtxId + 32].v.ob[1] - 0xC;
+
+ // Update X position
+ posX += 10;
+ }
+ // Account for the shadow
+ vtxId += 32;
+
+ /* Rupee Digits */
+
+ posX = this->windowPosX + 14;
+ tempPosY = relPosY - 0x18;
+
+ FileSelect_SplitNumber(this->rupees[spAC], &spA4[0], &spA4[1], &spA4[2]);
+
+ index = sWalletFirstDigit[this->walletUpgrades[spAC]];
+
+ ptr = &spA4[index];
+
+ for (i = 0; i < 3; i++, vtxId += 4, ptr++) {
+
+ /* Rupee Digits */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] =
+ D_80814280[*ptr] + posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i];
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i];
+
+ /* Rupee Digits Shadow */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 1;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] =
+ this->windowContentVtx[vtxId + 12].v.ob[0] + D_80814628[i];
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] = tempPosY - 1;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] =
+ this->windowContentVtx[vtxId + 12].v.ob[1] - D_80814630[i];
+
+ // Update X position
+ posX += D_80814620[i];
+ }
+
+ // Account for the shadow
+ vtxId += 12;
+
+ /* Mask Count */
+
+ posX = this->windowPosX + 42;
+ tempPosY = relPosY - 0x2A;
+
+ FileSelect_SplitNumber(this->maskCount[spAC], &spA4[0], &spA4[1], &spA4[2]);
+
+ for (i = 1; i < 3; i++, vtxId += 4) {
+
+ /* Mask Count */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] =
+ D_80814280[spA4[i]] + posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i];
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i];
+
+ /* Mask Count Shadow */
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 1;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] =
+ this->windowContentVtx[vtxId + 8].v.ob[0] + D_80814628[i];
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] = tempPosY - 1;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] =
+ this->windowContentVtx[vtxId + 8].v.ob[1] - D_80814630[i];
+
+ // Update X position
+ posX += D_80814620[i];
+ }
+
+ // Account for the shadow
+ vtxId += 8;
+
+ /* Hearts */
+
+ posX = this->windowPosX + 63;
+ tempPosY = relPosY - 0x10;
+
+ // Loop through 20 hearts
+ for (i = 0; i < 20; i++, vtxId += 4, posX += 9) {
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0xA;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0xA;
+
+ // New row of hearts next iteration
+ if (i == 9) {
+ posX = this->windowPosX + (63 - 9);
+ tempPosY -= 8;
+ }
+ }
+
+ /* Quest Remains */
+
+ posX = this->windowPosX + 64;
+ tempPosY = relPosY - 0x20;
+
+ // Loop through 4 Remains
+ for (i = 0; i < 4; i++, vtxId += 4, posX += 0x18) {
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x14;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x14;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] =
+ this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x400;
+ }
+
+ /* Rupee Icon */
+
+ // posX = this->windowPosX - 1;
+ tempPosY = relPosY - 0x15;
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 1;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x10;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x200;
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200;
+
+ vtxId += 4;
+
+ /* Heart Piece Count */
+
+ // posX = this->windowPosX + 0x27;
+ tempPosY = relPosY - 0x15;
+
+ // x-coord (left)
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX + 0x27;
+ // x-coord (right)
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18;
+
+ // y-coord(top)
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+ // y-coord (bottom)
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ // texture coordinates
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300;
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200;
+
+ vtxId += 4;
+
+ /* Mask Text */
+
+ // posX = this->windowPosX - 10;
+ tempPosY = relPosY - 0x27;
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 10;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800;
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200;
+
+ this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 1;
+
+ this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] =
+ this->windowContentVtx[vtxId + 4].v.ob[0] + 0x40;
+
+ this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = tempPosY - 1;
+
+ this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] =
+ this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10;
+
+ this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x800;
+ this->windowContentVtx[vtxId + 6].v.tc[1] = this->windowContentVtx[vtxId + 7].v.tc[1] = 0x200;
+
+ vtxId += 8;
+
+ /* Owl Save Icon */
+
+ posX = this->windowPosX + 0xA3;
+
+ if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) {
+ tempPosY = this->fileNamesY[j] + 0x2C;
+ } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) {
+ tempPosY = this->buttonYOffsets[j] + posY;
+ } else {
+ tempPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j];
+ }
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX + 0xE;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 2;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300;
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x180;
+
+ vtxId += 4;
+
+ /* Day Text */
+
+ for (i = 0; i < 2; i++, vtxId += 4) {
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 2 + posX + i;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x30;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - i - 0x12;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x600;
+
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300;
+ }
+
+ /* Time Digits */
+
+ posX += 6;
+ temp_t5 = vtxId;
+
+ for (i = 0; i < 5; i++, vtxId += 4, posX += 8) {
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0xC;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 0x2A;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC;
+
+ this->windowContentVtx[vtxId + 0x14].v.ob[0] = this->windowContentVtx[vtxId + 0x16].v.ob[0] = posX + 1;
+
+ this->windowContentVtx[vtxId + 0x15].v.ob[0] = this->windowContentVtx[vtxId + 0x17].v.ob[0] =
+ this->windowContentVtx[vtxId + 0x14].v.ob[0] + 0xC;
+
+ this->windowContentVtx[vtxId + 0x14].v.ob[1] = this->windowContentVtx[vtxId + 0x15].v.ob[1] =
+ tempPosY - 0x2B;
+
+ this->windowContentVtx[vtxId + 0x16].v.ob[1] = this->windowContentVtx[vtxId + 0x17].v.ob[1] =
+ this->windowContentVtx[vtxId + 0x14].v.ob[1] - 0xC;
+ }
+
+ // Adjust the colon to the right
+ this->windowContentVtx[temp_t5 + 8].v.ob[0] = this->windowContentVtx[temp_t5 + 10].v.ob[0] =
+ this->windowContentVtx[temp_t5 + 8].v.ob[0] + 3;
+
+ this->windowContentVtx[temp_t5 + 9].v.ob[0] = this->windowContentVtx[temp_t5 + 11].v.ob[0] =
+ this->windowContentVtx[temp_t5 + 8].v.ob[0] + 0xC;
+
+ this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1E].v.ob[0] =
+ this->windowContentVtx[temp_t5 + 8].v.ob[0] + 1;
+
+ this->windowContentVtx[temp_t5 + 0x1D].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1F].v.ob[0] =
+ this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] + 0xC;
+
+ vtxId += 20;
+ }
+
+ posX = this->windowPosX - 6;
+ posY = -0xC;
+
+ for (j = 0; j < 2; j++, vtxId += 4, posY -= 0x10) {
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] =
+ this->buttonYOffsets[j + 3] + posY;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800;
+ }
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] =
+ this->buttonYOffsets[5] - 0x34;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800;
+
+ vtxId += 4;
+
+ if (((this->menuMode == FS_MENU_MODE_CONFIG) && (this->configMode >= 2)) ||
+ ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == 3))) {
+ if (this->menuMode == FS_MENU_MODE_CONFIG) {
+ if ((this->configMode == 4) || (this->configMode == 7) || (this->configMode == 0x16)) {
+ j = D_80814644[this->buttonIndex];
+ } else if ((this->configMode == 0x19) || (this->configMode == 0xC)) {
+ j = D_8081464C[this->buttonIndex];
+ } else {
+ j = D_80814638[this->buttonIndex];
+ }
+ } else {
+ j = D_80814650[this->confirmButtonIndex];
+ }
+
+ this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 0xA;
+
+ this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] =
+ this->windowContentVtx[vtxId + 0].v.ob[0] + 0x48;
+
+ this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] =
+ this->windowContentVtx[j].v.ob[1] + 4;
+
+ this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] =
+ this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18;
+
+ this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x900;
+
+ this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300;
+ }
+
+ this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = this->windowPosX + 0x3A;
+
+ this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] =
+ this->windowContentVtx[vtxId + 4].v.ob[0] + 0x80;
+
+ this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] =
+ this->windowContentVtx[D_80814638[this->warningButtonIndex]].v.ob[1];
+
+ this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] =
+ this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10;
+
+ this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x1000;
+}
+#else
+void FileSelect_SetWindowContentVtx(GameState* thisx);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_SetWindowContentVtx.s")
+#endif
+
+u16 D_80814654[] = {
+ 0x88,
+ 0x194,
+ 0x2A0,
+};
+TexturePtr sFileSelRemainsTextures[] = {
+ gFileSelOdolwasRemainsTex,
+ gFileSelGohtsRemainsTex,
+ gFileSelGyorgsRemainsTex,
+ gFileSelTwinmoldsRemainsTex,
+};
+TexturePtr sFileSelDayENGTextures[] = {
+ gFileSelFirstDayENGTex,
+ gFileSelFirstDayENGTex,
+ gFileSelSecondDayENGTex,
+ gFileSelFinalDayENGTex,
+};
+TexturePtr sFileSelHeartPieceTextures[] = {
+ gFileSel0QuarterHeartENGTex,
+ gFileSel1QuarterHeartENGTex,
+ gFileSel2QuarterHeartENGTex,
+ gFileSel3QuarterHeartENGTex,
+};
+static TexturePtr sHeartTextures[2][5] = {
+ {
+ gHeartEmptyTex,
+ gHeartQuarterTex,
+ gHeartHalfTex,
+ gHeartThreeQuarterTex,
+ gHeartFullTex,
+ },
+ {
+ gDefenseHeartEmptyTex,
+ gDefenseHeartQuarterTex,
+ gDefenseHeartHalfTex,
+ gDefenseHeartThreeQuarterTex,
+ gDefenseHeartFullTex,
+ },
+};
+u8 sHealthToQuarterHeartCount[] = {
+ 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
+};
+s16 sFileSelRupeePrimColors[3][3] = {
+ { 200, 255, 100 }, // Default Wallet
+ { 170, 170, 255 }, // Adult Wallet
+ { 255, 105, 105 }, // Giant Wallet
+};
+s16 sFileSelRupeeEnvColors[3][3] = {
+ { 0, 80, 0 }, // Default Wallet
+ { 10, 10, 80 }, // Adult Wallet
+ { 40, 10, 0 }, // Giant Wallet
+};
+static s16 sHeartPrimColors[2][3] = {
+ { 255, 70, 50 },
+ { 200, 0, 0 },
+};
+static s16 sHeartEnvColors[2][3] = {
+ { 50, 40, 60 },
+ { 255, 255, 255 },
+};
+
+void FileSelect_DrawFileInfo(GameState* thisx, s16 fileIndex) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Font* font = &this->font;
+ s16 j;
+ s16 vtxOffset;
+ s32 heartType;
+ s16 i;
+ s16 sp20C;
+ s16 health;
+ s16 timeDigits[5];
+ u16 digits[3]; // rupees and mask count
+ u8 quarterHeartCount;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ sp20C = fileIndex;
+
+ // draw file name
+ if (this->nameAlpha[fileIndex] != 0) {
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + (4 * 8)], 32, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->nameAlpha[fileIndex]);
+
+ for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx,
+ font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex]], 32, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]);
+
+ for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx,
+ font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+ }
+
+ if ((fileIndex == this->selectedFileIndex) || (fileIndex == this->copyDestFileIndex)) {
+ if (this->isOwlSave[fileIndex + 2]) {
+ sp20C = fileIndex + 2;
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][0],
+ sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][1],
+ sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][2], this->fileInfoAlpha[fileIndex]);
+ gDPSetEnvColor(POLY_OPA_DISP++, sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][0],
+ sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][1],
+ sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][2], 255);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xC8], 4, 0);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelRupeeTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x4C], 12, 0);
+
+ FileSelect_SplitNumber((u16)this->rupees[sp20C], &digits[0], &digits[1], &digits[2]);
+
+ for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+
+ if (this->rupees[sp20C] == gUpgradeCapacities[4][this->walletUpgrades[sp20C]]) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 120, 255, 0, this->fileInfoAlpha[fileIndex]);
+ } else if (this->rupees[sp20C] != 0) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 100, 100, 100, this->fileInfoAlpha[fileIndex]);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x40], 12, 0);
+
+ for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 0, 0, this->fileInfoAlpha[fileIndex]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xCC], 4, 0);
+
+ POLY_OPA_DISP = FileSelect_DrawTexQuadIA8(
+ POLY_OPA_DISP, sFileSelHeartPieceTextures[this->heartPieceCount[sp20C]], 0x18, 0x10, (s16)0);
+
+ if (this->defenseHearts[sp20C] == 0) {
+ heartType = 0;
+ } else {
+ heartType = 1;
+ }
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sHeartPrimColors[heartType][0], sHeartPrimColors[heartType][1],
+ sHeartPrimColors[heartType][2], this->fileInfoAlpha[fileIndex]);
+ gDPSetEnvColor(POLY_OPA_DISP++, sHeartEnvColors[heartType][0], sHeartEnvColors[heartType][1],
+ sHeartEnvColors[heartType][2], 255);
+
+ i = this->healthCapacity[sp20C] / 0x10;
+
+ health = this->health[sp20C];
+ if (health <= 0x30) {
+ health = 0x30;
+ }
+
+ quarterHeartCount = 4;
+ for (vtxOffset = 0, j = 0; j < i; j++, vtxOffset += 4) {
+ if (health < 0x10) {
+ if (health != 0) {
+ quarterHeartCount = sHealthToQuarterHeartCount[health];
+ health = 0;
+ } else {
+ quarterHeartCount = 0;
+ }
+ } else {
+ health -= 0x10;
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x68 + vtxOffset], 4, 0);
+ POLY_OPA_DISP =
+ FileSelect_DrawTexQuadIA8(POLY_OPA_DISP, sHeartTextures[heartType][quarterHeartCount], 0x10, 0x10, 0);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ for (vtxOffset = 0, j = 0; j < 4; j++, vtxOffset += 4) {
+ if (this->questItems[sp20C] & gBitFlags[j]) {
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xB8 + vtxOffset], 4, 0);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sFileSelRemainsTextures[j], G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD0], 8, 0);
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelMASKSENGTex, G_IM_FMT_I, 64, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x60], 8, 0);
+
+ FileSelect_SplitNumber(this->maskCount[sp20C], &digits[0], &digits[1], &digits[2]);
+
+ for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x58], 8, 0);
+
+ for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) {
+
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+ }
+
+ if (this->isOwlSave[fileIndex + 2]) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD8], 4, 0);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOwlSaveIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 12, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xDC], 8, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]);
+
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, sFileSelDayENGTextures[this->day[sp20C]], G_IM_FMT_I, 48, 24, 0,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ timeDigits[0] = 0;
+ timeDigits[1] = TIME_TO_MINUTES_F(this->time[sp20C]) / 60.0f;
+
+ while (timeDigits[1] >= 10) {
+ timeDigits[0]++;
+ timeDigits[1] -= 10;
+ }
+
+ timeDigits[3] = 0;
+ timeDigits[4] = (s32)TIME_TO_MINUTES_F(this->time[sp20C]) % 60;
+
+ while (timeDigits[4] >= 10) {
+ timeDigits[3]++;
+ timeDigits[4] -= 10;
+ }
+ timeDigits[2] = 0x41;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xF8], 20, 0);
+
+ for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xE4], 20, 0);
+
+ for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset);
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+TexturePtr sFileInfoBoxTextures[] = {
+ gFileSelFileInfoBox0Tex, gFileSelFileInfoBox1Tex, gFileSelFileInfoBox2Tex, gFileSelFileInfoBox3Tex,
+ gFileSelFileInfoBox4Tex, gFileSelFileExtraInfoBox0Tex, gFileSelFileExtraInfoBox1Tex,
+};
+
+TexturePtr sTitleLabels[] = {
+ gFileSelPleaseSelectAFileENGTex, gFileSelOpenThisFileENGTex, gFileSelCopyWhichFileENGTex,
+ gFileSelCopyToWhichFileENGTex, gFileSelAreYouSureCopyENGTex, gFileSelFileCopiedENGTex,
+ gFileSelEraseWhichFileENGTex, gFileSelAreYouSureEraseENGTex, gFileSelFileErasedENGTex,
+};
+
+TexturePtr sWarningLabels[] = {
+ gFileSelNoFileToCopyENGTex, gFileSelNoFileToEraseENGTex, gFileSelNoEmptyFileENGTex,
+ gFileSelFileEmptyENGTex, gFileSelFileInUseENGTex,
+};
+
+TexturePtr sFileButtonTextures[] = {
+ gFileSelFile1ButtonENGTex,
+ gFileSelFile2ButtonENGTex,
+ gFileSelFile3ButtonENGTex,
+};
+
+TexturePtr sActionButtonTextures[] = {
+ gFileSelCopyButtonENGTex,
+ gFileSelEraseButtonENGTex,
+ gFileSelYesButtonENGTex,
+ gFileSelQuitButtonENGTex,
+};
+
+/**
+ * Draw most window contents including buttons, labels, and icons.
+ * Does not include anything from the keyboard and settings windows.
+ */
+void FileSelect_DrawWindowContents(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 fileIndex;
+ s16 temp;
+ s16 i;
+ s16 quadVtxIndex;
+
+ if (1) {}
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ // draw title label
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0], 4, 0);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->titleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ // draw next title label
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_NEXT]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->nextTitleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ temp = 4;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ // draw file info box (large box when a file is selected)
+ for (fileIndex = 0; fileIndex < 3; fileIndex++, temp += 28) {
+ if (fileIndex < 2) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->fileInfoAlpha[fileIndex]);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 28, 0);
+
+ for (quadVtxIndex = 0, i = 0; i < 7; i++, quadVtxIndex += 4) {
+ if ((i < 5) || (this->isOwlSave[fileIndex + 2] && (i >= 5))) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sFileInfoBoxTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b,
+ sFileInfoBoxPartWidths[i], 56, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1,
+ 0);
+ }
+ }
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ for (i = 0; i < 3; i++, temp += 16) {
+ if (i < 2) {
+ // draw file button
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 16, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1],
+ sWindowContentColors[2], this->fileButtonAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sFileButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ // draw file name box
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1],
+ sWindowContentColors[2], this->nameBoxAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1],
+ sWindowContentColors[2], this->connectorAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0);
+
+ if (this->isOwlSave[i + 2]) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1],
+ sWindowContentColors[2], this->nameBoxAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBlankButtonTex, G_IM_FMT_IA, G_IM_SIZ_16b, 52, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0);
+ }
+ }
+ }
+
+ // draw file info
+ for (fileIndex = 0; fileIndex < 2; fileIndex++) {
+ FileSelect_DrawFileInfo(&this->state, fileIndex);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+ gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0x3AC], 20, 0);
+
+ // draw primary action buttons (copy/erase)
+ for (quadVtxIndex = 0, i = 0; i < 2; i++, quadVtxIndex += 4) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->actionButtonAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ // draw confirm buttons (yes/quit)
+ for (quadVtxIndex = 0, i = FS_BTN_CONFIRM_YES; i <= FS_BTN_CONFIRM_QUIT; i++, quadVtxIndex += 4) {
+ temp = this->confirmButtonTexIndices[i];
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->confirmButtonAlpha[i]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[temp], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0);
+ }
+
+ // draw options button
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->optionButtonAlpha);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOptionsButtonENGTex, G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0);
+
+ // draw highlight over currently selected button
+ if (((this->menuMode == FS_MENU_MODE_CONFIG) &&
+ ((this->configMode == CM_MAIN_MENU) || (this->configMode == CM_SELECT_COPY_SOURCE) ||
+ (this->configMode == CM_SELECT_COPY_DEST) || (this->configMode == CM_COPY_CONFIRM) ||
+ (this->configMode == CM_ERASE_SELECT) || (this->configMode == CM_ERASE_CONFIRM))) ||
+ ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == SM_CONFIRM_FILE))) {
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0,
+ PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1],
+ this->highlightColor[2], this->highlightColor[3]);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBigButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 72, 24, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0);
+ }
+
+ // draw warning labels
+ if (this->warningLabel > FS_WARNING_NONE) {
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->emptyFileTextAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sWarningLabels[this->warningLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 16, 18, 19, 17, 0);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_ConfigModeDraw(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ Gfx_SetupDL42_Opa(this->state.gfxCtx);
+ FileSelect_SetView(this, 0.0f, 0.0f, 64.0f);
+ FileSelect_SetWindowVtx(&this->state);
+ FileSelect_SetWindowContentVtx(&this->state);
+
+ if ((this->configMode != CM_NAME_ENTRY) && (this->configMode != CM_START_NAME_ENTRY)) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->windowAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW);
+ Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
+
+ if (this->windowRot != 0) {
+ Matrix_RotateXFApply(this->windowRot / 100.0f);
+ }
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ FileSelect_DrawWindowContents(&this->state);
+ }
+
+ // draw name entry menu
+ if ((this->configMode >= CM_ROTATE_TO_NAME_ENTRY) && (this->configMode <= CM_NAME_ENTRY_TO_MAIN)) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->windowAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW);
+ Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
+ Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ FileSelect_DrawNameEntry(&this->state);
+ }
+
+ // draw options menu
+ if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->windowAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW);
+ Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
+ Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ FileSelect_DrawOptions(&this->state);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ FileSelect_SetView(this, 0.0f, 0.0f, 64.0f);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+/**
+ * Fade out the main menu elements to transition to select mode.
+ * Update function for `SM_FADE_MAIN_TO_SELECT`
+ */
+void FileSelect_FadeMainToSelect(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] -= 50;
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = this->fileButtonAlpha[i];
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] -= 255 / 4;
+ }
+ } else {
+ if (SLOT_OCCUPIED(this, i)) {
+ this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] -= 255 / 4;
+ }
+ }
+ }
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionTimer = 4;
+ this->selectMode++; // SM_MOVE_FILE_TO_TOP
+ this->confirmButtonIndex = FS_BTN_CONFIRM_YES;
+ }
+}
+
+// Amount to move by to reach the top of the screen
+s16 sFileYOffsets[] = { 0, 16, 32 };
+
+/**
+ * Moves the selected file to the top of the window.
+ * Update function for `SM_MOVE_FILE_TO_TOP`
+ */
+void FileSelect_MoveSelectedFileToTop(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s32 yStep;
+
+ yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sFileYOffsets[this->buttonIndex]) / this->actionTimer;
+ this->buttonYOffsets[this->buttonIndex] += yStep;
+ this->actionTimer--;
+
+ if ((this->actionTimer == 0) || (this->buttonYOffsets[this->buttonIndex] == sFileYOffsets[this->buttonIndex])) {
+ this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = -24;
+ this->actionTimer = 4;
+ this->selectMode++; // SM_FADE_IN_FILE_INFO
+ }
+}
+
+/**
+ * Fade in the file info for the selected file.
+ * Update function for `SM_FADE_IN_FILE_INFO`
+ */
+void FileSelect_FadeInFileInfo(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->fileInfoAlpha[this->buttonIndex] += 50;
+ this->nameBoxAlpha[this->buttonIndex] -= 100;
+
+ if (this->nameBoxAlpha[this->buttonIndex] <= 0) {
+ this->nameBoxAlpha[this->buttonIndex] = 0;
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->fileInfoAlpha[this->buttonIndex] = 200;
+ this->actionTimer = 4;
+ this->selectMode++; // SM_CONFIRM_FILE
+ }
+
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] =
+ this->fileInfoAlpha[this->buttonIndex];
+}
+
+/**
+ * Update the cursor and handle the option that the player picks for confirming the selected file.
+ * Update function for `SM_CONFIRM_FILE`
+ */
+void FileSelect_ConfirmFile(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (CHECK_BTN_ALL(input->press.button, BTN_START) || (CHECK_BTN_ALL(input->press.button, BTN_A))) {
+ if (this->confirmButtonIndex == FS_BTN_CONFIRM_YES) {
+ Rumble_Request(300.0f, 180, 20, 100);
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->selectMode = SM_FADE_OUT;
+ func_801A4058(0xF);
+ } else { // FS_BTN_CONFIRM_QUIT
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ this->selectMode++; // SM_FADE_OUT_FILE_INFO
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ this->selectMode++; // SM_FADE_OUT_FILE_INFO
+ } else if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->confirmButtonIndex ^= 1;
+ }
+}
+
+/**
+ * Fade out the file info for the selected file before returning to the main menu.
+ * Update function for `SM_FADE_OUT_FILE_INFO`
+ */
+void FileSelect_FadeOutFileInfo(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->fileInfoAlpha[this->buttonIndex] -= 200 / 4;
+ this->nameBoxAlpha[this->buttonIndex] += 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = 0;
+ this->nameBoxAlpha[this->buttonIndex] = 200;
+ this->fileInfoAlpha[this->buttonIndex] = 0;
+ this->nextTitleLabel = FS_TITLE_SELECT_FILE;
+ this->actionTimer = 4;
+ this->selectMode++;
+ }
+
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] =
+ this->fileInfoAlpha[this->buttonIndex];
+}
+
+/**
+ * Move the selected file back to the slot position then go to config mode for the main menu.
+ * Update function for `SM_MOVE_FILE_TO_SLOT`
+ */
+void FileSelect_MoveSelectedFileToSlot(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s32 yStep;
+ s16 i;
+
+ yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex]) / this->actionTimer;
+ this->buttonYOffsets[this->buttonIndex] -= yStep;
+
+ if (this->buttonYOffsets[this->buttonIndex] <= 0) {
+ this->buttonYOffsets[this->buttonIndex] = 0;
+ }
+
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] += 200 / 4;
+
+ if (this->fileButtonAlpha[i] >= 200) {
+ this->fileButtonAlpha[i] = 200;
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = this->fileButtonAlpha[i];
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ } else {
+ if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ }
+ }
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->titleLabel = this->nextTitleLabel;
+ this->actionTimer = 4;
+ this->menuMode = FS_MENU_MODE_CONFIG;
+ this->configMode = CM_MAIN_MENU;
+ this->nextConfigMode = CM_MAIN_MENU;
+ this->selectMode = SM_FADE_MAIN_TO_SELECT;
+ }
+}
+
+/**
+ * Fill the screen with black to fade out.
+ * Update function for `SM_FADE_OUT`
+ */
+void FileSelect_FadeOut(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->screenFillAlpha += 40;
+
+ if (this->screenFillAlpha >= 255) {
+ this->screenFillAlpha = 255;
+ this->selectMode++; // SM_LOAD_GAME
+ }
+}
+
+/**
+ * Load the save for the appropriate file and start the game.
+ * Update function for `SM_LOAD_GAME`
+ */
+void FileSelect_LoadGame(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ u16 i;
+
+ gSaveContext.fileNum = this->buttonIndex;
+ Sram_OpenSave(this, &this->sramCtx);
+
+ gSaveContext.gameMode = GAMEMODE_NORMAL;
+
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
+
+ gSaveContext.respawnFlag = 0;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTR_LOAD_OPENING;
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ gSaveContext.showTitleCard = true;
+ gSaveContext.dogParams = 0;
+
+ for (i = 0; i < TIMER_ID_MAX; i++) {
+ gSaveContext.timerStates[i] = TIMER_STATE_OFF;
+ }
+
+ gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
+ gSaveContext.nayrusLoveTimer = 0;
+ gSaveContext.healthAccumulator = 0;
+ gSaveContext.magicFlag = 0;
+ gSaveContext.forcedSeqId = 0;
+ gSaveContext.skyboxTime = CLOCK_TIME(0, 0);
+ gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
+ gSaveContext.cutsceneTrigger = 0;
+ gSaveContext.chamberCutsceneNum = 0;
+ gSaveContext.nextDayTime = 0xFFFF;
+ gSaveContext.retainWeatherMode = false;
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+
+ gSaveContext.hudVisibilityForceButtonAlphasByStatus = false;
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ gSaveContext.hudVisibilityTimer = 0;
+
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
+}
+
+void (*sSelectModeUpdateFuncs[])(GameState*) = {
+ FileSelect_FadeMainToSelect, // SM_FADE_MAIN_TO_SELECT
+ FileSelect_MoveSelectedFileToTop, // SM_MOVE_FILE_TO_TOP
+ FileSelect_FadeInFileInfo, // SM_FADE_IN_FILE_INFO
+ FileSelect_ConfirmFile, // SM_CONFIRM_FILE
+ FileSelect_FadeOutFileInfo, // SM_FADE_OUT_FILE_INFO
+ FileSelect_MoveSelectedFileToSlot, // SM_MOVE_FILE_TO_SLOT
+ FileSelect_FadeOut, // SM_FADE_OUT
+ FileSelect_LoadGame, // SM_LOAD_GAME
+};
+
+void FileSelect_SelectModeUpdate(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ sSelectModeUpdateFuncs[this->selectMode](&this->state);
+}
+
+void FileSelect_SelectModeDraw(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ Gfx_SetupDL42_Opa(this->state.gfxCtx);
+ FileSelect_SetView(this, 0.0f, 0.0f, 64.0f);
+ FileSelect_SetWindowVtx(&this->state);
+ FileSelect_SetWindowContentVtx(&this->state);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->windowAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW);
+ Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY);
+ Matrix_RotateXFApply(this->windowRot / 100.0f);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL);
+
+ gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0);
+ gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL);
+
+ FileSelect_DrawWindowContents(&this->state);
+ gDPPipeSync(POLY_OPA_DISP++);
+ FileSelect_SetView(this, 0.0f, 0.0f, 64.0f);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_UpdateAndDrawSkybox(FileSelectState* this) {
+ s32 pad;
+ f32 eyeX;
+ f32 eyeY;
+ f32 eyeZ;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ eyeX = 1000.0f * Math_CosS(sFileSelectSkyboxRotation) - 1000.0f * Math_SinS(sFileSelectSkyboxRotation);
+ eyeY = -700.0f;
+ eyeZ = 1000.0f * Math_SinS(sFileSelectSkyboxRotation) + 1000.0f * Math_CosS(sFileSelectSkyboxRotation);
+
+ FileSelect_SetView(this, eyeX, eyeY, eyeZ);
+ Skybox_Draw(&this->skyboxCtx, this->state.gfxCtx, SKYBOX_NORMAL_SKY, this->envCtx.skyboxBlend, eyeX, eyeY, eyeZ);
+
+ gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
+
+ sFileSelectSkyboxRotation += -0xA;
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void (*gFileSelectDrawFuncs[])(GameState*) = {
+ FileSelect_InitModeDraw, // FS_MENU_MODE_INIT
+ FileSelect_ConfigModeDraw, // FS_MENU_MODE_CONFIG
+ FileSelect_SelectModeDraw, // FS_MENU_MODE_SELECT
+};
+void (*gFileSelectUpdateFuncs[])(GameState*) = {
+ FileSelect_InitModeUpdate, // FS_MENU_MODE_INIT
+ FileSelect_ConfigModeUpdate, // FS_MENU_MODE_CONFIG
+ FileSelect_SelectModeUpdate, // FS_MENU_MODE_SELECT
+};
+
+TexturePtr D_808147B4[] = { gFileSelPleaseWaitENGTex, gFileSelDecideCancelENGTex, gFileSelDecideSaveENGTex };
+s16 D_808147C0[] = { 144, 144, 152 };
+s16 D_808147C8[] = { 90, 90, 86 };
+
+void FileSelect_Main(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Input* input = CONTROLLER1(&this->state);
+ s32 texIndex;
+ s32 pad;
+
+ func_8012CF0C(this->state.gfxCtx, 0, 1, 0, 0, 0);
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x02, this->parameterSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x06, this->titleSegment);
+
+ this->stickAdjX = input->rel.stick_x;
+ this->stickAdjY = input->rel.stick_y;
+
+ if (this->stickAdjX < -30) {
+ if (this->stickXDir == -1) {
+ this->inputTimerX--;
+ if (this->inputTimerX < 0) {
+ this->inputTimerX = 2;
+ } else {
+ this->stickAdjX = 0;
+ }
+ } else {
+ this->inputTimerX = 10;
+ this->stickXDir = -1;
+ }
+ } else if (this->stickAdjX > 30) {
+ if (this->stickXDir == 1) {
+ this->inputTimerX--;
+ if (this->inputTimerX < 0) {
+ this->inputTimerX = 2;
+ } else {
+ this->stickAdjX = 0;
+ }
+ } else {
+ this->inputTimerX = 10;
+ this->stickXDir = 1;
+ }
+ } else {
+ this->stickXDir = 0;
+ }
+
+ if (this->stickAdjY < -30) {
+ if (this->stickYDir == -1) {
+ this->inputTimerY--;
+ if (this->inputTimerY < 0) {
+ this->inputTimerY = 2;
+ } else {
+ this->stickAdjY = 0;
+ }
+ } else {
+ this->inputTimerY = 10;
+ this->stickYDir = -1;
+ }
+ } else if (this->stickAdjY > 30) {
+ if (this->stickYDir == 1) {
+ this->inputTimerY--;
+ if (this->inputTimerY < 0) {
+ this->inputTimerY = 2;
+ } else {
+ this->stickAdjY = 0;
+ }
+ } else {
+ this->inputTimerY = 10;
+ this->stickYDir = 1;
+ }
+ } else {
+ this->stickYDir = 0;
+ }
+
+ this->emptyFileTextAlpha = 0;
+
+ FileSelect_PulsateCursor(&this->state);
+ gFileSelectUpdateFuncs[this->menuMode](&this->state);
+ FileSelect_UpdateAndDrawSkybox(this);
+ gFileSelectDrawFuncs[this->menuMode](&this->state);
+
+ Gfx_SetupDL39_Opa(this->state.gfxCtx);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, this->controlsAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ if (this->sramCtx.status > 0) {
+ texIndex = 0;
+ } else if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) {
+ texIndex = 2;
+ } else {
+ texIndex = 1;
+ }
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, D_808147B4[texIndex], G_IM_FMT_IA, G_IM_SIZ_8b, D_808147C0[texIndex], 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOLOD);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, D_808147C8[texIndex] << 2, 204 << 2,
+ (D_808147C8[texIndex] + D_808147C0[texIndex]) << 2, (204 + 16) << 2, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gSPDisplayList(POLY_OPA_DISP++, sScreenFillSetupDL);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->screenFillAlpha);
+ gSPDisplayList(POLY_OPA_DISP++, D_0E000000.fillRect);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_InitContext(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ EnvironmentContext* envCtx = &this->envCtx;
+
+ Sram_Alloc(&this->state, &this->sramCtx);
+ func_801457CC(&this->state, &this->sramCtx);
+
+ this->menuMode = FS_MENU_MODE_INIT;
+
+ this->buttonIndex = this->selectMode = this->selectedFileIndex = this->copyDestFileIndex =
+ this->confirmButtonIndex = 0;
+
+ this->confirmButtonTexIndices[0] = 2;
+ this->confirmButtonTexIndices[1] = 3;
+ this->titleLabel = FS_TITLE_SELECT_FILE;
+ this->nextTitleLabel = FS_TITLE_OPEN_FILE;
+
+ this->screenFillAlpha = 255;
+ this->highlightPulseDir = 1;
+ this->unk_244F4 = 0xC;
+ this->highlightColor[0] = 155;
+ this->highlightColor[1] = 255;
+ this->highlightColor[2] = 255;
+ this->highlightColor[3] = 70;
+ this->configMode = CM_FADE_IN_START;
+ this->windowRot = 0.0f;
+
+ this->stickXDir = this->inputTimerX = 0;
+ this->stickYDir = this->inputTimerY = 0;
+
+ this->kbdX = this->kbdY = this->charIndex = 0;
+
+ this->kbdButton = FS_KBD_BTN_NONE;
+
+ this->windowColor[0] = 100;
+ this->windowColor[1] = 150;
+ this->windowColor[2] = 255;
+
+ this->windowAlpha = this->titleAlpha[FS_TITLE_CUR] = this->titleAlpha[FS_TITLE_NEXT] = this->fileButtonAlpha[0] =
+ this->fileButtonAlpha[1] = this->fileButtonAlpha[2] = this->nameBoxAlpha[0] = this->nameBoxAlpha[1] =
+ this->nameBoxAlpha[2] = this->nameAlpha[0] = this->nameAlpha[1] = this->nameAlpha[2] =
+ this->connectorAlpha[0] = this->connectorAlpha[1] = this->connectorAlpha[2] = this->fileInfoAlpha[0] =
+ this->fileInfoAlpha[1] = this->fileInfoAlpha[2] = this->actionButtonAlpha[FS_BTN_ACTION_COPY] =
+ this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = this->actionButtonAlpha[2] =
+ this->actionButtonAlpha[3] = this->optionButtonAlpha = this->nameEntryBoxAlpha =
+ this->controlsAlpha = this->emptyFileTextAlpha = 0;
+
+ this->windowPosX = 6;
+ this->actionTimer = 4;
+ this->warningLabel = FS_WARNING_NONE;
+
+ this->warningButtonIndex = this->buttonYOffsets[0] = this->buttonYOffsets[1] = this->buttonYOffsets[2] =
+ this->buttonYOffsets[3] = this->buttonYOffsets[4] = this->buttonYOffsets[5] = this->fileNamesY[0] =
+ this->fileNamesY[1] = this->fileNamesY[2] = 0;
+
+ this->unk_2451E[0] = 0;
+ this->unk_2451E[1] = 3;
+ this->unk_2451E[2] = 6;
+ this->unk_2451E[3] = 8;
+ this->unk_2451E[4] = 10;
+ this->highlightTimer = 20;
+
+ ShrinkWindow_Letterbox_SetSizeTarget(0);
+
+ gSaveContext.skyboxTime = 0;
+ gSaveContext.save.time = 0;
+
+ Skybox_Init(&this->state, &this->skyboxCtx, 1);
+ R_TIME_SPEED = 10;
+
+ envCtx->changeSkyboxState = 0;
+ envCtx->changeSkyboxTimer = 0;
+ envCtx->changeLightEnabled = false;
+ envCtx->changeLightTimer = 0;
+ envCtx->skyboxDmaState = 0;
+ envCtx->skybox1Index = 99;
+ envCtx->skybox2Index = 99;
+ envCtx->lightConfig = 0;
+ envCtx->changeLightNextConfig = 0;
+ envCtx->lightSetting = 0;
+ envCtx->skyboxConfig = 2;
+ envCtx->skyboxDisabled = 0;
+ envCtx->skyboxBlend = 0;
+ envCtx->glareAlpha = 0.0f;
+ envCtx->lensFlareAlphaScale = 0.0f;
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+}
+
+void FileSelect_Destroy(GameState* this) {
+ ShrinkWindow_Destroy();
+}
+
+void FileSelect_Init(GameState* thisx) {
+ s32 pad;
+ FileSelectState* this = (FileSelectState*)thisx;
+ size_t size;
+
+ Game_SetFramerateDivisor(&this->state, 1);
+ Matrix_Init(&this->state);
+ ShrinkWindow_Init();
+ View_Init(&this->view, this->state.gfxCtx);
+ this->state.main = FileSelect_Main;
+ this->state.destroy = FileSelect_Destroy;
+ FileSelect_InitContext(&this->state);
+ Font_LoadOrderedFont(&this->font);
+
+ size = SEGMENT_ROM_SIZE(title_static);
+ this->staticSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(title_static), size);
+
+ size = SEGMENT_ROM_SIZE(parameter_static);
+ this->parameterSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ DmaMgr_SendRequest0(this->parameterSegment, SEGMENT_ROM_START(parameter_static), size);
+
+ size = gObjectTable[OBJECT_MAG].vromEnd - gObjectTable[OBJECT_MAG].vromStart;
+ this->titleSegment = THA_AllocTailAlign16(&this->state.heap, size);
+ DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size);
+
+ Audio_SetSpec(0xA);
+ // Setting ioData to 1 and writing it to ioPort 7 will skip the harp intro
+ Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, NA_BGM_FILE_SELECT, 0, 7, 1);
+}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c
new file mode 100644
index 000000000..7f8e5789c
--- /dev/null
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c
@@ -0,0 +1,1253 @@
+/*
+ * File: z_file_copy_erase.c
+ * Overlay: ovl_file_choose
+ * Description: Copying and Erasing Files
+ */
+
+#include "z_file_select.h"
+#include "z64rumble.h"
+
+// When choosing a file to copy or erase, the 6 main menu buttons are placed at these offsets
+s16 sChooseFileYOffsets[] = { -48, -48, -48, -24, -24, 0 };
+
+s16 D_8081424C[3][3] = {
+ { 0, -48, -48 },
+ { -64, 16, -48 },
+ { -64, -64, 32 },
+};
+
+s16 sEraseDelayTimer = 15;
+
+/**
+ * Move buttons into place for the select source screen and fade in the proper labels.
+ * Update function for `CM_SETUP_COPY_SOURCE`
+ */
+void FileSelect_SetupCopySource(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s32 yStep;
+ s16 i;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 200 / 4;
+ this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 200 / 4;
+ this->optionButtonAlpha -= 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4;
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionTimer = 4;
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = 0;
+
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200;
+ this->titleLabel = this->nextTitleLabel;
+
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ this->configMode++; // CM_SELECT_COPY_SOURCE
+ }
+}
+
+/**
+ * Allow the player to select a file to copy or exit back to the main menu.
+ * Update function for `CM_SELECT_COPY_SOURCE`
+ */
+void FileSelect_SelectCopySource(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ this->actionTimer = 4;
+ this->buttonIndex = FS_BTN_MAIN_COPY;
+ this->nextTitleLabel = FS_TITLE_SELECT_FILE;
+ this->configMode = CM_COPY_RETURN_MAIN;
+ this->warningLabel = FS_WARNING_NONE;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->actionTimer = 4;
+ this->selectedFileIndex = this->buttonIndex;
+ this->configMode = CM_SETUP_COPY_DEST_1;
+ this->nextTitleLabel = FS_TITLE_COPY_TO;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else if (SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->actionTimer = 4;
+ this->selectedFileIndex = this->buttonIndex;
+ this->configMode = CM_SETUP_COPY_DEST_1;
+ this->nextTitleLabel = FS_TITLE_COPY_TO;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else {
+ if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ if (this->stickAdjY >= 30) {
+ this->buttonIndex--;
+ // Instead of removing File 3 entirely, the index is manually adjusted to skip it
+ if (this->buttonIndex == FS_BTN_COPY_FILE_3) {
+ this->buttonIndex = FS_BTN_COPY_FILE_2;
+ }
+ if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ }
+ } else {
+ this->buttonIndex++;
+ // Instead of removing File 3 entirely, the index is manually adjusted to skip it
+ if (this->buttonIndex == FS_BTN_COPY_FILE_3) {
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ }
+ if (this->buttonIndex > FS_BTN_COPY_QUIT) {
+ this->buttonIndex = FS_BTN_COPY_FILE_1;
+ }
+ }
+ }
+
+ if (this->buttonIndex != FS_BTN_COPY_QUIT) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_EMPTY;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_EMPTY;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+ }
+}
+
+/**
+ * Move the menu buttons into place for the copy destination selection and switch titles.
+ * Update function for `CM_SETUP_COPY_DEST_1`
+ */
+void FileSelect_SetupCopyDest1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s32 yStep;
+ s16 i;
+
+ for (i = 0; i < 3; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->buttonIndex][i]) / this->actionTimer;
+
+ if (D_8081424C[this->buttonIndex][i] >= this->buttonYOffsets[i]) {
+ this->buttonYOffsets[i] += yStep;
+ } else {
+ this->buttonYOffsets[i] -= yStep;
+ }
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->nameBoxAlpha[this->buttonIndex] -= 200 / 4;
+
+ this->actionTimer--;
+ if (this->actionTimer == 0) {
+ this->buttonYOffsets[this->buttonIndex] = D_8081424C[this->buttonIndex][this->buttonIndex];
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->actionTimer = 4;
+ this->configMode++; // CM_SETUP_COPY_DEST_2
+ }
+}
+
+/**
+ * Show the file info of the file selected to copy from.
+ * Update function for `CM_SETUP_COPY_DEST_2`
+ */
+void FileSelect_SetupCopyDest2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->nameBoxAlpha[this->buttonIndex] -= 200 / 4;
+ this->fileInfoAlpha[this->buttonIndex] += 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->nameBoxAlpha[this->buttonIndex] = 0;
+ this->fileInfoAlpha[this->buttonIndex] = 200;
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ this->actionTimer = 4;
+ this->configMode = CM_SELECT_COPY_DEST;
+ }
+}
+
+/**
+ * Allow the player to select a slot to copy to or exit to the copy select screen.
+ * Update function for `CM_SELECT_COPY_DEST`
+ */
+void FileSelect_SelectCopyDest(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ this->buttonIndex = this->selectedFileIndex;
+ this->nextTitleLabel = FS_TITLE_COPY_FROM;
+ this->actionTimer = 4;
+ this->configMode = CM_EXIT_TO_COPY_SOURCE_1;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->copyDestFileIndex = this->buttonIndex;
+ this->nextTitleLabel = FS_TITLE_COPY_CONFIRM;
+ this->actionTimer = 4;
+ this->configMode = CM_SETUP_COPY_CONFIRM_1;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->copyDestFileIndex = this->buttonIndex;
+ this->nextTitleLabel = FS_TITLE_COPY_CONFIRM;
+ this->actionTimer = 4;
+ this->configMode = CM_SETUP_COPY_CONFIRM_1;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else {
+ if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ if (this->stickAdjY >= 30) {
+ this->buttonIndex--;
+ // Instead of removing File 3 entirely, the index is manually adjusted to skip it
+ if (this->buttonIndex == FS_BTN_COPY_FILE_3) {
+ this->buttonIndex = FS_BTN_COPY_FILE_2;
+ }
+ if (this->buttonIndex == this->selectedFileIndex) {
+ this->buttonIndex--;
+ if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ }
+ // Instead of removing File 3 entirely, the index is manually adjusted to skip it
+ if (this->buttonIndex == FS_BTN_COPY_FILE_3) {
+ this->buttonIndex = FS_BTN_COPY_FILE_2;
+ }
+ } else if (this->buttonIndex < FS_BTN_COPY_FILE_1) {
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ }
+ } else {
+ this->buttonIndex++;
+ if (this->buttonIndex > FS_BTN_COPY_QUIT) {
+ this->buttonIndex = FS_BTN_COPY_FILE_1;
+ }
+ if (this->buttonIndex == this->selectedFileIndex) {
+ this->buttonIndex++;
+ }
+ // Instead of removing File 3 entirely, the index is manually adjusted to skip it
+ if (this->buttonIndex == FS_BTN_COPY_FILE_3) {
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ }
+ }
+ }
+ if (this->buttonIndex != FS_BTN_COPY_QUIT) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_IN_USE;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else if (SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_IN_USE;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+ }
+}
+
+/**
+ * Fade out file info, bring back the name box, and get ready to return to copy source screen.
+ * Update function for `CM_EXIT_TO_COPY_SOURCE_1`
+ */
+void FileSelect_ExitToCopySource1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->fileInfoAlpha[this->buttonIndex] -= 200 / 4;
+ this->nameBoxAlpha[this->buttonIndex] += 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->nextTitleLabel = FS_TITLE_COPY_FROM;
+ this->nameBoxAlpha[this->buttonIndex] = 200;
+ this->fileInfoAlpha[this->buttonIndex] = 0;
+ this->actionTimer = 4;
+ this->configMode++; // CM_EXIT_TO_COPY_SOURCE_2
+ }
+}
+
+/**
+ * Move the buttons back into place and return to copy source select.
+ * Update function for `CM_EXIT_TO_COPY_SOURCE_2`
+ */
+void FileSelect_ExitToCopySource2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 3; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ this->configMode = CM_SELECT_COPY_SOURCE;
+ }
+}
+
+s16 D_80814264[] = { -56, -40, -24, 0 };
+
+/**
+ * Rearrange buttons on the screen to prepare for copy confirmation.
+ * Update function for `CM_SETUP_COPY_CONFIRM_1`
+ */
+void FileSelect_SetupCopyConfirm1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+
+ for (i = 0; i < 3; i++) {
+ if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) {
+ this->fileButtonAlpha[i] -= 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->connectorAlpha[i] -= 255 / 4;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->connectorAlpha[i] -= 255 / 4;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ }
+ } else if (i == this->copyDestFileIndex) {
+ yStep = ABS_ALT(this->buttonYOffsets[i] - D_80814264[i]) / this->actionTimer;
+ this->buttonYOffsets[i] += yStep;
+
+ if (this->buttonYOffsets[i] >= D_80814264[i]) {
+ this->buttonYOffsets[i] = D_80814264[i];
+ }
+ }
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->actionTimer = 4;
+ this->configMode++;
+ }
+}
+
+/**
+ * Fade in the 'Yes' button before allowing the player to decide.
+ * Update function for `CM_SETUP_COPY_CONFIRM_2`
+ */
+void FileSelect_SetupCopyConfirm2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->configMode = CM_COPY_CONFIRM;
+ this->buttonIndex = FS_BTN_CONFIRM_QUIT;
+ }
+}
+
+/**
+ * Allow the player to confirm the copy, or quit back to the destination select.
+ * If yes is selected, the actual copy occurs in this function before moving on to the animation.
+ * Update function for `CM_COPY_CONFIRM`
+ */
+void FileSelect_CopyConfirm(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+ u16 dayTime;
+
+ if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ this->actionTimer = 4;
+ this->nextTitleLabel = FS_TITLE_COPY_TO;
+ this->configMode = CM_RETURN_TO_COPY_DEST;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
+ dayTime = gSaveContext.save.time;
+ gSaveContext.save.time = dayTime;
+ this->nameAlpha[this->copyDestFileIndex] = 0;
+ this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex];
+ this->nextTitleLabel = FS_TITLE_COPY_COMPLETE;
+ this->actionTimer = 4;
+ Sram_CopySave(this, sramCtx);
+ if (!gSaveContext.flashSaveAvailable) {
+ this->configMode = CM_COPY_ANIM_1;
+ } else {
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->copyDestFileIndex * 2],
+ gFlashSpecialSaveNumPages[this->copyDestFileIndex * 2]);
+ Sram_StartWriteToFlashDefault(sramCtx);
+ this->configMode = CM_COPY_WAIT_FOR_FLASH_SAVE;
+ }
+ Rumble_Request(300.0f, 180, 20, 100);
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->buttonIndex ^= 1;
+ }
+}
+
+/**
+ * Update and wait for the save to flash to complete.
+ * Update function for `CM_COPY_WAIT_FOR_FLASH_SAVE`
+ */
+void FileSelect_CopyWaitForFlashSave(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ u16 i;
+
+ Sram_UpdateWriteToFlashDefault(sramCtx);
+
+ if (sramCtx->status == 0) {
+ this->configMode = CM_COPY_ANIM_1;
+
+ for (i = 0; i < 6; i++) {
+ this->newf[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i];
+ }
+
+ this->threeDayResetCount[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.threeDayResetCount;
+
+ for (i = 0; i < 8; i++) {
+ this->fileNames[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i];
+ }
+
+ this->healthCapacity[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity;
+ this->health[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health;
+ this->defenseHearts[this->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts;
+ }
+}
+
+/**
+ * Move buttons back in place and return to copy destination select.
+ * Update function for `CM_RETURN_TO_COPY_DEST`
+ */
+void FileSelect_ReturnToCopyDest(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4;
+
+ for (i = 0; i < 3; i++) {
+ if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) {
+ this->fileButtonAlpha[i] += 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ }
+
+ yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->selectedFileIndex][i]) / this->actionTimer;
+
+ if (D_8081424C[this->selectedFileIndex][i] >= this->buttonYOffsets[i]) {
+ this->buttonYOffsets[i] += yStep;
+ } else {
+ this->buttonYOffsets[i] -= yStep;
+ }
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->actionTimer = 4;
+ this->buttonIndex = FS_BTN_COPY_QUIT;
+ this->configMode = CM_SELECT_COPY_DEST;
+ }
+}
+
+/**
+ * Hide title
+ * Update function for `CM_COPY_ANIM_1`
+ */
+void FileSelect_CopyAnim1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->titleAlpha[FS_TITLE_CUR] = 0;
+ this->actionTimer = 4;
+ this->configMode++; // CM_COPY_ANIM_2
+ }
+}
+
+/**
+ * Move a copy of the file window down and fade in the file info.
+ * Update function for `CM_COPY_ANIM_2`
+ */
+void FileSelect_CopyAnim2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s32 yStep;
+
+ this->fileInfoAlpha[this->copyDestFileIndex] += 200 / 4;
+ this->nameAlpha[this->copyDestFileIndex] += 200 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ yStep = ABS_ALT(this->fileNamesY[this->copyDestFileIndex] + 56) / this->actionTimer;
+ this->fileNamesY[this->copyDestFileIndex] -= yStep;
+
+ if (this->fileNamesY[this->copyDestFileIndex] <= -56) {
+ this->fileNamesY[this->copyDestFileIndex] = -56;
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionTimer = 45;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode++; // CM_COPY_ANIM_3
+ }
+}
+
+/**
+ * Play a sound effect to indicate that the copy has completed. Wait for a timer or for
+ * the player to press a button before moving on.
+ * Update function for `CM_COPY_ANIM_3`
+ */
+void FileSelect_CopyAnim3(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (this->actionTimer == 38) {
+ this->connectorAlpha[this->copyDestFileIndex] = 255;
+ play_sound(NA_SE_EV_DIAMOND_SWITCH);
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer < 37) {
+ if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (this->actionTimer == 0)) {
+ this->actionTimer = 4;
+ this->nextTitleLabel = FS_TITLE_SELECT_FILE;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ this->configMode = CM_COPY_ANIM_4;
+ }
+ }
+}
+
+/**
+ * Fade out the info boxes for both files and bring in their name boxes. Fade out title.
+ * Update function for `CM_COPY_ANIM_4`
+ */
+void FileSelect_CopyAnim4(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4;
+ this->fileInfoAlpha[this->copyDestFileIndex] -= 200 / 4;
+ this->nameBoxAlpha[this->selectedFileIndex] += 200 / 4;
+ this->nameBoxAlpha[this->copyDestFileIndex] += 200 / 4;
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->fileNamesY[this->copyDestFileIndex] = this->buttonYOffsets[3] = 0;
+ this->actionTimer = 4;
+ this->titleAlpha[FS_TITLE_CUR] = 0;
+ this->configMode++;
+ }
+}
+
+/**
+ * Restore all buttons and labels back to their original place and go back to the main menu.
+ * Update function for `CM_COPY_ANIM_5`
+ */
+void FileSelect_CopyAnim5(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= 0) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] += 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ }
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4;
+ this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4;
+ this->optionButtonAlpha += 200 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ for (i = 0; i < 3; i++) {
+ this->connectorAlpha[i] = 0;
+ this->fileButtonAlpha[i] = 200;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->connectorAlpha[i];
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] = 255;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] = 255;
+ }
+ }
+
+ this->fileNamesY[this->selectedFileIndex] = 0;
+ this->highlightColor[3] = 70;
+ this->highlightPulseDir = 1;
+ this->highlightTimer = 20;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode = CM_MAIN_MENU;
+ }
+}
+
+/**
+ * Exit from the copy source screen to the main menu. Return all buttons and labels to their original place.
+ * Update function for `CM_COPY_RETURN_MAIN`
+ */
+void FileSelect_ExitCopyToMain(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= 0) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4;
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode = CM_MAIN_MENU;
+ }
+
+ this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY];
+}
+
+/**
+ * Move buttons into place for the erase select screen and fade in the proper labels.
+ * Update function for `CM_SETUP_ERASE_SELECT`
+ */
+void FileSelect_SetupEraseSelect(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 100;
+ this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 100;
+ this->optionButtonAlpha -= 100;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4;
+
+ if (this->actionButtonAlpha[FS_BTN_ACTION_COPY] <= 0) {
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = 0;
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->highlightColor[3] = 70;
+ this->highlightPulseDir = 1;
+ this->highlightTimer = 20;
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->optionButtonAlpha = 0;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->buttonIndex = FS_BTN_ERASE_QUIT;
+ this->configMode++; // CM_ERASE_SELECT
+ }
+}
+
+/**
+ * Allow the player to select a file to erase or exit back to the main menu.
+ * Update function for `CM_ERASE_SELECT`
+ */
+void FileSelect_EraseSelect(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ this->buttonIndex = FS_BTN_MAIN_ERASE;
+ this->actionTimer = 4;
+ this->nextTitleLabel = FS_TITLE_SELECT_FILE;
+ this->configMode = CM_EXIT_ERASE_TO_MAIN;
+ this->warningLabel = FS_WARNING_NONE;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->actionTimer = 4;
+ this->selectedFileIndex = this->buttonIndex;
+ this->configMode = CM_SETUP_ERASE_CONFIRM_1;
+ this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else if (SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->actionTimer = 4;
+ this->selectedFileIndex = this->buttonIndex;
+ this->configMode = CM_SETUP_ERASE_CONFIRM_1;
+ this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM;
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ } else {
+ if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+
+ if (this->stickAdjY >= 30) {
+ this->buttonIndex--;
+ if (this->buttonIndex == FS_BTN_ERASE_FILE_3) {
+ this->buttonIndex = FS_BTN_ERASE_FILE_2;
+ }
+ if (this->buttonIndex < FS_BTN_ERASE_FILE_1) {
+ this->buttonIndex = FS_BTN_ERASE_QUIT;
+ }
+ } else {
+ this->buttonIndex++;
+ if (this->buttonIndex == FS_BTN_ERASE_FILE_3) {
+ this->buttonIndex = FS_BTN_ERASE_QUIT;
+ }
+ if (this->buttonIndex > FS_BTN_ERASE_QUIT) {
+ this->buttonIndex = FS_BTN_ERASE_FILE_1;
+ }
+ }
+ }
+
+ if (this->buttonIndex != FS_BTN_ERASE_QUIT) {
+ if (!gSaveContext.flashSaveAvailable) {
+ if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_EMPTY;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) {
+ this->warningLabel = FS_WARNING_FILE_EMPTY;
+ this->warningButtonIndex = this->buttonIndex;
+ this->emptyFileTextAlpha = 255;
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ } else {
+ this->warningLabel = FS_WARNING_NONE;
+ }
+ }
+}
+
+s16 D_8081426C[] = { 0, 16, 32 };
+
+/**
+ * Update function for `CM_SETUP_ERASE_CONFIRM_1`
+ */
+void FileSelect_SetupEraseConfirm1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] -= 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->connectorAlpha[i] -= 255 / 4;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->connectorAlpha[i] -= 255 / 4;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ }
+ } else {
+ this->nameBoxAlpha[i] -= 200 / 4;
+ }
+ }
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 8;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 8;
+
+ yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - D_8081426C[this->buttonIndex]) / this->actionTimer;
+
+ if (this->buttonYOffsets[this->buttonIndex] >= D_8081426C[this->buttonIndex]) {
+ this->buttonYOffsets[this->buttonIndex] -= yStep;
+ } else {
+ this->buttonYOffsets[this->buttonIndex] += yStep;
+ }
+
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] = 0;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->connectorAlpha[i] = 0;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->connectorAlpha[i] = 0;
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0;
+ }
+ } else {
+ this->nameBoxAlpha[i] = 0;
+ }
+ }
+
+ this->buttonYOffsets[this->buttonIndex] = D_8081426C[this->buttonIndex];
+ this->actionTimer = 4;
+ this->configMode++;
+ }
+}
+
+/**
+ * Show the file info of the file selected to erase.
+ * Update function for `CM_SETUP_ERASE_CONFIRM_2`
+ */
+void FileSelect_SetupEraseConfirm2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4;
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 8;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 8;
+ this->fileInfoAlpha[this->buttonIndex] += 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionTimer = 4;
+ this->titleLabel = this->nextTitleLabel;
+ this->fileInfoAlpha[this->buttonIndex] = this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = 200;
+ this->buttonIndex = FS_BTN_CONFIRM_QUIT;
+ this->configMode = CM_ERASE_CONFIRM;
+ }
+}
+
+/**
+ * Allow the player to confirm their choice to erase or return back to erase select.
+ * Update function for `CM_ERASE_CONFIRM`
+ */
+void FileSelect_EraseConfirm(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) ||
+ CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ this->buttonIndex = this->selectedFileIndex;
+ this->nextTitleLabel = FS_TITLE_ERASE_FILE;
+ this->configMode = CM_EXIT_TO_ERASE_SELECT_1;
+ this->actionTimer = 4;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
+ Sram_EraseSave(this, sramCtx, this->selectedFileIndex);
+ if (!gSaveContext.flashSaveAvailable) {
+ this->configMode = CM_ERASE_ANIM_1;
+ } else {
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->selectedFileIndex * 2],
+ gFlashSpecialSaveNumPages[this->selectedFileIndex * 2]);
+ Sram_StartWriteToFlashDefault(sramCtx);
+ this->configMode = CM_ERASE_WAIT_FOR_FLASH_SAVE;
+ }
+ this->connectorAlpha[this->selectedFileIndex] = 0;
+ play_sound(NA_SE_EV_DIAMOND_SWITCH);
+ this->actionTimer = 4;
+ this->nextTitleLabel = FS_TITLE_ERASE_COMPLETE;
+ Rumble_Request(200.0f, 255, 20, 150);
+ sEraseDelayTimer = 15;
+ } else if (ABS_ALT(this->stickAdjY) >= 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->buttonIndex ^= 1;
+ }
+}
+
+/**
+ * Fade out file info, bring back the name box, and get ready to return to erase select screen.
+ * Update function for `CM_EXIT_TO_ERASE_SELECT_1`
+ */
+void FileSelect_ExitToEraseSelect1(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->fileInfoAlpha[this->buttonIndex] -= 200 / 4;
+ this->nameBoxAlpha[this->buttonIndex] += 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->actionTimer = 4;
+ this->fileInfoAlpha[this->buttonIndex] = 0;
+ this->configMode++; // CM_EXIT_TO_ERASE_SELECT_2
+ }
+}
+
+/**
+ * Move the buttons back into place and return to erase select.
+ * Update function for `CM_EXIT_TO_ERASE_SELECT_2`
+ */
+void FileSelect_ExitToEraseSelect2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ yStep =
+ ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sChooseFileYOffsets[this->buttonIndex]) / this->actionTimer;
+
+ if (this->buttonYOffsets[this->buttonIndex] >= sChooseFileYOffsets[this->buttonIndex]) {
+ this->buttonYOffsets[this->buttonIndex] -= yStep;
+ } else {
+ this->buttonYOffsets[this->buttonIndex] += yStep;
+ }
+
+ for (i = 0; i < 3; i++) {
+ if (i != this->buttonIndex) {
+ this->fileButtonAlpha[i] += 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ }
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->buttonYOffsets[this->buttonIndex] = sChooseFileYOffsets[this->buttonIndex];
+ this->actionTimer = 4;
+ this->buttonIndex = FS_BTN_ERASE_QUIT;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode = CM_ERASE_SELECT;
+ }
+}
+
+/**
+ * Wait for an initial delay, then start fading out the selected file.
+ * The actual file deletion occurs in this function.
+ * Update function for `CM_ERASE_ANIM_1`
+ */
+void FileSelect_EraseAnim1(GameState* thisx) {
+ static s16 D_80814E80;
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+
+ if (sEraseDelayTimer == 0) {
+ if (this->actionTimer == 4) {
+ D_80814E80 = 1;
+ }
+
+ if (this->actionTimer != 0) {
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4;
+ }
+
+ this->fileNamesY[this->selectedFileIndex] -= D_80814E80;
+ D_80814E80 += 2;
+
+ this->actionTimer--;
+ if (this->actionTimer == 0) {
+ this->configMode = CM_ERASE_ANIM_2;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = this->connectorAlpha[this->selectedFileIndex] = 0;
+
+ //! FAKE: there should be a better chained assignment
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
+ if (1) {}
+ if (0) {}
+ this->fileInfoAlpha[this->selectedFileIndex] = this->nameAlpha[this->selectedFileIndex] =
+ this->nameBoxAlpha[this->selectedFileIndex] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT];
+
+ this->actionTimer = 45;
+ }
+ } else {
+ sEraseDelayTimer--;
+
+ if (sEraseDelayTimer == 0) {
+ play_sound(NA_SE_OC_ABYSS);
+ }
+ }
+}
+
+/**
+ * Update and wait for the save to flash to complete.
+ * Update function for `CM_ERASE_WAIT_FOR_FLASH_SAVE`
+ */
+void FileSelect_EraseWaitForFlashSave(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ u16 i;
+
+ Sram_UpdateWriteToFlashDefault(sramCtx);
+
+ if (sramCtx->status == 0) {
+ this->configMode = CM_ERASE_ANIM_1;
+ for (i = 0; i < 6; i++) {
+ this->newf[this->selectedFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i];
+ }
+ }
+}
+
+/**
+ * Wait for a delay timer or for the palyer to press a button before returning to the main menu.
+ * Update function for `CM_ERASE_ANIM_2`
+ */
+void FileSelect_EraseAnim2(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (--this->actionTimer == 0)) {
+ this->buttonYOffsets[3] = 0;
+ this->actionTimer = 4;
+ this->nextTitleLabel = FS_TITLE_SELECT_FILE;
+ this->configMode++; // CM_ERASE_ANIM_3
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ }
+}
+
+/**
+ * Exit from the erase animation to the main menu. Return all buttons and labels to their original place.
+ * Update function for `CM_ERASE_ANIM_3`
+ */
+void FileSelect_EraseAnim3(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= 0) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ for (i = 0; i < 3; i++) {
+ this->fileButtonAlpha[i] += 200 / 4;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ } else if (SLOT_OCCUPIED(this, i)) {
+ this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i];
+ this->connectorAlpha[i] += 255 / 4;
+ }
+ }
+
+ if (this->fileButtonAlpha[this->selectedFileIndex] >= 200) {
+ this->fileButtonAlpha[this->selectedFileIndex] = 200;
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->fileNamesY[this->selectedFileIndex] = 0;
+ this->highlightColor[3] = 70;
+ this->highlightPulseDir = 1;
+ this->highlightTimer = 20;
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode = CM_MAIN_MENU;
+ }
+
+ this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY];
+}
+
+/**
+ * Exit from the erase select screen to the main menu. Return all buttons and labels to their original place.
+ * Update function for `CM_EXIT_ERASE_TO_MAIN`
+ */
+void FileSelect_ExitEraseToMain(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 i;
+ s32 yStep;
+
+ for (i = 0; i < 5; i++) {
+ yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer;
+
+ if (this->buttonYOffsets[i] >= 0) {
+ this->buttonYOffsets[i] -= yStep;
+ } else {
+ this->buttonYOffsets[i] += yStep;
+ }
+ }
+
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4;
+ this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4;
+ this->optionButtonAlpha += 200 / 4;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 2;
+
+ if (this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] <= 0) {
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
+ }
+
+ this->titleAlpha[FS_TITLE_CUR] -= 255 / 4;
+ this->titleAlpha[FS_TITLE_NEXT] += 255 / 4;
+ this->actionTimer--;
+
+ if (this->actionTimer == 0) {
+ this->highlightColor[3] = 70;
+ this->highlightPulseDir = 1;
+ this->highlightTimer = 20;
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200;
+ this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0;
+ this->titleLabel = this->nextTitleLabel;
+ this->titleAlpha[FS_TITLE_CUR] = 255;
+ this->titleAlpha[FS_TITLE_NEXT] = 0;
+ this->configMode = CM_MAIN_MENU;
+ }
+
+ this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] =
+ this->actionButtonAlpha[FS_BTN_ACTION_COPY];
+}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
index c6e3983d8..02236002a 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c
@@ -1,78 +1,1059 @@
/*
* File: z_file_nameset_NES.c
* Overlay: ovl_file_choose
- * Description:
+ * Description: Entering name on a new file, selecting options from the options menu
*/
-#include "z_file_choose.h"
+#include "prevent_bss_reordering.h"
+#include "z_file_select.h"
#include "z64rumble.h"
+#include "misc/title_static/title_static.h"
+#include "overlays/ovl_file_choose/ovl_file_choose.h"
-extern UNK_TYPE D_01002800;
-extern UNK_TYPE D_01007980;
-extern UNK_TYPE D_0102A6B0;
-extern UNK_TYPE D_0102B170;
-extern UNK_TYPE D_010310F0;
-extern UNK_TYPE D_010311F0;
+void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point) {
+ OPEN_DISPS(gfxCtx);
-// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file
-extern GfxMasterList D_0E000000;
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804010.s")
+ CLOSE_DISPS(gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808041A0.s")
+void FileSelect_DrawMultiTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture1, TexturePtr texture2, s16 point) {
+ OPEN_DISPS(gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804654.s")
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture1, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gDPLoadMultiBlock_4b(POLY_OPA_DISP++, texture2, 0x0080, 1, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808047D8.s")
+ CLOSE_DISPS(gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080489C.s")
+s16 D_80814280[] = {
+ 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 0, 3, 1, 0,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804DAC.s")
+s16 D_80814304[] = {
+ 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3,
+ 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804E74.s")
+s16 D_80814384[] = {
+ 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804F98.s")
+s16 D_80814404[] = {
+ -94, -96, -48, 0, 32, 64,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080525C.s")
+s16 D_80814410[] = {
+ 56, 44, 44, 28, 28, 44,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808052B0.s")
+s16 D_8081441C[] = {
+ 72, -48, -48, -48, -48, -48,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808054A4.s")
+void FileSelect_SetKeyboardVtx(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 phi_t2;
+ s16 phi_t0;
+ s16 phi_t3;
+ s16 phi_s1;
+ s16 phi_t1;
+ s16 phi_s2;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808055D0.s")
+ this->keyboardVtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 4 * 5 * 13);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808058A4.s")
+ phi_s1 = 0x26;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805918.s")
+ for (phi_t2 = 0, phi_s2 = 0, phi_t3 = 0; phi_s2 < 5; phi_s2++) {
+ phi_t0 = -0x60;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805A58.s")
+ for (phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4, phi_t2++) {
+ //! @bug D_80814304 is accessed out of bounds when drawing the empty space character (value of 64). Under
+ //! normal circumstances it reads a halfword from D_80814384.
+ this->keyboardVtx[phi_t3].v.ob[0] = this->keyboardVtx[phi_t3 + 2].v.ob[0] = D_80814304[phi_t2] + phi_t0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805B30.s")
+ this->keyboardVtx[phi_t3 + 1].v.ob[0] = this->keyboardVtx[phi_t3 + 3].v.ob[0] =
+ D_80814304[phi_t2] + phi_t0 + 12;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805C1C.s")
+ this->keyboardVtx[phi_t3].v.ob[1] = this->keyboardVtx[phi_t3 + 1].v.ob[1] = phi_s1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806014.s")
+ this->keyboardVtx[phi_t3 + 2].v.ob[1] = this->keyboardVtx[phi_t3 + 3].v.ob[1] = phi_s1 - 12;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806148.s")
+ this->keyboardVtx[phi_t3].v.ob[2] = this->keyboardVtx[phi_t3 + 1].v.ob[2] =
+ this->keyboardVtx[phi_t3 + 2].v.ob[2] = this->keyboardVtx[phi_t3 + 3].v.ob[2] = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806310.s")
+ this->keyboardVtx[phi_t3].v.flag = this->keyboardVtx[phi_t3 + 1].v.flag =
+ this->keyboardVtx[phi_t3 + 2].v.flag = this->keyboardVtx[phi_t3 + 3].v.flag = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808067E0.s")
+ this->keyboardVtx[phi_t3].v.tc[0] = this->keyboardVtx[phi_t3].v.tc[1] =
+ this->keyboardVtx[phi_t3 + 1].v.tc[1] = this->keyboardVtx[phi_t3 + 2].v.tc[0] = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806BC8.s")
+ this->keyboardVtx[phi_t3 + 1].v.tc[0] = this->keyboardVtx[phi_t3 + 2].v.tc[1] =
+ this->keyboardVtx[phi_t3 + 3].v.tc[0] = this->keyboardVtx[phi_t3 + 3].v.tc[1] = 16 << 5;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806CA0.s")
+ this->keyboardVtx[phi_t3].v.cn[0] = this->keyboardVtx[phi_t3 + 1].v.cn[0] =
+ this->keyboardVtx[phi_t3 + 2].v.cn[0] = this->keyboardVtx[phi_t3 + 3].v.cn[0] =
+ this->keyboardVtx[phi_t3].v.cn[1] = this->keyboardVtx[phi_t3 + 1].v.cn[1] =
+ this->keyboardVtx[phi_t3 + 2].v.cn[1] = this->keyboardVtx[phi_t3 + 3].v.cn[1] =
+ this->keyboardVtx[phi_t3].v.cn[2] = this->keyboardVtx[phi_t3 + 1].v.cn[2] =
+ this->keyboardVtx[phi_t3 + 2].v.cn[2] = this->keyboardVtx[phi_t3 + 3].v.cn[2] =
+ this->keyboardVtx[phi_t3].v.cn[3] = this->keyboardVtx[phi_t3 + 1].v.cn[3] =
+ this->keyboardVtx[phi_t3 + 2].v.cn[3] = this->keyboardVtx[phi_t3 + 3].v.cn[3] =
+ 255;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806E84.s")
+ phi_t0 += 0x10;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806F30.s")
+ phi_s1 -= 0x10;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808071E4.s")
+ this->keyboard2Vtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 24);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807390.s")
+ for (phi_t1 = 0, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t1 += 4) {
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080742C.s")
+ this->keyboard2Vtx[phi_t1 + 0].v.ob[0] = this->keyboard2Vtx[phi_t1 + 2].v.ob[0] = D_80814404[phi_t3] + 1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808074B4.s")
+ this->keyboard2Vtx[phi_t1 + 1].v.ob[0] = this->keyboard2Vtx[phi_t1 + 3].v.ob[0] =
+ this->keyboard2Vtx[phi_t1 + 0].v.ob[0] + D_80814410[phi_t3] - 2;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808077AC.s")
+ this->keyboard2Vtx[phi_t1 + 0].v.ob[1] = this->keyboard2Vtx[phi_t1 + 1].v.ob[1] = D_8081441C[phi_t3] - 1;
+
+ this->keyboard2Vtx[phi_t1 + 2].v.ob[1] = this->keyboard2Vtx[phi_t1 + 3].v.ob[1] =
+ this->keyboard2Vtx[phi_t1 + 0].v.ob[1] - 0xE;
+
+ this->keyboard2Vtx[phi_t1 + 0].v.ob[2] = this->keyboard2Vtx[phi_t1 + 1].v.ob[2] =
+ this->keyboard2Vtx[phi_t1 + 2].v.ob[2] = this->keyboard2Vtx[phi_t1 + 3].v.ob[2] = 0;
+
+ this->keyboard2Vtx[phi_t1 + 0].v.flag = this->keyboard2Vtx[phi_t1 + 1].v.flag =
+ this->keyboard2Vtx[phi_t1 + 2].v.flag = this->keyboard2Vtx[phi_t1 + 3].v.flag = 0;
+
+ this->keyboard2Vtx[phi_t1 + 0].v.tc[0] = this->keyboard2Vtx[phi_t1 + 0].v.tc[1] =
+ this->keyboard2Vtx[phi_t1 + 1].v.tc[1] = this->keyboard2Vtx[phi_t1 + 2].v.tc[0] = 0;
+
+ this->keyboard2Vtx[phi_t1 + 1].v.tc[0] = this->keyboard2Vtx[phi_t1 + 3].v.tc[0] = D_80814410[phi_t3] << 5;
+
+ this->keyboard2Vtx[phi_t1 + 2].v.tc[1] = this->keyboard2Vtx[phi_t1 + 3].v.tc[1] = 16 << 5;
+
+ this->keyboard2Vtx[phi_t1 + 0].v.cn[0] = this->keyboard2Vtx[phi_t1 + 1].v.cn[0] =
+ this->keyboard2Vtx[phi_t1 + 2].v.cn[0] = this->keyboard2Vtx[phi_t1 + 3].v.cn[0] =
+ this->keyboard2Vtx[phi_t1 + 0].v.cn[1] = this->keyboard2Vtx[phi_t1 + 1].v.cn[1] =
+ this->keyboard2Vtx[phi_t1 + 2].v.cn[1] = this->keyboard2Vtx[phi_t1 + 3].v.cn[1] =
+ this->keyboard2Vtx[phi_t1 + 0].v.cn[2] = this->keyboard2Vtx[phi_t1 + 1].v.cn[2] =
+ this->keyboard2Vtx[phi_t1 + 2].v.cn[2] = this->keyboard2Vtx[phi_t1 + 3].v.cn[2] =
+ this->keyboard2Vtx[phi_t1 + 0].v.cn[3] = this->keyboard2Vtx[phi_t1 + 1].v.cn[3] =
+ this->keyboard2Vtx[phi_t1 + 2].v.cn[3] = this->keyboard2Vtx[phi_t1 + 3].v.cn[3] =
+ 255;
+ }
+}
+
+TexturePtr sBackspaceEndTextures[] = {
+ gFileSelBackspaceButtonTex,
+ gFileSelENDButtonENGTex,
+};
+
+u16 sBackspaceEndWidths[] = { 28, 44 };
+
+s16 D_80814434[] = {
+ -30, -16, -6, 4, 14, 24, 34, 44, 54, -16, -16, 0,
+};
+
+s16 D_8081444C[] = {
+ 72, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0,
+};
+
+/**
+ * Set vertices used by all elements of the name entry screen that are NOT the keyboard.
+ * This includes the cursor highlight, the name entry plate and characters, and the buttons.
+ */
+void FileSelect_SetNameEntryVtx(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Font* font = &this->font;
+ u8 temp;
+ s16 var_s0;
+ s16 var_t1;
+ s16 sp108;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+ gSPVertex(POLY_OPA_DISP++, this->keyboard2Vtx, 24, 0);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelNameENGTex, G_IM_FMT_IA, G_IM_SIZ_8b, 56, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ for (var_t1 = 0, var_s0 = 0x10; var_t1 < 2; var_t1++, var_s0 += 4) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sBackspaceEndTextures[var_t1], G_IM_FMT_IA, G_IM_SIZ_16b,
+ sBackspaceEndWidths[var_t1], 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, var_s0, var_s0 + 2, var_s0 + 3, var_s0 + 1, 0);
+ }
+
+ this->nameEntryVtx = GRAPH_ALLOC(this->state.gfxCtx, 44 * sizeof(Vtx));
+
+ for (var_s0 = 0, var_t1 = 0; var_t1 < 44; var_t1 += 4, var_s0++) {
+ if ((var_s0 > 0) && (var_s0 < 9)) {
+ temp = this->fileNames[this->buttonIndex][var_s0 - 1];
+
+ this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] =
+ D_80814434[var_s0] + this->nameEntryBoxPosX + D_80814280[temp];
+
+ this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] =
+ this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10;
+ } else {
+ this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] =
+ D_80814434[var_s0] + this->nameEntryBoxPosX;
+
+ this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] =
+ this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10;
+ }
+
+ this->nameEntryVtx[var_t1 + 0].v.ob[1] = this->nameEntryVtx[var_t1 + 1].v.ob[1] = D_8081444C[var_s0];
+
+ this->nameEntryVtx[var_t1 + 2].v.ob[1] = this->nameEntryVtx[var_t1 + 3].v.ob[1] =
+ this->nameEntryVtx[var_t1 + 0].v.ob[1] - 10;
+
+ this->nameEntryVtx[var_t1 + 0].v.ob[2] = this->nameEntryVtx[var_t1 + 1].v.ob[2] =
+ this->nameEntryVtx[var_t1 + 2].v.ob[2] = this->nameEntryVtx[var_t1 + 3].v.ob[2] = 0;
+
+ this->nameEntryVtx[var_t1 + 0].v.flag = this->nameEntryVtx[var_t1 + 1].v.flag =
+ this->nameEntryVtx[var_t1 + 2].v.flag = this->nameEntryVtx[var_t1 + 3].v.flag = 0;
+
+ this->nameEntryVtx[var_t1 + 0].v.tc[0] = this->nameEntryVtx[var_t1 + 0].v.tc[1] =
+ this->nameEntryVtx[var_t1 + 1].v.tc[1] = this->nameEntryVtx[var_t1 + 2].v.tc[0] = 0;
+
+ this->nameEntryVtx[var_t1 + 1].v.tc[0] = this->nameEntryVtx[var_t1 + 2].v.tc[1] =
+ this->nameEntryVtx[var_t1 + 3].v.tc[0] = this->nameEntryVtx[var_t1 + 3].v.tc[1] = 16 << 5;
+
+ this->nameEntryVtx[var_t1 + 0].v.cn[0] = this->nameEntryVtx[var_t1 + 1].v.cn[0] =
+ this->nameEntryVtx[var_t1 + 2].v.cn[0] = this->nameEntryVtx[var_t1 + 3].v.cn[0] =
+ this->nameEntryVtx[var_t1 + 0].v.cn[1] = this->nameEntryVtx[var_t1 + 1].v.cn[1] =
+ this->nameEntryVtx[var_t1 + 2].v.cn[1] = this->nameEntryVtx[var_t1 + 3].v.cn[1] =
+ this->nameEntryVtx[var_t1 + 0].v.cn[2] = this->nameEntryVtx[var_t1 + 1].v.cn[2] =
+ this->nameEntryVtx[var_t1 + 2].v.cn[2] = this->nameEntryVtx[var_t1 + 3].v.cn[2] =
+ this->nameEntryVtx[var_t1 + 0].v.cn[3] = this->nameEntryVtx[var_t1 + 1].v.cn[3] =
+ this->nameEntryVtx[var_t1 + 2].v.cn[3] = this->nameEntryVtx[var_t1 + 3].v.cn[3] =
+ 255;
+ }
+
+ this->nameEntryVtx[1].v.ob[0] = this->nameEntryVtx[3].v.ob[0] = this->nameEntryVtx[0].v.ob[0] + 0x6C;
+ this->nameEntryVtx[2].v.ob[1] = this->nameEntryVtx[3].v.ob[1] = this->nameEntryVtx[0].v.ob[1] - 0x10;
+ this->nameEntryVtx[1].v.tc[0] = this->nameEntryVtx[3].v.tc[0] = 108 << 5;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2],
+ this->nameEntryBoxAlpha);
+ gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx, 4, 0);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+ gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx + 4, 32, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->nameEntryBoxAlpha);
+
+ for (sp108 = 0, var_s0 = 0; var_s0 < 0x20; var_s0 += 4, sp108++) {
+ FileSelect_DrawTexQuadI4(
+ this->state.gfxCtx, font->fontBuf + this->fileNames[this->buttonIndex][sp108] * FONT_CHAR_TEX_SIZE, var_s0);
+ }
+
+ this->nameEntryVtx[37].v.tc[0] = this->nameEntryVtx[38].v.tc[1] = this->nameEntryVtx[39].v.tc[0] =
+ this->nameEntryVtx[39].v.tc[1] = this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[42].v.tc[1] =
+ this->nameEntryVtx[43].v.tc[0] = this->nameEntryVtx[43].v.tc[1] = 24 << 5;
+
+ if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) ||
+ (this->kbdButton == FS_KBD_BTN_END)) {
+ this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 56 << 5;
+ } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) {
+ this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 40 << 5;
+ }
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_DrawKeyboard(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ Font* font = &this->font;
+ s16 i;
+ s16 tmp;
+ s16 vtx;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ Gfx_SetupDL42_Opa(this->state.gfxCtx);
+ gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE);
+ gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, COMBINED, 0,
+ 0, 0, COMBINED);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, this->charBgAlpha, 255, 255, 255, 255);
+
+ for (i = 0, vtx = 0; vtx < 0x100; vtx += 32) {
+ gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0);
+
+ for (tmp = 0; tmp < 32; i++, tmp += 4) {
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, tmp);
+ }
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0);
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, 0);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_DrawNameEntry(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Font* font = &this->font;
+ Input* input = CONTROLLER1(&this->state);
+ s16 i;
+ s16 tmp;
+ u16 time;
+ s16 validName;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ FileSelect_SetKeyboardVtx(&this->state);
+ FileSelect_SetNameEntryVtx(&this->state);
+ FileSelect_PulsateCursor(&this->state);
+
+ tmp = (this->newFileNameCharCount * 4) + 4;
+ this->nameEntryVtx[36].v.ob[0] = this->nameEntryVtx[38].v.ob[0] = this->nameEntryVtx[tmp].v.ob[0] - 6;
+ this->nameEntryVtx[37].v.ob[0] = this->nameEntryVtx[39].v.ob[0] = this->nameEntryVtx[36].v.ob[0] + 24;
+ this->nameEntryVtx[36].v.ob[1] = this->nameEntryVtx[37].v.ob[1] = this->nameEntryVtx[tmp].v.ob[1] + 7;
+ this->nameEntryVtx[38].v.ob[1] = this->nameEntryVtx[39].v.ob[1] = this->nameEntryVtx[36].v.ob[1] - 24;
+
+ if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) ||
+ (this->kbdButton == FS_KBD_BTN_END)) {
+ this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] =
+ this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4;
+ this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 52;
+ this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] =
+ this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4;
+ } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) {
+ this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] =
+ this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4;
+ this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 40;
+ this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] =
+ this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4;
+ } else {
+ this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] =
+ this->keyboardVtx[this->charIndex * 4].v.ob[0] - D_80814304[this->charIndex] - 6;
+ this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 24;
+ this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] =
+ this->keyboardVtx[this->charIndex * 4].v.ob[1] + 6;
+ }
+
+ this->nameEntryVtx[42].v.ob[1] = this->nameEntryVtx[43].v.ob[1] = this->nameEntryVtx[40].v.ob[1] - 24;
+
+ gSPVertex(POLY_OPA_DISP++, &this->nameEntryVtx[36], 8, 0);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0,
+ PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1], this->highlightColor[2],
+ this->highlightColor[3]);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelCharHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 24, 24, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+
+ if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) ||
+ (this->kbdButton == FS_KBD_BTN_END)) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelMediumButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 56, 24, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelSmallButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 40, 24, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ }
+
+ gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0);
+
+ FileSelect_DrawKeyboard(&this->state);
+ gDPPipeSync(POLY_OPA_DISP++);
+ Gfx_SetupDL42_Opa(this->state.gfxCtx);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+
+ if (this->configMode == CM_NAME_ENTRY) {
+ if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ // place cursor on END button
+ this->kbdY = 5;
+ this->kbdX = 4;
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) {
+
+ for (i = this->newFileNameCharCount; i < 7; i++) {
+ this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1];
+ }
+
+ this->fileNames[this->buttonIndex][i] = 0x3E;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else {
+ this->newFileNameCharCount--;
+
+ if (this->newFileNameCharCount < 0) {
+ this->newFileNameCharCount = 0;
+ this->configMode = CM_NAME_ENTRY_TO_MAIN;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else {
+ for (i = this->newFileNameCharCount; i < 7; i++) {
+ this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1];
+ }
+
+ this->fileNames[this->buttonIndex][i] = 0x3E;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ }
+ }
+ } else {
+ if (this->charPage <= FS_CHAR_PAGE_ENG) {
+ if (this->kbdY != 5) {
+ // draw the character the cursor is hovering over in yellow
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, 255);
+
+ //! @bug D_80814384 is accessed out of bounds when drawing the empty space character (value of 64).
+ //! Under normal circumstances it reads a halfword from D_80814404.
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] =
+ this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[0] =
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + D_80814384[this->charIndex] - 2;
+
+ this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[0] =
+ this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[0] =
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + 0x10;
+
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] =
+ this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[1] =
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] + 2;
+
+ this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[1] =
+ this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[1] =
+ this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] - 0x10;
+
+ gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[this->charIndex * 4], 4, 0);
+
+ FileSelect_DrawTexQuadI4(this->state.gfxCtx,
+ font->fontBuf + D_808141F0[this->charIndex] * FONT_CHAR_TEX_SIZE, 0);
+
+ if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_S);
+ this->fileNames[this->buttonIndex][this->newFileNameCharCount] = D_808141F0[this->charIndex];
+
+ this->newFileNameCharCount++;
+
+ if (this->newFileNameCharCount > 7) {
+ this->newFileNameCharCount = 7;
+ }
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ if (this->charPage != this->kbdButton) {
+ if (this->kbdButton == FS_KBD_BTN_BACKSPACE) {
+ if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) {
+
+ for (i = this->newFileNameCharCount; i < 7; i++) {
+ this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1];
+ }
+
+ this->fileNames[this->buttonIndex][i] = 0x3E;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ } else {
+ this->newFileNameCharCount--;
+
+ if (this->newFileNameCharCount < 0) {
+ this->newFileNameCharCount = 0;
+ }
+
+ for (i = this->newFileNameCharCount; i < 7; i++) {
+ this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1];
+ }
+
+ this->fileNames[this->buttonIndex][i] = 0x3E;
+ play_sound(NA_SE_SY_FSEL_CLOSE);
+ }
+ } else if (this->kbdButton == FS_KBD_BTN_END) {
+ validName = false;
+
+ for (i = 0; i < 8; i++) {
+ if (this->fileNames[this->buttonIndex][i] != 0x3E) {
+ validName = true;
+ break;
+ }
+ }
+
+ if (validName) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ gSaveContext.fileNum = this->buttonIndex;
+ time = ((void)0, gSaveContext.save.time);
+ Sram_InitSave(this, sramCtx);
+ gSaveContext.save.time = time;
+
+ if (!gSaveContext.flashSaveAvailable) {
+ this->configMode = CM_NAME_ENTRY_TO_MAIN;
+ } else {
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->buttonIndex * 2],
+ gFlashSpecialSaveNumPages[this->buttonIndex * 2]);
+ Sram_StartWriteToFlashDefault(sramCtx);
+ this->configMode = CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE;
+ }
+
+ this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200;
+ this->connectorAlpha[this->buttonIndex] = 255;
+ Rumble_Request(300.0f, 180, 20, 100);
+ } else {
+ play_sound(NA_SE_SY_FSEL_ERROR);
+ }
+ }
+ }
+ }
+
+ if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->newFileNameCharCount++;
+
+ if (this->newFileNameCharCount > 7) {
+ this->newFileNameCharCount = 7;
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->newFileNameCharCount--;
+
+ if (this->newFileNameCharCount < 0) {
+ this->newFileNameCharCount = 0;
+ }
+ }
+ }
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+/**
+ * Fade in the name entry box and slide it to the center of the screen from the right side.
+ * After the name entry box is in place, init the keyboard/cursor and change modes.
+ * Update function for `CM_START_NAME_ENTRY`
+ */
+void FileSelect_StartNameEntry(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->nameEntryBoxAlpha += 25;
+
+ if (this->nameEntryBoxAlpha >= 255) {
+ this->nameEntryBoxAlpha = 255;
+ }
+
+ this->nameEntryBoxPosX -= 30;
+
+ if (this->nameEntryBoxPosX <= 0) {
+ this->nameEntryBoxPosX = 0;
+ this->nameEntryBoxAlpha = 255;
+ this->kbdX = 0;
+ this->kbdY = 0;
+ this->kbdButton = FS_KBD_BTN_NONE;
+ this->configMode = CM_NAME_ENTRY;
+ }
+}
+
+/**
+ * Update the keyboard cursor and play sound effects at the appropriate times.
+ * There are many special cases for warping the cursor depending on where
+ * the cursor currently is.
+ * Update function for `CM_NAME_ENTRY`
+ */
+void FileSelect_UpdateKeyboardCursor(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 prevKbdX;
+
+ this->kbdButton = FS_KBD_BTN_NONE;
+
+ if (this->kbdY != 5) {
+ if (this->stickAdjX < -30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->charIndex--;
+ this->kbdX--;
+ if (this->kbdX < 0) {
+ this->kbdX = 12;
+ this->charIndex = (this->kbdY * 13) + this->kbdX;
+ }
+ } else if (this->stickAdjX > 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->charIndex++;
+ this->kbdX++;
+ if (this->kbdX > 12) {
+ this->kbdX = 0;
+ this->charIndex = (this->kbdY * 13) + this->kbdX;
+ }
+ }
+ } else {
+ if (this->stickAdjX < -30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->kbdX--;
+ if (this->kbdX < 3) {
+ this->kbdX = 4;
+ }
+ } else if (this->stickAdjX > 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->kbdX++;
+ if (this->kbdX > 4) {
+ this->kbdX = 3;
+ }
+ }
+ }
+
+ if (this->stickAdjY > 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+
+ this->kbdY--;
+
+ if (this->kbdY < 0) {
+ // Don't go to bottom row
+ if (this->kbdX < 8) {
+ this->kbdY = 4;
+ this->charIndex = (s32)(this->kbdX + 52);
+ } else {
+ this->kbdY = 5;
+ this->charIndex += 52;
+ prevKbdX = this->kbdX;
+
+ if (this->kbdX < 10) {
+ this->kbdX = 3;
+ } else if (this->kbdX < 13) {
+ this->kbdX = 4;
+ }
+ this->unk_2451E[this->kbdX] = prevKbdX;
+ }
+ } else {
+ this->charIndex -= 13;
+
+ if (this->kbdY == 4) {
+ this->charIndex = 52;
+ this->kbdX = this->unk_2451E[this->kbdX];
+ this->charIndex += this->kbdX;
+ }
+ }
+ } else if (this->stickAdjY < -30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ this->kbdY++;
+
+ if (this->kbdY > 5) {
+ this->kbdY = 0;
+ this->kbdX = this->unk_2451E[this->kbdX];
+ this->charIndex = this->kbdX;
+ } else {
+ this->charIndex += 13;
+
+ if (this->kbdY == 5) {
+ if (this->kbdX < 8) {
+ this->kbdY = 0;
+ this->charIndex = this->kbdX;
+ } else {
+ prevKbdX = this->kbdX;
+
+ if (this->kbdX < 3) {
+ this->kbdX = 0;
+ } else if (this->kbdX < 6) {
+ this->kbdX = 1;
+ } else if (this->kbdX < 8) {
+ this->kbdX = 2;
+ } else if (this->kbdX < 10) {
+ this->kbdX = 3;
+ } else if (this->kbdX < 13) {
+ this->kbdX = 4;
+ }
+ this->unk_2451E[this->kbdX] = prevKbdX;
+ }
+ }
+ }
+ }
+ if (this->kbdY == 5) {
+ this->kbdButton = this->kbdX;
+ }
+}
+
+/**
+ * Update and wait for the save to flash to complete.
+ * Update function for `CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE`
+ */
+void FileSelect_NameEntryWaitForFlashSave(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+
+ Sram_UpdateWriteToFlashDefault(sramCtx);
+
+ if (sramCtx->status == 0) {
+ this->configMode = CM_NAME_ENTRY_TO_MAIN;
+ }
+}
+
+/**
+ * This function is mostly a copy paste of `FileSelect_StartNameEntry`.
+ * The name entry box fades and slides in even though it is not visible.
+ * After this is complete, change to the options config mode.
+ * Update function for `CM_START_OPTIONS`
+ */
+void FileSelect_StartOptions(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+
+ this->nameEntryBoxAlpha += 25;
+
+ if (this->nameEntryBoxAlpha >= 255) {
+ this->nameEntryBoxAlpha = 255;
+ }
+
+ this->nameEntryBoxPosX -= 30;
+
+ if (this->nameEntryBoxPosX <= 0) {
+ this->nameEntryBoxPosX = 0;
+ this->nameEntryBoxAlpha = 255;
+ this->configMode = CM_OPTIONS_MENU;
+ }
+}
+
+u8 sSelectedSetting;
+// bss padding
+s32 D_80814E94;
+s32 D_80814E98;
+s32 D_80814E9C;
+s32 D_80814EA0;
+
+/**
+ * Update the cursor and appropriate settings for the options menu.
+ * If the player presses B, write the selected options to the SRAM header
+ * and set config mode to rotate back to the main menu.
+ * Update function for `CM_OPTIONS_MENU`
+ */
+void FileSelect_UpdateOptionsMenu(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+ Input* input = CONTROLLER1(&this->state);
+
+ if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ Sram_WriteSaveOptionsToBuffer(sramCtx);
+
+ if (!gSaveContext.flashSaveAvailable) {
+ this->configMode = CM_OPTIONS_TO_MAIN;
+ } else {
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[8], gFlashSpecialSaveNumPages[8]);
+ Sram_StartWriteToFlashDefault(sramCtx);
+ this->configMode = CM_OPTIONS_WAIT_FOR_FLASH_SAVE;
+ }
+ func_801A3D98(gSaveContext.options.audioSetting);
+ return;
+ }
+
+ if (this->stickAdjX < -30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+
+ if (sSelectedSetting == FS_SETTING_AUDIO) {
+ gSaveContext.options.audioSetting--;
+
+ // because audio setting is unsigned, can't check for < 0
+ if (gSaveContext.options.audioSetting > 0xF0) {
+ gSaveContext.options.audioSetting = SAVE_AUDIO_SURROUND;
+ }
+ } else {
+ gSaveContext.options.zTargetSetting ^= 1;
+ }
+ } else if (this->stickAdjX > 30) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+
+ if (sSelectedSetting == FS_SETTING_AUDIO) {
+ gSaveContext.options.audioSetting++;
+ if (gSaveContext.options.audioSetting > SAVE_AUDIO_SURROUND) {
+ gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO;
+ }
+ } else {
+ gSaveContext.options.zTargetSetting ^= 1;
+ }
+ }
+
+ if ((this->stickAdjY < -30) || (this->stickAdjY > 30)) {
+ play_sound(NA_SE_SY_FSEL_CURSOR);
+ sSelectedSetting ^= 1;
+ return;
+ }
+ if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ play_sound(NA_SE_SY_FSEL_DECIDE_L);
+ sSelectedSetting ^= 1;
+ }
+}
+
+/**
+ * Update and wait for the save to flash to complete.
+ * Update function for `CM_OPTIONS_WAIT_FOR_FLASH_SAVE`
+ */
+void FileSelect_OptionsWaitForFlashSave(GameState* thisx) {
+ FileSelectState* this = (FileSelectState*)thisx;
+ SramContext* sramCtx = &this->sramCtx;
+
+ Sram_UpdateWriteToFlashDefault(sramCtx);
+
+ if (sramCtx->status == 0) {
+ this->configMode = CM_OPTIONS_TO_MAIN;
+ }
+}
+
+typedef struct {
+ /* 0x0 */ TexturePtr texture;
+ /* 0x4 */ u16 width;
+ /* 0x6 */ u16 height;
+} OptionsMenuTextureInfo; // size = 0x8
+
+OptionsMenuTextureInfo gOptionsMenuHeaders[] = {
+ { gFileSelOptionsENGTex, 128, 16 }, { gFileSelSoundENGTex, 64, 16 },
+ { gFileSelTargetingENGTex, 64, 16 }, { gFileSelCheckBrightnessENGTex, 96, 16 },
+ { gFileSelDolbySurroundLogoENGTex, 48, 17 },
+};
+
+OptionsMenuTextureInfo gOptionsMenuSettings[] = {
+ { gFileSelStereoENGTex, 48, 16 }, { gFileSelMonoENGTex, 48, 16 }, { gFileSelHeadsetENGTex, 48, 16 },
+ { gFileSelSurroundENGTex, 48, 16 }, { gFileSelSwitchENGTex, 48, 16 }, { gFileSelHoldENGTex, 48, 16 },
+};
+
+void FileSelect_DrawOptionsImpl(GameState* thisx) {
+ static s16 sCursorPrimRed = 255;
+ static s16 sCursorPrimGreen = 255;
+ static s16 sCursorPrimBlue = 255;
+ static s16 sCursorEnvRed = 0;
+ static s16 sCursorEnvGreen = 0;
+ static s16 sCursorEnvBlue = 0;
+ static s16 sCursorPulseDir = 1;
+ static s16 sCursorFlashTimer = 20;
+ static s16 sCursorPrimColors[][3] = {
+ { 255, 255, 255 },
+ { 0, 255, 255 },
+ };
+ static s16 sCursorEnvColors[][3] = {
+ { 0, 0, 0 },
+ { 0, 150, 150 },
+ };
+ FileSelectState* this = (FileSelectState*)thisx;
+ s16 cursorRedStep;
+ s16 cursorGreenStep;
+ s16 cursorBlueStep;
+ s16 i;
+ s16 j;
+ s16 vtx;
+
+ OPEN_DISPS(this->state.gfxCtx);
+
+ cursorRedStep = ABS_ALT(sCursorPrimRed - sCursorPrimColors[sCursorPulseDir][0]) / sCursorFlashTimer;
+ cursorGreenStep = ABS_ALT(sCursorPrimGreen - sCursorPrimColors[sCursorPulseDir][1]) / sCursorFlashTimer;
+ cursorBlueStep = ABS_ALT(sCursorPrimBlue - sCursorPrimColors[sCursorPulseDir][2]) / sCursorFlashTimer;
+
+ if (sCursorPrimRed >= sCursorPrimColors[sCursorPulseDir][0]) {
+ sCursorPrimRed -= cursorRedStep;
+ } else {
+ sCursorPrimRed += cursorRedStep;
+ }
+
+ if (sCursorPrimGreen >= sCursorPrimColors[sCursorPulseDir][1]) {
+ sCursorPrimGreen -= cursorGreenStep;
+ } else {
+ sCursorPrimGreen += cursorGreenStep;
+ }
+
+ if (sCursorPrimBlue >= sCursorPrimColors[sCursorPulseDir][2]) {
+ sCursorPrimBlue -= cursorBlueStep;
+ } else {
+ sCursorPrimBlue += cursorBlueStep;
+ }
+
+ cursorRedStep = ABS_ALT(sCursorEnvRed - sCursorEnvColors[sCursorPulseDir][0]) / sCursorFlashTimer;
+ cursorGreenStep = ABS_ALT(sCursorEnvGreen - sCursorEnvColors[sCursorPulseDir][1]) / sCursorFlashTimer;
+ cursorBlueStep = ABS_ALT(sCursorEnvBlue - sCursorEnvColors[sCursorPulseDir][2]) / sCursorFlashTimer;
+
+ if (sCursorEnvRed >= sCursorEnvColors[sCursorPulseDir][0]) {
+ sCursorEnvRed -= cursorRedStep;
+ } else {
+ sCursorEnvRed += cursorRedStep;
+ }
+
+ if (sCursorEnvGreen >= sCursorEnvColors[sCursorPulseDir][1]) {
+ sCursorEnvGreen -= cursorGreenStep;
+ } else {
+ sCursorEnvGreen += cursorGreenStep;
+ }
+
+ if (sCursorEnvBlue >= sCursorEnvColors[sCursorPulseDir][2]) {
+ sCursorEnvBlue -= cursorBlueStep;
+ } else {
+ sCursorEnvBlue += cursorBlueStep;
+ }
+
+ if (--sCursorFlashTimer == 0) {
+ sCursorPrimRed = sCursorPrimColors[sCursorPulseDir][0];
+ sCursorPrimGreen = sCursorPrimColors[sCursorPulseDir][1];
+ sCursorPrimBlue = sCursorPrimColors[sCursorPulseDir][2];
+
+ sCursorEnvRed = sCursorEnvColors[sCursorPulseDir][0];
+ sCursorEnvGreen = sCursorEnvColors[sCursorPulseDir][1];
+ sCursorEnvBlue = sCursorEnvColors[sCursorPulseDir][2];
+
+ sCursorFlashTimer = 20;
+
+ if (++sCursorPulseDir > 1) {
+ sCursorPulseDir = 0;
+ }
+ }
+
+ // blue divider lines
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
+
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelOptionsDividerTex, G_IM_FMT_IA, 256, 2, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+
+ Matrix_Push();
+ Matrix_Translate(0.0f, 0.1f, 0.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(POLY_OPA_DISP++, gOptionsDividerTopVtx, 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ Matrix_Pop();
+
+ Matrix_Push();
+ Matrix_Translate(0.0f, 0.2f, 0.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(POLY_OPA_DISP++, gOptionsDividerMiddleVtx, 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ Matrix_Pop();
+
+ Matrix_Push();
+ Matrix_Translate(0.0f, 0.4f, 0.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(POLY_OPA_DISP++, gOptionsDividerBottomVtx, 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ Matrix_Pop();
+
+ gSPVertex(POLY_OPA_DISP++, D_80813DF0, 32, 0);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ for (i = 0, vtx = 0; i < 5; i++, vtx += 4) {
+ if (i == 4) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ if (gSaveContext.options.audioSetting == SAVE_AUDIO_SURROUND) {
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+ }
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuHeaders[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b,
+ gOptionsMenuHeaders[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ gSPVertex(POLY_OPA_DISP++, D_80813F30, 32, 0);
+
+ for (i = 0, vtx = 0; i < 4; i++, vtx += 4) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ if (i == gSaveContext.options.audioSetting) {
+ if (sSelectedSetting == FS_SETTING_AUDIO) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue,
+ this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b,
+ gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0);
+ }
+
+ for (; i < 6; i++, vtx += 4) {
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (i == (gSaveContext.options.zTargetSetting + 4)) {
+ if (sSelectedSetting == FS_SETTING_ZTARGET) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue,
+ this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b,
+ gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0);
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ // check brightness bars
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelBrightnessCheckTex, G_IM_FMT_IA, 96, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 55, 55, 55, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 40, 40, 40, 255);
+ gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0);
+
+ vtx += 4;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 30, 30, 30, this->titleAlpha[FS_TITLE_CUR]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0);
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+
+void FileSelect_DrawOptions(GameState* thisx) {
+ FileSelect_DrawOptionsImpl(thisx);
+}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c
new file mode 100644
index 000000000..47619b66d
--- /dev/null
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c
@@ -0,0 +1,17 @@
+#include "z_file_select.h"
+
+// Vtx Data
+#include "overlays/ovl_file_choose/ovl_file_choose.c"
+
+u8 D_808141F0[] = {
+ // 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M'
+ /* Row 0 */ 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ // 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
+ /* Row 1 */ 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,
+ // 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm'
+ /* Row 2 */ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
+ // 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z'
+ /* Row 3 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,
+ // '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' '.' '-' ' '
+ /* Row 4 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x40, 0x3F, 0x3E
+};
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_select.h b/src/overlays/gamestates/ovl_file_choose/z_file_select.h
new file mode 100644
index 000000000..88236e63e
--- /dev/null
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_select.h
@@ -0,0 +1,332 @@
+#ifndef FILE_SELECT_H
+#define FILE_SELECT_H
+
+#include "global.h"
+#include "z64game.h"
+#include "z64message.h"
+#include "z64skybox.h"
+#include "z64view.h"
+
+
+// `sramCtx->noFlashSaveBuf` is never allocated space, so should never be used
+// Slot offsets are also based on OoT SaveContext sizes, and contains incorrect sizes from MM
+// Macros appear to be remnant from OoT
+#define NO_FLASH_GET_NEWF(sramCtx, slotNum, index) \
+ (sramCtx->noFlashSaveBuf[gSramSlotOffsets[slotNum] + offsetof(SaveContext, save.saveInfo.playerData.newf[index])])
+#define NO_FLASH_SLOT_OCCUPIED(sramCtx, slotNum) \
+ ((NO_FLASH_GET_NEWF(sramCtx, slotNum, 0) == 'Z') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 1) == 'E') || \
+ (NO_FLASH_GET_NEWF(sramCtx, slotNum, 2) == 'L') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 3) == 'D') || \
+ (NO_FLASH_GET_NEWF(sramCtx, slotNum, 4) == 'A') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 5) == '3'))
+
+#define GET_NEWF(fileSelect, slotNum, index) (fileSelect->newf[slotNum][index])
+#define SLOT_OCCUPIED(fileSelect, slotNum) \
+ ((GET_NEWF(fileSelect, slotNum, 0) == 'Z') && (GET_NEWF(fileSelect, slotNum, 1) == 'E') && \
+ (GET_NEWF(fileSelect, slotNum, 2) == 'L') && (GET_NEWF(fileSelect, slotNum, 3) == 'D') && \
+ (GET_NEWF(fileSelect, slotNum, 4) == 'A') && (GET_NEWF(fileSelect, slotNum, 5) == '3'))
+
+// Init mode: Initial setup as the file select is starting up, fades and slides in various menu elements
+// Config mode: Handles the bulk of the file select, various configuration tasks like picking a file, copy/erase, and the options menu
+// Select mode: Displays the selected file with various details about it, and allows the player to confirm and open it
+typedef enum {
+ /* 0 */ FS_MENU_MODE_INIT,
+ /* 1 */ FS_MENU_MODE_CONFIG,
+ /* 2 */ FS_MENU_MODE_SELECT
+} MenuMode;
+
+typedef enum {
+ /* 0x00 */ CM_FADE_IN_START,
+ /* 0x01 */ CM_FADE_IN_END,
+ /* 0x02 */ CM_MAIN_MENU,
+ /* 0x03 */ CM_SETUP_COPY_SOURCE,
+ /* 0x04 */ CM_SELECT_COPY_SOURCE,
+ /* 0x05 */ CM_SETUP_COPY_DEST_1,
+ /* 0x06 */ CM_SETUP_COPY_DEST_2,
+ /* 0x07 */ CM_SELECT_COPY_DEST,
+ /* 0x08 */ CM_EXIT_TO_COPY_SOURCE_1,
+ /* 0x09 */ CM_EXIT_TO_COPY_SOURCE_2,
+ /* 0x0A */ CM_SETUP_COPY_CONFIRM_1,
+ /* 0x0B */ CM_SETUP_COPY_CONFIRM_2,
+ /* 0x0C */ CM_COPY_CONFIRM,
+ /* 0x0D */ CM_COPY_WAIT_FOR_FLASH_SAVE,
+ /* 0x0E */ CM_RETURN_TO_COPY_DEST,
+ /* 0x0F */ CM_COPY_ANIM_1,
+ /* 0x10 */ CM_COPY_ANIM_2,
+ /* 0x11 */ CM_COPY_ANIM_3,
+ /* 0x12 */ CM_COPY_ANIM_4,
+ /* 0x13 */ CM_COPY_ANIM_5,
+ /* 0x14 */ CM_COPY_RETURN_MAIN,
+ /* 0x15 */ CM_SETUP_ERASE_SELECT,
+ /* 0x16 */ CM_ERASE_SELECT,
+ /* 0x17 */ CM_SETUP_ERASE_CONFIRM_1,
+ /* 0x18 */ CM_SETUP_ERASE_CONFIRM_2,
+ /* 0x19 */ CM_ERASE_CONFIRM,
+ /* 0x1A */ CM_EXIT_TO_ERASE_SELECT_1,
+ /* 0x1B */ CM_EXIT_TO_ERASE_SELECT_2,
+ /* 0x1C */ CM_ERASE_ANIM_1,
+ /* 0x1D */ CM_ERASE_WAIT_FOR_FLASH_SAVE,
+ /* 0x1E */ CM_ERASE_ANIM_2,
+ /* 0x1F */ CM_ERASE_ANIM_3,
+ /* 0x20 */ CM_EXIT_ERASE_TO_MAIN,
+ /* 0x21 */ CM_UNUSED_31,
+ /* 0x22 */ CM_ROTATE_TO_NAME_ENTRY,
+ /* 0x23 */ CM_START_NAME_ENTRY,
+ /* 0x24 */ CM_NAME_ENTRY,
+ /* 0x25 */ CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE,
+ /* 0x26 */ CM_NAME_ENTRY_TO_MAIN,
+ /* 0x27 */ CM_MAIN_TO_OPTIONS,
+ /* 0x28 */ CM_START_OPTIONS,
+ /* 0x29 */ CM_OPTIONS_MENU,
+ /* 0x2A */ CM_OPTIONS_WAIT_FOR_FLASH_SAVE,
+ /* 0x2B */ CM_OPTIONS_TO_MAIN,
+ /* 0x2C */ CM_UNUSED_DELAY
+} ConfigMode;
+
+typedef enum {
+ /* 0 */ SM_FADE_MAIN_TO_SELECT,
+ /* 1 */ SM_MOVE_FILE_TO_TOP,
+ /* 2 */ SM_FADE_IN_FILE_INFO,
+ /* 3 */ SM_CONFIRM_FILE,
+ /* 4 */ SM_FADE_OUT_FILE_INFO,
+ /* 5 */ SM_MOVE_FILE_TO_SLOT,
+ /* 6 */ SM_FADE_OUT,
+ /* 7 */ SM_LOAD_GAME
+} SelectMode;
+
+typedef enum {
+ /* 0 */ FS_TITLE_SELECT_FILE, // "Please select a file."
+ /* 1 */ FS_TITLE_OPEN_FILE, // "Open this file?"
+ /* 2 */ FS_TITLE_COPY_FROM, // "Copy which file?"
+ /* 3 */ FS_TITLE_COPY_TO, // "Copy to which file?"
+ /* 4 */ FS_TITLE_COPY_CONFIRM, // "Are you sure?"
+ /* 5 */ FS_TITLE_COPY_COMPLETE, // "File copied."
+ /* 6 */ FS_TITLE_ERASE_FILE, // "Erase which file?"
+ /* 7 */ FS_TITLE_ERASE_CONFIRM, // "Are you sure?"
+ /* 8 */ FS_TITLE_ERASE_COMPLETE // "File erased."
+} TitleLabel;
+
+typedef enum {
+ /* 0 */ FS_TITLE_CUR,
+ /* 1 */ FS_TITLE_NEXT
+} TitleIndex;
+
+typedef enum {
+ /* -1 */ FS_WARNING_NONE = -1,
+ /* 0 */ FS_WARNING_NO_FILE_COPY, // "No file to copy."
+ /* 1 */ FS_WARNING_NO_FILE_ERASE, // "No file to erase."
+ /* 2 */ FS_WARNING_NO_EMPTY_FILES, // "There is no empty file."
+ /* 3 */ FS_WARNING_FILE_EMPTY, // "This is an empty file."
+ /* 4 */ FS_WARNING_FILE_IN_USE // "This file is in use."
+} WarningLabel;
+
+typedef enum {
+ /* 0 */ FS_BTN_MAIN_FILE_1,
+ /* 1 */ FS_BTN_MAIN_FILE_2,
+ /* 2 */ FS_BTN_MAIN_FILE_3,
+ /* 3 */ FS_BTN_MAIN_COPY,
+ /* 4 */ FS_BTN_MAIN_ERASE,
+ /* 5 */ FS_BTN_MAIN_OPTIONS
+} MainMenuButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_BTN_COPY_FILE_1,
+ /* 1 */ FS_BTN_COPY_FILE_2,
+ /* 2 */ FS_BTN_COPY_FILE_3,
+ /* 3 */ FS_BTN_COPY_QUIT
+} CopyMenuButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_BTN_ERASE_FILE_1,
+ /* 1 */ FS_BTN_ERASE_FILE_2,
+ /* 2 */ FS_BTN_ERASE_FILE_3,
+ /* 3 */ FS_BTN_ERASE_QUIT
+} EraseMenuButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_BTN_SELECT_FILE_1,
+ /* 1 */ FS_BTN_SELECT_FILE_2,
+ /* 2 */ FS_BTN_SELECT_FILE_3,
+ /* 3 */ FS_BTN_SELECT_YES,
+ /* 4 */ FS_BTN_SELECT_QUIT
+} SelectMenuButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_BTN_CONFIRM_YES,
+ /* 1 */ FS_BTN_CONFIRM_QUIT
+} ConfirmButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_BTN_ACTION_COPY,
+ /* 1 */ FS_BTN_ACTION_ERASE
+} ActionButtonIndex;
+
+typedef enum {
+ /* 0 */ FS_SETTING_AUDIO,
+ /* 1 */ FS_SETTING_ZTARGET
+} SettingIndex;
+
+typedef enum {
+ /* 0 */ FS_CHAR_PAGE_HIRA,
+ /* 1 */ FS_CHAR_PAGE_KATA,
+ /* 2 */ FS_CHAR_PAGE_ENG
+} CharPage;
+
+typedef enum {
+ /* 0 */ FS_KBD_BTN_HIRA,
+ /* 1 */ FS_KBD_BTN_KATA,
+ /* 2 */ FS_KBD_BTN_ENG,
+ /* 3 */ FS_KBD_BTN_BACKSPACE,
+ /* 4 */ FS_KBD_BTN_END,
+ /* 99 */ FS_KBD_BTN_NONE = 99
+} KeyboardButton;
+
+typedef struct FileSelectState {
+ /* 0x00000 */ GameState state;
+ /* 0x000A4 */ Vtx* windowVtx;
+ /* 0x000A8 */ u8* staticSegment;
+ /* 0x000AC */ u8* parameterSegment;
+ /* 0x000B0 */ u8* titleSegment;
+ /* 0x000B8 */ View view;
+ /* 0x00220 */ SramContext sramCtx;
+ /* 0x00248 */ SkyboxContext skyboxCtx;
+ /* 0x00470 */ MessageContext msgCtx;
+ /* 0x12550 */ Font font;
+ /* 0x242E0 */ EnvironmentContext envCtx;
+ /* 0x243E0 */ UNK_TYPE1 pad243E0[0x4];
+ /* 0x243E4 */ Vtx* windowContentVtx;
+ /* 0x243E8 */ Vtx* keyboardVtx;
+ /* 0x243EC */ Vtx* nameEntryVtx;
+ /* 0x243F0 */ Vtx* keyboard2Vtx;
+ /* 0x243F4 */ u8 newf[4][6];
+ /* 0x2440C */ u16 threeDayResetCount[4];
+ /* 0x24414 */ char fileNames[4][8];
+ /* 0x24434 */ s16 healthCapacity[4];
+ /* 0x2443C */ s16 health[4];
+ /* 0x24444 */ u32 questItems[4];
+ /* 0x24454 */ s8 defenseHearts[4];
+ /* 0x24458 */ u16 time[4];
+ /* 0x24460 */ s16 day[4];
+ /* 0x24468 */ u8 isOwlSave[4];
+ /* 0x2446C */ s16 rupees[4];
+ /* 0x24474 */ u8 walletUpgrades[4];
+ /* 0x24478 */ u8 maskCount[4];
+ /* 0x2447C */ u8 heartPieceCount[4];
+ /* 0x24480 */ s16 buttonIndex; // enum will depend on `ConfigMode`
+ /* 0x24482 */ s16 confirmButtonIndex; // see `ConfirmButtonIndex` enum
+ /* 0x24484 */ s16 menuMode; // see `MenuMode` enum
+ /* 0x24486 */ s16 configMode; // see `ConfigMode` enum
+ /* 0x24488 */ s16 prevConfigMode; // see `ConfigMode` enum
+ /* 0x2448A */ s16 nextConfigMode; // see `ConfigMode` enum
+ /* 0x2448C */ s16 selectMode; // see `SelectMode` enum
+ /* 0x2448E */ s16 selectedFileIndex;
+ /* 0x24490 */ UNK_TYPE1 pad24490[0x2];
+ /* 0x24492 */ s16 fileNamesY[3];
+ /* 0x24498 */ s16 actionTimer;
+ /* 0x2449A */ s16 buttonYOffsets[6];
+ /* 0x244A6 */ s16 copyDestFileIndex;
+ /* 0x244A8 */ s16 warningLabel;
+ /* 0x244AA */ s16 warningButtonIndex;
+ /* 0x244AC */ s16 titleLabel; // see `TitleLabel` enum
+ /* 0x244AE */ s16 nextTitleLabel; // see `TitleLabel` enum
+ /* 0x244B0 */ s16 windowColor[3];
+ /* 0x244B6 */ s16 titleAlpha[2]; // see `TitleIndex` enum
+ /* 0x244BA */ s16 windowAlpha;
+ /* 0x244BC */ s16 fileButtonAlpha[3];
+ /* 0x244C2 */ s16 nameBoxAlpha[3];
+ /* 0x244C8 */ s16 nameAlpha[3];
+ /* 0x244CE */ s16 connectorAlpha[3];
+ /* 0x244D4 */ s16 fileInfoAlpha[3];
+ /* 0x244DA */ s16 actionButtonAlpha[2];
+ /* 0x244DA */ s16 confirmButtonAlpha[2];
+ /* 0x244E2 */ s16 optionButtonAlpha;
+ /* 0x244E4 */ s16 nameEntryBoxAlpha;
+ /* 0x244E6 */ s16 controlsAlpha;
+ /* 0x244E8 */ s16 emptyFileTextAlpha;
+ /* 0x244EA */ s16 highlightColor[4];
+ /* 0x244F2 */ s16 highlightPulseDir;
+ /* 0x244F4 */ s16 unk_244F4;
+ /* 0x244F6 */ s16 confirmButtonTexIndices[2];
+ /* 0x244FA */ s16 inputTimerX;
+ /* 0x244FC */ s16 inputTimerY;
+ /* 0x244FE */ s16 stickXDir;
+ /* 0x24500 */ s16 stickYDir;
+ /* 0x24502 */ s16 stickAdjX;
+ /* 0x24504 */ s16 stickAdjY;
+ /* 0x24506 */ s16 nameEntryBoxPosX;
+ /* 0x24508 */ s16 windowPosX;
+ /* 0x2450A */ s16 screenFillAlpha;
+ /* 0x2450C */ f32 windowRot;
+ /* 0x24510 */ s16 kbdButton;
+ /* 0x24512 */ s16 charPage;
+ /* 0x24514 */ s16 charBgAlpha;
+ /* 0x24516 */ s16 charIndex;
+ /* 0x24518 */ s16 kbdX;
+ /* 0x2451A */ s16 kbdY;
+ /* 0x2451C */ s16 newFileNameCharCount;
+ /* 0x2451E */ s16 unk_2451E[5];
+ /* 0x24528 */ s16 highlightTimer;
+ /* 0x2452A */ s16 unk_2452A;
+ /* 0x2452C */ s16 unk_2452C[4];
+ /* 0x24534 */ s16 unk_24534[4];
+ /* 0x2453C */ s16 unk_2453C[4];
+ /* 0x24544 */ s16 unk_24544[4];
+ /* 0x2454C */ s16 unk_2454C;
+ /* 0x2454E */ s16 unk_2454E;
+ /* 0x24550 */ s16 unk_24550;
+} FileSelectState; // size = 0x24558
+
+void FileSelect_Init(GameState* thisx);
+void FileSelect_Destroy(GameState* thisx);
+
+void FileSelect_PulsateCursor(GameState* thisx);
+void FileSelect_DrawNameEntry(GameState* thisx);
+void FileSelect_DrawOptions(GameState* thisx);
+void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point);
+
+// Copying Files
+void FileSelect_SetupCopySource(GameState* thisx);
+void FileSelect_SelectCopySource(GameState* thisx);
+void FileSelect_SetupCopyDest1(GameState* thisx);
+void FileSelect_SetupCopyDest2(GameState* thisx);
+void FileSelect_SelectCopyDest(GameState* thisx);
+void FileSelect_ExitToCopySource1(GameState* thisx);
+void FileSelect_ExitToCopySource2(GameState* thisx);
+void FileSelect_SetupCopyConfirm1(GameState* thisx);
+void FileSelect_SetupCopyConfirm2(GameState* thisx);
+void FileSelect_CopyConfirm(GameState* thisx);
+void FileSelect_CopyWaitForFlashSave(GameState* thisx);
+void FileSelect_ReturnToCopyDest(GameState* thisx);
+void FileSelect_CopyAnim1(GameState* thisx);
+void FileSelect_CopyAnim2(GameState* thisx);
+void FileSelect_CopyAnim3(GameState* thisx);
+void FileSelect_CopyAnim4(GameState* thisx);
+void FileSelect_CopyAnim5(GameState* thisx);
+void FileSelect_ExitCopyToMain(GameState* thisx);
+
+// Erasing Files
+void FileSelect_SetupEraseSelect(GameState* thisx);
+void FileSelect_EraseSelect(GameState* thisx);
+void FileSelect_SetupEraseConfirm1(GameState* thisx);
+void FileSelect_SetupEraseConfirm2(GameState* thisx);
+void FileSelect_EraseConfirm(GameState* thisx);
+void FileSelect_ExitToEraseSelect1(GameState* thisx);
+void FileSelect_ExitToEraseSelect2(GameState* thisx);
+void FileSelect_EraseAnim1(GameState* thisx);
+void FileSelect_EraseWaitForFlashSave(GameState* thisx);
+void FileSelect_EraseAnim2(GameState* thisx);
+void FileSelect_EraseAnim3(GameState* thisx);
+void FileSelect_ExitEraseToMain(GameState* thisx);
+
+// Entering Name
+void FileSelect_StartNameEntry(GameState* thisx);
+void FileSelect_UpdateKeyboardCursor(GameState* thisx);
+void FileSelect_NameEntryWaitForFlashSave(GameState* thisx);
+
+// Selecting Options
+void FileSelect_StartOptions(GameState* thisx);
+void FileSelect_UpdateOptionsMenu(GameState* thisx);
+void FileSelect_OptionsWaitForFlashSave(GameState* thisx);
+
+extern u8 D_808141F0[];
+extern s16 D_80814280[];
+
+#endif
diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c
index 9697b111f..84425cc73 100644
--- a/src/overlays/gamestates/ovl_opening/z_opening.c
+++ b/src/overlays/gamestates/ovl_opening/z_opening.c
@@ -4,9 +4,12 @@
* Description: Initializes the game into the title screen
*/
+#include "global.h"
#include "z_opening.h"
+#include "z64save.h"
#include "z64shrink_window.h"
#include "z64view.h"
+#include "regs.h"
void TitleSetup_SetupTitleScreen(TitleSetupState* this) {
static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) };
diff --git a/src/overlays/gamestates/ovl_opening/z_opening.h b/src/overlays/gamestates/ovl_opening/z_opening.h
index 36a01ffe9..530b069e1 100644
--- a/src/overlays/gamestates/ovl_opening/z_opening.h
+++ b/src/overlays/gamestates/ovl_opening/z_opening.h
@@ -1,15 +1,15 @@
-#ifndef _Z64_OPENING_H_
-#define _Z64_OPENING_H_
+#ifndef Z64_OPENING_H
+#define Z64_OPENING_H
-#include "global.h"
+#include "z64game.h"
+#include "z64view.h"
+
+typedef struct {
+ /* 0x000 */ GameState state;
+ /* 0x0A8 */ View view;
+} TitleSetupState; // size = 0x210
void TitleSetup_Init(GameState* thisx);
void TitleSetup_Destroy(GameState* thisx);
-typedef struct {
- /* 0x000 */ GameState state;
- /* 0x0A4 */ UNK_TYPE1 unk_A4[0x4];
- /* 0x0A8 */ View view;
-} TitleSetupState; // size = 0x210
-
#endif
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index 08bf65262..88d9ccdc4 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -987,7 +987,7 @@ void MapSelect_DrawMenu(MapSelectState* this) {
OPEN_DISPS(gfxCtx);
- func_8012C4C0(gfxCtx);
+ Gfx_SetupDL28_Opa(gfxCtx);
printer = alloca(sizeof(GfxPrint));
GfxPrint_Init(printer);
@@ -1009,7 +1009,7 @@ void MapSelect_DrawLoadingScreen(MapSelectState* this) {
OPEN_DISPS(gfxCtx);
- func_8012C4C0(gfxCtx);
+ Gfx_SetupDL28_Opa(gfxCtx);
GfxPrint_Init(&printer);
GfxPrint_Open(&printer, POLY_OPA_DISP);
diff --git a/src/overlays/gamestates/ovl_select/z_select.h b/src/overlays/gamestates/ovl_select/z_select.h
index 69312e986..876c9e3ff 100644
--- a/src/overlays/gamestates/ovl_select/z_select.h
+++ b/src/overlays/gamestates/ovl_select/z_select.h
@@ -1,16 +1,17 @@
-#ifndef _Z64_SELECT_H_
-#define _Z64_SELECT_H_
+#ifndef Z64_SELECT_H
+#define Z64_SELECT_H
-#include "global.h"
+#include "z64game.h"
+#include "z64view.h"
struct MapSelectState;
typedef void (*SelectLoadFunc)(struct MapSelectState*, u32, s32);
typedef struct {
- /* 0x00 */ char* name;
- /* 0x04 */ SelectLoadFunc loadFunc;
- /* 0x08 */ s32 entrance;
+ /* 0x0 */ char* name;
+ /* 0x4 */ SelectLoadFunc loadFunc;
+ /* 0x8 */ s32 entrance;
} SceneSelectEntry; // size = 0xC
typedef struct MapSelectState {
diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c
index 59b1bed02..abde294e5 100644
--- a/src/overlays/gamestates/ovl_title/z_title.c
+++ b/src/overlays/gamestates/ovl_title/z_title.c
@@ -81,7 +81,7 @@ void ConsoleLogo_Draw(GameState* thisx) {
gSPSetLights1(POLY_OPA_DISP++, sTitleLights);
ConsoleLogo_RenderView(this, 0.0f, 150.0f, 300.0f);
- func_8012C28C(this->state.gfxCtx);
+ Gfx_SetupDL25_Opa(this->state.gfxCtx);
Matrix_Translate(-53.0f, -5.0f, 0.0f, MTXMODE_NEW);
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
Matrix_RotateZYX(0, sTitleRotation, 0, MTXMODE_APPLY);
@@ -89,7 +89,7 @@ void ConsoleLogo_Draw(GameState* thisx) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, gNintendo64LogoNDL);
- func_8012C628(this->state.gfxCtx);
+ Gfx_SetupDL39_Opa(this->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE);
@@ -171,7 +171,7 @@ void ConsoleLogo_Init(GameState* thisx) {
gSaveContext.fileNum = 0xFF;
}
- gSaveContext.unk_3F3F = true;
+ gSaveContext.flashSaveAvailable = true;
Sram_Alloc(thisx, &this->sramCtx);
this->ult = 0;
this->timer = 20;
diff --git a/src/overlays/gamestates/ovl_title/z_title.h b/src/overlays/gamestates/ovl_title/z_title.h
index 0cb19da1a..ee5d5c841 100644
--- a/src/overlays/gamestates/ovl_title/z_title.h
+++ b/src/overlays/gamestates/ovl_title/z_title.h
@@ -2,9 +2,8 @@
#define Z64_TITLE_H
#include "global.h"
-
-void ConsoleLogo_Init(GameState* thisx);
-void ConsoleLogo_Destroy(GameState* thisx);
+#include "z64game.h"
+#include "z64view.h"
typedef struct {
/* 0x000 */ GameState state;
@@ -20,4 +19,7 @@ typedef struct {
/* 0x244 */ u8 exit;
} ConsoleLogoState; // size = 0x248
+void ConsoleLogo_Init(GameState* thisx);
+void ConsoleLogo_Destroy(GameState* thisx);
+
#endif
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
index 75c031c0a..1b18adcd1 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c
@@ -13,7 +13,7 @@ extern TexturePtr D_08061000; // gBombersNotebookIconTex
extern TexturePtr D_08062000; // gSongNoteIconTex
s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 };
-s16 sQuestHpColorTimerInit[] = { 20, 4, 20, 10 };
+s16 sQuestHpColorTimerInits[] = { 20, 4, 20, 10 };
s16 sQuestSongPlayedOcarinaButtonsNum = 0;
u8 sQuestSongPlayedOcarinaButtons[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
s16 sQuestSongPlayedOcarinaButtonsAlpha[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
@@ -313,7 +313,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) {
sQuestHpPrimGreen = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1];
sQuestHpPrimBlue = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2];
sQuestHpPrimAlpha = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3];
- sQuestHpColorTimer = sQuestHpColorTimerInit[sQuestHpPrimColorTargetIndex];
+ sQuestHpColorTimer = sQuestHpColorTimerInits[sQuestHpPrimColorTargetIndex];
if (++sQuestHpPrimColorTargetIndex > 3) {
sQuestHpPrimColorTargetIndex = 0;
}
@@ -563,7 +563,7 @@ typedef struct {
/* 0x2 */ s16 down;
/* 0x4 */ s16 left;
/* 0x6 */ s16 right;
-} CursorPointDirection;
+} CursorPointDirection; // size = 0x8
void KaleidoScope_UpdateQuestCursor(PlayState* play) {
static s16 sQuestSongPlaybackDelayTimer = 0;
@@ -618,7 +618,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
nextCursorPoint = sCursorPointLinks[oldCursorPoint].left;
if (nextCursorPoint == CURSOR_TO_LEFT) {
@@ -641,7 +641,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
nextCursorPoint = sCursorPointLinks[oldCursorPoint].right;
if (nextCursorPoint == CURSOR_TO_RIGHT) {
@@ -666,7 +666,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
nextCursorPoint = sCursorPointLinks[oldCursorPoint].down;
while (nextCursorPoint > CURSOR_NONE) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
break;
}
@@ -679,7 +679,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
}
nextCursorPoint = sCursorPointLinks[oldCursorPoint].up;
while (nextCursorPoint > CURSOR_NONE) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
break;
}
@@ -907,7 +907,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_BOMBERS_NOTEBOOK;
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
@@ -925,7 +925,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
}
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_REMAINS_GOHT;
if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
index d5d0368dd..f643d8d40 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c
@@ -37,7 +37,7 @@ typedef struct {
/* 0x0 */ s16 screenX;
/* 0x2 */ s16 screenY;
/* 0x4 */ s16 width;
-} SectionPosition; // size = 0x6;
+} SectionPosition; // size = 0x6
// clang-format off
SectionPosition sSectionPositions[] = {
@@ -285,7 +285,7 @@ void KaleidoScope_DrawInventoryEditorText(Gfx** gfxp) {
GfxPrint_SetPos(&printer, 23, 22);
GfxPrint_Printf(&printer, "%s", "セイ");
- // Life (double defence)
+ // Life (double defense)
GfxPrint_SetPos(&printer, 4, 25);
GfxPrint_Printf(&printer, "%s", "イ");
GfxPrint_SetPos(&printer, 4, 26);
@@ -345,7 +345,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
@@ -601,7 +601,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
counterDigits[1] += 21;
}
- // Double Defence
+ // Double Defense
KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202);
// Magic
@@ -1048,16 +1048,13 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
// Dungeon Items
slot = sCurSection - INV_EDITOR_SECTION_DUNGEON_ITEMS;
if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- // Map
- gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 4;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_MAP);
}
if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
- // Compass
- gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 2;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_COMPASS);
}
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- // Boss Key
- gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 1;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_BOSS_KEY);
}
} else if (sCurSection < INV_EDITOR_SECTION_DOUBLE_DEFENSE) {
@@ -1077,7 +1074,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
}
} else {
- // Double Defence
+ // Double Defense
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
gSaveContext.save.saveInfo.playerData.doubleDefense ^= 1;
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
index cfcaf20ea..f46db573c 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c
@@ -252,7 +252,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
// Draw a white box around the items that are equipped on the C buttons
// Loop over c-buttons (i) and vtx offset (j)
@@ -319,7 +319,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
if ((pauseCtx->state == PAUSE_STATE_MAIN) &&
((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM)) &&
(pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) {
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
// Loop over slots (i) and ammoIndex (j)
@@ -332,7 +332,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
j++;
}
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
}
}
@@ -382,7 +382,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) {
if (pauseCtx->stickAdjX < -30) {
// move cursor left
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorXIndex[PAUSE_ITEM] != 0) {
pauseCtx->cursorXIndex[PAUSE_ITEM]--;
pauseCtx->cursorPoint[PAUSE_ITEM]--;
@@ -413,7 +413,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
} else if (pauseCtx->stickAdjX > 30) {
// move cursor right
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorXIndex[PAUSE_ITEM] <= 4) {
pauseCtx->cursorXIndex[PAUSE_ITEM]++;
pauseCtx->cursorPoint[PAUSE_ITEM]++;
@@ -451,7 +451,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
} else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
if (pauseCtx->stickAdjX > 30) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
cursorYIndex = 0;
cursorXIndex = 0;
cursorPoint = 0; // top row, left column (SLOT_OCARINA)
@@ -489,7 +489,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
} else { // PAUSE_CURSOR_PAGE_RIGHT
if (pauseCtx->stickAdjX < -30) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
cursorXIndex = 5;
cursorPoint = 5; // top row, right columne (SLOT_TRADE_DEED)
cursorYIndex = 0;
@@ -541,7 +541,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS;
if (pauseCtx->cursorYIndex[PAUSE_ITEM] != 0) {
pauseCtx->cursorYIndex[PAUSE_ITEM]--;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
pauseCtx->cursorPoint[PAUSE_ITEM] -= 6;
moveCursorResult = PAUSE_CURSOR_RESULT_SLOT;
} else {
@@ -553,7 +553,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS;
if (pauseCtx->cursorYIndex[PAUSE_ITEM] < 3) {
pauseCtx->cursorYIndex[PAUSE_ITEM]++;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
pauseCtx->cursorPoint[PAUSE_ITEM] += 6;
moveCursorResult = PAUSE_CURSOR_RESULT_SLOT;
} else {
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
index af12f2d5d..a4df2c889 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c
@@ -152,7 +152,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
// QUAD_MAP_PAGE_DUNGEON_BOSS_KEY,
// QUAD_MAP_PAGE_DUNGEON_COMPASS,
// QUAD_MAP_PAGE_DUNGEON_MAP
- gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_DUNGEON_TITLE * 4], 4 * 4, 0);
// Dungeon Title
gDPPipeSync(POLY_OPA_DISP++);
@@ -191,7 +191,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
sStrayFairyIconAlphaScaleTimer = 15;
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
@@ -230,7 +230,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
POLY_OPA_DISP =
Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0);
KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
@@ -254,7 +254,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
sStrayFairyIconRectS[sStrayFairyIconIndex], 0, 1 << 10, 1 << 10);
KaleidoScope_DrawDungeonStrayFairyCount(play);
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
}
}
} else if (CHECK_DUNGEON_ITEM(i, gSaveContext.dungeonIndex)) {
@@ -277,7 +277,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) &&
!IS_PAUSE_STATE_GAMEOVER) {
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@@ -294,7 +294,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
}
}
@@ -317,9 +317,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP];
if (pauseCtx->stickAdjX > 30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256;
pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256;
@@ -345,9 +345,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
}
}
} else if (pauseCtx->stickAdjX < -30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
pauseCtx->cursorXIndex[PAUSE_MAP] = 1;
pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_MAP;
if (!CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.dungeonIndex)) {
@@ -390,7 +390,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
gBitFlags[i]) ||
func_801090B0(FLOOR_INDEX_MAX - i)) {
pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
break;
}
}
@@ -411,7 +411,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
gBitFlags[i]) ||
func_801090B0(FLOOR_INDEX_MAX - i)) {
pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
break;
}
}
@@ -558,7 +558,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Each loaded chunk must have `size <= TMEM_SIZE / 2`
// because the texture is color-indexed, so the TLUT uses the other half of TMEM.
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT);
@@ -579,7 +579,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
0, 1 << 10, 1 << 10);
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
} else {
// Draw the world map angled
@@ -638,7 +638,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
@@ -670,7 +670,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
gDPFillRectangle(POLY_OPA_DISP++, 50, 62, 270, 190);
}
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
if (!IS_PAUSE_STATE_OWLWARP) {
// Browsing the world map regions on the pause menu
@@ -809,7 +809,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Draw Player's face at the current region
if (n != REGION_MAX) {
KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
- func_8012C628(play->state.gfxCtx);
+ Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@@ -854,7 +854,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
if (pauseCtx->cursorSpecialPos == 0) {
if (pauseCtx->stickAdjX > 30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
sStickAdjTimer = 0;
while (true) {
@@ -869,7 +869,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
}
}
} else if (pauseCtx->stickAdjX < -30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
sStickAdjTimer = 0;
while (true) {
@@ -898,7 +898,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
if (pauseCtx->stickAdjX > 30) {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = -1;
pauseCtx->cursorSpecialPos = 0;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
while (true) {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++;
@@ -923,7 +923,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
} else if (pauseCtx->stickAdjX < -30) {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 11;
pauseCtx->cursorSpecialPos = 0;
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
while (true) {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--;
@@ -958,7 +958,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
if (pauseCtx->stickAdjX > 30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
sStickAdjTimer = 0;
do {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++;
@@ -967,7 +967,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
}
} while (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]);
} else if (pauseCtx->stickAdjX < -30) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
sStickAdjTimer = 0;
do {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--;
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
index 950e10788..228f0d16a 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c
@@ -198,7 +198,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx);
- func_8012C8AC(play->state.gfxCtx);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
// Draw a white box around the items that are equipped on the C buttons
// Loop over c-buttons (i) and vtx offset (j)
@@ -309,7 +309,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) {
if (pauseCtx->stickAdjX < -30) {
// move cursor left
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorXIndex[PAUSE_MASK] != 0) {
pauseCtx->cursorXIndex[PAUSE_MASK]--;
pauseCtx->cursorPoint[PAUSE_MASK]--;
@@ -339,7 +339,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
} else if (pauseCtx->stickAdjX > 30) {
// move cursor right
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
if (pauseCtx->cursorXIndex[PAUSE_MASK] <= 4) {
pauseCtx->cursorXIndex[PAUSE_MASK]++;
pauseCtx->cursorPoint[PAUSE_MASK]++;
@@ -380,7 +380,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
} else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
if (pauseCtx->stickAdjX > 30) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
cursorYIndex = 0;
cursorXIndex = 0;
cursorPoint = 0; // top row, left column (SLOT_MASK_POSTMAN)
@@ -421,7 +421,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
//! FAKE:
if (1) {}
if (pauseCtx->stickAdjX < -30) {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
cursorXIndex = 5;
cursorPoint = 5; // top row, right column (SLOT_MASK_DEKU)
cursorYIndex = 0;
@@ -473,7 +473,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// move cursor up
moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS;
if (pauseCtx->cursorYIndex[PAUSE_MASK] != 0) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
pauseCtx->cursorYIndex[PAUSE_MASK]--;
pauseCtx->cursorPoint[PAUSE_MASK] -= 6;
moveCursorResult = PAUSE_CURSOR_RESULT_SLOT;
@@ -485,7 +485,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// move cursor down
moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS;
if (pauseCtx->cursorYIndex[PAUSE_MASK] < 3) {
- pauseCtx->unk_298 = 4.0f;
+ pauseCtx->cursorShrinkRate = 4.0f;
pauseCtx->cursorYIndex[PAUSE_MASK]++;
pauseCtx->cursorPoint[PAUSE_MASK] += 6;
moveCursorResult = PAUSE_CURSOR_RESULT_SLOT;
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
index a9aeed70f..c82a40e67 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h
@@ -76,9 +76,9 @@ typedef enum {
} PauseMainState;
typedef enum {
- /* 0x00 */ PAUSE_SAVEPROMPT_STATE_0,
+ /* 0x00 */ PAUSE_SAVEPROMPT_STATE_APPEARING,
/* 0x01 */ PAUSE_SAVEPROMPT_STATE_1,
- /* 0x02 */ PAUSE_SAVEPROMPT_STATE_2,
+ /* 0x02 */ PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU,
/* 0x03 */ PAUSE_SAVEPROMPT_STATE_3,
/* 0x04 */ PAUSE_SAVEPROMPT_STATE_4,
/* 0x05 */ PAUSE_SAVEPROMPT_STATE_5,
@@ -303,9 +303,35 @@ typedef enum {
/* 66 */ QUAD_MAP_PAGE_WORLD_MAX
} WorldMapPageQuad;
+// === INFO PANEL === //
+
+/**
+ * infoPanelVtx
+ *
+ * infoPanelVtx[0] name panel left texture
+ * infoPanelVtx[4] name panel right texture
+ * infoPanelVtx[8] Z Button icon
+ * infoPanelVtx[12] R Button icon
+ * infoPanelVtx[16] A button icon (or name segment)
+ * infoPanelVtx[20] pause-to-decide texture
+ * infoPanelVtx[24] (unused) oot remnant of Gold Skulltula Icon Texture
+ */
+
#define PAUSE_NAME_COLOR_SET_WHITE 0
#define PAUSE_NAME_COLOR_SET_GREY 1
+// === CURSOR === //
+
+/**
+ * cursorVtx
+ *
+ * cursorVtx[0] cursor circle
+ * cursorVtx[4] (unused) oot remnant of top-right corner of cursor
+ * cursorVtx[8] (unused) oot remnant of bottom-left corner of cursor
+ * cursorVtx[12] (unused) oot remnant of bottom-right corner of cursor
+ * cursorVtx[16] equipping item icon (while moving)
+ */
+
#define PAUSE_CURSOR_COLOR_SET_WHITE 0
#define PAUSE_CURSOR_COLOR_SET_YELLOW 2
#define PAUSE_CURSOR_COLOR_SET_BLUE 4
@@ -326,6 +352,36 @@ typedef enum {
/* 5 */ PAUSE_QUAD_CURSOR_MAX
} PauseCursorQuad;
+// === PROMPT === //
+
+/**
+ * promptPageVtx (unused in MM, inferred from OoT)
+ *
+ * // PAGE_BG_QUADS
+ * promptPageVtx[0] prompt page background texture: row 0, column 0
+ * promptPageVtx[4] prompt page background texture: row 1, column 0
+ * promptPageVtx[8] prompt page background texture: row 2, column 0
+ * promptPageVtx[12] prompt page background texture: row 3, column 0
+ * promptPageVtx[16] prompt page background texture: row 4, column 0
+ * promptPageVtx[20] prompt page background texture: row 0, column 1
+ * promptPageVtx[24] prompt page background texture: row 1, column 1
+ * promptPageVtx[28] prompt page background texture: row 2, column 1
+ * promptPageVtx[32] prompt page background texture: row 3, column 1
+ * promptPageVtx[36] prompt page background texture: row 4, column 1
+ * promptPageVtx[40] prompt page background texture: row 0, column 2
+ * promptPageVtx[44] prompt page background texture: row 1, column 2
+ * promptPageVtx[48] prompt page background texture: row 2, column 2
+ * promptPageVtx[52] prompt page background texture: row 3, column 2
+ * promptPageVtx[56] prompt page background texture: row 4, column 2
+ *
+ * // QUAD_PROMPT_MAX
+ * promptPageVtx[60] message
+ * promptPageVtx[64] cursor left
+ * promptPageVtx[68] cursor right
+ * promptPageVtx[72] choice (yes)
+ * promptPageVtx[76] choice (no)
+ */
+
#define PAUSE_PROMPT_YES 0
#define PAUSE_PROMPT_NO 4
@@ -342,7 +398,7 @@ typedef enum {
void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos);
void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point);
void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ);
-void func_80821A04(PlayState* play);
+void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play);
// Map
void KaleidoScope_DrawDungeonMap(PlayState* play);
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
index 57fc6b32f..fb9df32dc 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c
@@ -1,26 +1,21 @@
/*
* File: z_kaleido_scope_NES.c
* Overlay: ovl_kaleido_scope
- * Description:
+ * Description: Pause Menu
*/
-
+#include "prevent_bss_reordering.h"
#include "z_kaleido_scope.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "interface/icon_item_gameover_static/icon_item_gameover_static.h"
#include "interface/icon_item_jpn_static/icon_item_jpn_static.h"
#include "z64view.h"
+#include "overlays/gamestates/ovl_opening/z_opening.h"
+#include "interface/icon_item_gameover_static/icon_item_gameover_static.h"
+#include "interface/icon_item_jpn_static/icon_item_jpn_static.h"
+#include "interface/icon_item_vtx_static/icon_item_vtx_static.h"
-extern UNK_TYPE D_02001360;
-extern UNK_TYPE D_020044A0;
-extern UNK_TYPE D_02004AA0;
-extern UNK_TYPE D_0200B998;
-extern UNK_TYPE D_08062000;
-extern UNK_TYPE D_08064340;
-extern UNK_TYPE D_0B000000;
-extern UNK_TYPE D_0C000000;
-extern UNK_TYPE D_0C006C00;
-
-extern u8 sUnpausedButtonStatus[5];
+// iconItemSegment
+extern TexturePtr D_08064340; // gPauseMenuCursorTex
// Page Textures (Background of Page):
// Broken up into multiple textures.
@@ -242,29 +237,68 @@ s16 sPauseCursorRightX = 0;
s16 D_8082B920 = 10;
-u8 D_8082B924[] = {
- 0x00, 0x14, 0x00, 0x04, 0x00, 0x14, 0x00, 0x0A, 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
- 0x07, 0x07, 0x03, 0x0F, 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00,
+s16 sPauseZRCursorColorTimerInits[] = { 20, 4, 20, 10 };
+
+// Unused remnant of OoT
+u8 gAreaGsFlags[] = {
+ 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x03, 0x0F,
+ 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00,
};
// TODO: Also applies to owl warps
s16 sGameOverRectPosY = 66;
-void func_80821900(void* segment, u32 texIndex) {
+void Kaleido_LoadMapNameStatic(void* segment, u32 texIndex) {
CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400);
}
-void func_8082192C(void* segment, u32 texIndex) {
+void Kaleido_LoadMapNameStaticLarge(void* segment, u32 texIndex) {
CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00);
}
-void func_80821958(void* segment, u32 texIndex) {
+void Kaleido_LoadItemNameStatic(void* segment, u32 texIndex) {
CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400);
}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s")
+void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos) {
+ PauseContext* pauseCtx = &play->pauseCtx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s")
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0;
+ pauseCtx->cursorSpecialPos = cursorSpecialPos;
+ pauseCtx->pageSwitchInputTimer = 0;
+
+ play_sound(NA_SE_SY_DECIDE);
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+}
+
+void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+
+ pauseCtx->nameDisplayTimer = 0;
+ pauseCtx->cursorSpecialPos = 0;
+
+ play_sound(NA_SE_SY_CURSOR);
+
+ pauseCtx->cursorShrinkRate = 4.0f;
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+}
void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point) {
OPEN_DISPS(gfxCtx);
@@ -277,10 +311,90 @@ void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture,
CLOSE_DISPS(gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s")
+#define SWITCH_PAGE_LEFT 0
+#define SWITCH_PAGE_RIGHT 2
-void KaleidoScope_HandlePageToggles(PlayState* play, Input* input);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s")
+void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 direction) {
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
+ pauseCtx->switchPageTimer = 0;
+
+ if (direction == SWITCH_PAGE_LEFT) {
+ pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1;
+ play_sound(NA_SE_SY_WIN_SCROLL_LEFT);
+ pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
+ } else { // SWITCH_PAGE_RIGHT
+ pauseCtx->nextPageMode = pauseCtx->pageIndex * 2;
+ play_sound(NA_SE_SY_WIN_SCROLL_RIGHT);
+ pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
+ }
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+}
+
+/**
+ * Process inputs to decide whether to switch pages
+ */
+void KaleidoScope_HandlePageToggles(PlayState* play, Input* input) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ //! FAKE
+ if (1) {}
+
+ if ((pauseCtx->debugEditor != DEBUG_EDITOR_NONE) || pauseCtx->itemDescriptionOn) {
+ return;
+ }
+
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT) || CHECK_BTN_ALL(input->press.button, BTN_R)) {
+ // Switch the page to the right regardless of where the cursor is
+ if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, 0x15);
+ }
+ KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT);
+ return;
+ }
+
+ if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT) || CHECK_BTN_ALL(input->press.button, BTN_Z)) {
+ // Switch the page to the left regardless of where the cursor is
+ if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, 0x15);
+ }
+ KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT);
+ return;
+ }
+
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ if (pauseCtx->stickAdjX < -30) {
+ pauseCtx->pageSwitchInputTimer++;
+ // Switch the page to the left after a certain number of frames with held input or after a second press
+ if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
+ KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT);
+ }
+ } else {
+ // stickAdjX is no longer held, so that the next input to the left will immediately switch pages
+ pauseCtx->pageSwitchInputTimer = -1;
+ }
+ } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) {
+ if (pauseCtx->stickAdjX > 30) {
+ pauseCtx->pageSwitchInputTimer++;
+ // Switch the page to the right after a certain number of frames with held input or after a second press
+ if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) {
+ KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT);
+ }
+ } else {
+ // stickAdjY is no longer held, so that the next input to the right will immediately switch pages
+ pauseCtx->pageSwitchInputTimer = -1;
+ }
+ }
+}
// Draw 15 (PAGE_BG_QUADS) quads with IA8 80x32 textures
Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, TexturePtr* textures) {
@@ -448,7 +562,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play);
- func_8012C8AC(gfxCtx);
+ Gfx_SetupDL42_Opa(gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
func_801091F0(play);
} else {
@@ -543,7 +657,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play);
- func_8012C8AC(gfxCtx);
+ Gfx_SetupDL42_Opa(gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
@@ -633,19 +747,413 @@ TexturePtr D_8082B9A8[] = {
gPauseToMasksENGTex,
gPauseToSelectItemENGTex,
};
+void KaleidoScope_DrawInfoPanel(PlayState* play) {
+ static s16 sPauseZRCursorColorTargets[][4] = {
+ { 180, 210, 255, 220 },
+ { 100, 100, 150, 220 },
+ };
+ static s16 sPauseZRCursorColorTimer = 20;
+ static s16 sPauseZRCursorColorIndex = 0;
+ static s16 sPauseZRCursorRed;
+ static s16 sPauseZRCursorGreen;
+ static s16 sPauseZRCursorBlue;
+ static s16 sPauseZRCursorAlpha;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 stepR;
+ s16 stepG;
+ s16 stepB;
+ s16 stepA;
+ s16 y;
+ s16 i;
+ s16 j;
-s16 D_8082B9B8[][4] = {
- { 180, 210, 255, 220 },
- { 100, 100, 150, 220 },
-};
+ OPEN_DISPS(play->state.gfxCtx);
-s16 D_8082B9C8 = 20;
-s16 D_8082B9CC = 0;
+ stepR =
+ ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer;
+ stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) /
+ sPauseZRCursorColorTimer;
+ stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) /
+ sPauseZRCursorColorTimer;
+ stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) /
+ sPauseZRCursorColorTimer;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s")
+ if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) {
+ sPauseZRCursorRed -= stepR;
+ } else {
+ sPauseZRCursorRed += stepR;
+ }
-void KaleidoScope_UpdateNamePanel(PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s")
+ if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) {
+ sPauseZRCursorGreen -= stepG;
+ } else {
+ sPauseZRCursorGreen += stepG;
+ }
+
+ if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) {
+ sPauseZRCursorBlue -= stepB;
+ } else {
+ sPauseZRCursorBlue += stepB;
+ }
+
+ if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) {
+ sPauseZRCursorAlpha -= stepA;
+ } else {
+ sPauseZRCursorAlpha += stepA;
+ }
+
+ sPauseZRCursorColorTimer--;
+ if (sPauseZRCursorColorTimer == 0) {
+ sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0];
+ sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1];
+ sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2];
+ sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3];
+ sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0];
+ sPauseZRCursorColorIndex ^= 1;
+ }
+
+ y = pauseCtx->infoPanelOffsetY - 76;
+ for (j = 0, i = 0; i < 7; i++, j += 4) {
+ pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72;
+
+ pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y;
+
+ pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24;
+
+ pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] =
+ pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag =
+ pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] =
+ pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0;
+
+ pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] =
+ pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] =
+ pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200;
+
+ pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha;
+ }
+
+ pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72;
+
+ pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72;
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX;
+
+ pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920;
+
+ pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
+ pauseCtx->infoPanelVtx[8].v.ob[1] - 32;
+ } else {
+ pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3;
+
+ pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18;
+
+ pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3;
+
+ pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
+ pauseCtx->infoPanelVtx[8].v.ob[1] - 26;
+ }
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX;
+
+ pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
+ pauseCtx->infoPanelVtx[12].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920;
+
+ pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
+ pauseCtx->infoPanelVtx[12].v.ob[1] - 32;
+ } else {
+ pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3;
+
+ pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
+ pauseCtx->infoPanelVtx[12].v.ob[0] + 18;
+
+ pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3;
+
+ pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
+ pauseCtx->infoPanelVtx[12].v.ob[1] - 26;
+ }
+
+ pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] =
+ pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] =
+ pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0);
+
+ gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL);
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) &&
+ (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha);
+ }
+
+ gSPDisplayList(POLY_OPA_DISP++, gZButtonIconDL);
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) &&
+ (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha);
+ }
+
+ gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL);
+
+ if (pauseCtx->cursorSpecialPos != 0) {
+ j = (pauseCtx->cursorSpecialPos * 4) - 32;
+ pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0];
+ pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1];
+ }
+
+ y = pauseCtx->infoPanelOffsetY - 80;
+ pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y;
+
+ pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16;
+
+ pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0);
+
+ if (pauseCtx->itemDescriptionOn ||
+ ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) &&
+ (pauseCtx->nameDisplayTimer < 40) &&
+ (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) ||
+ ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
+ (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
+ (pauseCtx->cursorSpecialPos == 0))) {
+ if (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) ||
+ ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
+ (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
+
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 128;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5);
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0);
+
+ if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+ }
+
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0);
+ }
+ } else if ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK)) {
+ pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = y;
+
+ pauseCtx->infoPanelVtx[22].v.ob[1] = pauseCtx->infoPanelVtx[23].v.ob[1] =
+ pauseCtx->infoPanelVtx[20].v.ob[1] - 16;
+
+ pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 16 * (1 << 5);
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0);
+
+ if (pauseCtx->state == PAUSE_STATE_SAVEPROMPT) {
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -33;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 0x10;
+
+ pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
+ pauseCtx->infoPanelVtx[20].v.ob[0] + 0x30;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 48 * (1 << 5);
+
+ gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+
+ //! @bug: Incorrect dimensions. Should be 64x16
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToDecideENGTex, G_IM_FMT_IA, 48, 16, 4);
+
+ } else if (pauseCtx->cursorSpecialPos != 0) {
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 128;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 200, 0, 255);
+
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ POLY_OPA_DISP =
+ Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B998[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0);
+ } else {
+ POLY_OPA_DISP =
+ Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B9A8[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0);
+ }
+ }
+ } else if ((!pauseCtx->pageIndex || (pauseCtx->pageIndex == PAUSE_MASK)) &&
+ (pauseCtx->namedItem != PAUSE_ITEM_NONE)) {
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -49;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 48;
+
+ pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 47;
+
+ pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
+ pauseCtx->infoPanelVtx[20].v.ob[0] + 64;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 48 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 64 * (1 << 5);
+
+ gSPDisplayList(POLY_OPA_DISP++, gCButtonIconsDL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToEquipENGTex, G_IM_FMT_IA, 64, 16, 4);
+ } else if ((pauseCtx->pageIndex == PAUSE_MAP) && sInDungeonScene) {
+ // No code in this case
+ } else if ((pauseCtx->pageIndex == PAUSE_QUEST) &&
+ (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) {
+ if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
+ // The cursor is on the bombers notebook
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -58;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 0x14;
+
+ pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
+ pauseCtx->infoPanelVtx[20].v.ob[0] + 0x60;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5);
+
+ gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToViewNotebookENGTex, G_IM_FMT_IA, 96, 16, 4);
+ }
+ } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) &&
+ (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE)) {
+ // The cursor is on a learned song
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -55;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 20;
+
+ pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] =
+ pauseCtx->infoPanelVtx[20].v.ob[0] + 96;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5);
+
+ gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToPlayMelodyENGTex, G_IM_FMT_IA, 96, 16, 4);
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+u8 sUnpausedButtonStatus[5];
+f32 sCursorCirclesX[4];
+f32 sCursorCirclesY[4];
+
+void KaleidoScope_UpdateNamePanel(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ u16 namedItem;
+
+ if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) ||
+ ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) {
+
+ pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex];
+ namedItem = pauseCtx->namedItem;
+
+ osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1);
+
+ if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) {
+ Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, namedItem);
+ } else {
+ Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, namedItem);
+ }
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) {
+ if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) &&
+ (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) &&
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) ||
+ ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) ||
+ (pauseCtx->pageIndex == PAUSE_ITEM) || (pauseCtx->pageIndex == PAUSE_MASK)) {
+
+ pauseCtx->nameDisplayTimer++;
+ if (pauseCtx->nameDisplayTimer > 70) {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+}
void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
@@ -690,21 +1198,275 @@ void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
-s16 D_8082B9D0[][4] = {
- { 180, 210, 255, 220 },
- { 100, 100, 150, 220 },
-};
+void KaleidoScope_DrawOwlWarpInfoPanel(PlayState* play) {
+ static s16 sPauseZRCursorColorTargets[][4] = {
+ { 180, 210, 255, 220 },
+ { 100, 100, 150, 220 },
+ };
+ static s16 sPauseZRCursorColorTimer = 20;
+ static s16 sPauseZRCursorColorIndex = 0;
+ static s16 sPauseZRCursorRed;
+ static s16 sPauseZRCursorGreen;
+ static s16 sPauseZRCursorBlue;
+ static s16 sPauseZRCursorAlpha;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 stepR;
+ s16 stepG;
+ s16 stepB;
+ s16 stepA;
+ s16 y;
+ s16 i;
+ s16 j;
-s16 D_8082B9E0 = 20;
-s16 D_8082B9E4 = 0;
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s")
+ stepR =
+ ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer;
+ stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) /
+ sPauseZRCursorColorTimer;
+ stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) /
+ sPauseZRCursorColorTimer;
+ stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) /
+ sPauseZRCursorColorTimer;
-void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s")
+ if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) {
+ sPauseZRCursorRed -= stepR;
+ } else {
+ sPauseZRCursorRed += stepR;
+ }
-void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s")
+ if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) {
+ sPauseZRCursorGreen -= stepG;
+ } else {
+ sPauseZRCursorGreen += stepG;
+ }
+
+ if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) {
+ sPauseZRCursorBlue -= stepB;
+ } else {
+ sPauseZRCursorBlue += stepB;
+ }
+
+ if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) {
+ sPauseZRCursorAlpha -= stepA;
+ } else {
+ sPauseZRCursorAlpha += stepA;
+ }
+
+ sPauseZRCursorColorTimer--;
+ if (sPauseZRCursorColorTimer == 0) {
+ sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0];
+ sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1];
+ sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2];
+ sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3];
+ sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0];
+ sPauseZRCursorColorIndex ^= 1;
+ }
+
+ y = pauseCtx->infoPanelOffsetY - 76;
+ for (j = 0, i = 0; i < 7; i++, j += 4) {
+ pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72;
+
+ pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y;
+
+ pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24;
+
+ pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] =
+ pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag =
+ pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0;
+
+ pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] =
+ pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0;
+
+ pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] =
+ pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] =
+ pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200;
+
+ pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] =
+ pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha;
+ }
+
+ pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72;
+
+ pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72;
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX;
+
+ pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920;
+
+ pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
+ pauseCtx->infoPanelVtx[8].v.ob[1] - 32;
+ } else {
+ pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3;
+
+ pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18;
+
+ pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3;
+
+ pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] =
+ pauseCtx->infoPanelVtx[8].v.ob[1] - 26;
+ }
+
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX;
+
+ pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
+ pauseCtx->infoPanelVtx[12].v.ob[0] + 24;
+
+ pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920;
+
+ pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
+ pauseCtx->infoPanelVtx[12].v.ob[1] - 32;
+ } else {
+ pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3;
+
+ pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] =
+ pauseCtx->infoPanelVtx[12].v.ob[0] + 18;
+
+ pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3;
+
+ pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] =
+ pauseCtx->infoPanelVtx[12].v.ob[1] - 26;
+ }
+
+ pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] =
+ pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5);
+
+ pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] =
+ pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0);
+
+ gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL);
+
+ if (pauseCtx->cursorSpecialPos != 0) {
+ j = (pauseCtx->cursorSpecialPos * 4) - 32;
+ pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0];
+ pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1];
+ }
+
+ y = pauseCtx->infoPanelOffsetY - 80;
+ pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y;
+
+ pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16;
+
+ pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0);
+
+ if ((pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) &&
+ (pauseCtx->nameDisplayTimer < 40)) {
+ pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
+
+ pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] =
+ pauseCtx->infoPanelVtx[16].v.ob[0] + 128;
+
+ pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5);
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0);
+
+ if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+ }
+
+ POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ u16 texIndex;
+
+ if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) ||
+ ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) {
+
+ pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex];
+ texIndex = pauseCtx->namedItem;
+
+ osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1);
+
+ if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) {
+ Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, texIndex);
+ } else {
+ Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, texIndex);
+ }
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) {
+ if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) &&
+ (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) &&
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) ||
+ (pauseCtx->pageIndex == PAUSE_ITEM)) {
+
+ pauseCtx->nameDisplayTimer++;
+ if (pauseCtx->nameDisplayTimer > 70) {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+ } else {
+ pauseCtx->nameDisplayTimer = 0;
+ }
+}
+
+void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+
+ //! FAKE
+ if (1) {
+ pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * 2.0f;
+ pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * 2.0f;
+
+ if (pauseCtx->switchPageTimer < 32) {
+ sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
+ } else {
+ sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4);
+ }
+
+ pauseCtx->switchPageTimer += 8;
+
+ if (pauseCtx->switchPageTimer == 64) {
+ pauseCtx->switchPageTimer = 0;
+ pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+
+ KaleidoScope_HandlePageToggles(play, input);
+ }
+ }
+}
void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ) {
Vec3f eye;
@@ -773,7 +1535,7 @@ s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = {
44, // mapPageVtx[196] world map owl warp Ikana Canyon
54, // mapPageVtx[200] world map owl warp Stone Tower
};
-s16 sVtxPageSaveQuadsX[VTX_PAGE_SAVE_QUADS] = {
+s16 sVtxPagePromptQuadsX[VTX_PAGE_SAVE_QUADS] = {
-76, // promptPageVtx[60] QUAD_PROMPT_MESSAGE
-58, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT
10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT
@@ -793,7 +1555,7 @@ s16 sVtxPageMapDungeonQuadsWidth[VTX_PAGE_MAP_DUNGEON_QUADS] = {
24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED
};
s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
-s16 sVtxPageSaveQuadsWidth[VTX_PAGE_SAVE_QUADS] = {
+s16 sVtxPagePromptQuadsWidth[VTX_PAGE_SAVE_QUADS] = {
152, // promptPageVtx[60] QUAD_PROMPT_MESSAGE
48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT
48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT
@@ -852,7 +1614,7 @@ s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = {
-1, // mapPageVtx[196] world map owl warp Ikana Canyon
24, // mapPageVtx[200] world map owl warp Stone Tower
};
-s16 sVtxPageSaveQuadsY[VTX_PAGE_SAVE_QUADS] = {
+s16 sVtxPagePromptQuadsY[VTX_PAGE_SAVE_QUADS] = {
36, // promptPageVtx[60] QUAD_PROMPT_MESSAGE
10, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT
10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT
@@ -872,7 +1634,7 @@ s16 sVtxPageMapDungeonQuadsHeight[] = {
24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED
};
s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 };
-s16 sVtxPageSaveQuadsHeight[VTX_PAGE_SAVE_QUADS] = {
+s16 sVtxPagePromptQuadsHeight[VTX_PAGE_SAVE_QUADS] = {
16, // promptPageVtx[60] QUAD_PROMPT_MESSAGE
48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT
48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT
@@ -886,7 +1648,7 @@ s16* sVtxPageQuadsX[VTX_PAGE_MAX] = {
sVtxPageMapDungeonQuadsX, // VTX_PAGE_MAP_DUNGEON
sVtxPageQuestQuadsX, // VTX_PAGE_QUEST
sVtxPageMapWorldQuadsX, // VTX_PAGE_MAP_WORLD
- sVtxPageSaveQuadsX, // VTX_PAGE_PROMPT
+ sVtxPagePromptQuadsX, // VTX_PAGE_PROMPT
};
s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = {
@@ -895,7 +1657,7 @@ s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = {
sVtxPageMapDungeonQuadsWidth, // VTX_PAGE_MAP_DUNGEON
sVtxPageQuestQuadsWidth, // VTX_PAGE_QUEST
gVtxPageMapWorldQuadsWidth, // VTX_PAGE_MAP_WORLD
- sVtxPageSaveQuadsWidth, // VTX_PAGE_PROMPT
+ sVtxPagePromptQuadsWidth, // VTX_PAGE_PROMPT
};
s16* sVtxPageQuadsY[VTX_PAGE_MAX] = {
@@ -904,7 +1666,7 @@ s16* sVtxPageQuadsY[VTX_PAGE_MAX] = {
sVtxPageMapDungeonQuadsY, // VTX_PAGE_MAP_DUNGEON
sVtxPageQuestQuadsY, // VTX_PAGE_QUEST
sVtxPageMapWorldQuadsY, // VTX_PAGE_MAP_WORLD
- sVtxPageSaveQuadsY, // VTX_PAGE_PROMPT
+ sVtxPagePromptQuadsY, // VTX_PAGE_PROMPT
};
s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = {
@@ -913,7 +1675,7 @@ s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = {
sVtxPageMapDungeonQuadsHeight, // VTX_PAGE_MAP_DUNGEON
sVtxPageQuestQuadsHeight, // VTX_PAGE_QUEST
gVtxPageMapWorldQuadsHeight, // VTX_PAGE_MAP_WORLD
- sVtxPageSaveQuadsHeight, // VTX_PAGE_PROMPT
+ sVtxPagePromptQuadsHeight, // VTX_PAGE_PROMPT
};
s16 sVtxPageGameOverSaveQuadsY[VTX_PAGE_SAVE_QUADS] = {
@@ -1547,60 +2309,435 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
-f32 D_8082BCB4[] = {
- -62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f,
+f32 sItemMaskCursorsX[] = {
+ -62.0f, // Column 1
+ -36.0f, // Column 2
+ -10.0f, // Column 3
+ 16.0f, // Column 4
+ 42.0f, // Column 5
+ 68.0f, // Column 6
};
-f32 D_8082BCCC[] = {
- 31.0f,
- 5.0f,
- -21.0f,
- -47.0f,
+f32 sItemMaskCursorsY[] = {
+ 31.0f, // Row 1
+ 5.0f, // Row 2
+ -21.0f, // Row 3
+ -47.0f, // Row 4
};
-f32 D_8082BCDC[] = {
- -49.0f, -35.0f, -3.0f, 4.0f, 12.0f, 8.0f, 7.0f, 40.0f, 47.0f, 49.0f, 55.0f,
+f32 sWorldMapCursorsX[REGION_MAX] = {
+ -49.0f, // REGION_GREAT_BAY
+ -35.0f, // REGION_ZORA_HALL
+ -3.0f, // REGION_ROMANI_RANCH
+ 4.0f, // REGION_DEKU_PALACE
+ 12.0f, // REGION_WOODFALL
+ 8.0f, // REGION_CLOCK_TOWN
+ 7.0f, // REGION_SNOWHEAD
+ 40.0f, // REGION_IKANA_GRAVEYARD
+ 47.0f, // REGION_IKANA_CANYON
+ 49.0f, // REGION_GORON_VILLAGE
+ 55.0f, // REGION_STONE_TOWER
};
-f32 D_8082BD08[] = {
- -15.0f, -36.0f, -23.0f, -49.0f, -29.0f, -8.0f, 25.0f, 2.0f, -9.0f, 28.0f, 7.0f,
+f32 sWorldMapCursorsY[REGION_MAX] = {
+ -15.0f, // REGION_GREAT_BAY
+ -36.0f, // REGION_ZORA_HALL
+ -23.0f, // REGION_ROMANI_RANCH
+ -49.0f, // REGION_DEKU_PALACE
+ -29.0f, // REGION_WOODFALL
+ -8.0f, // REGION_CLOCK_TOWN
+ 25.0f, // REGION_SNOWHEAD
+ 2.0f, // REGION_IKANA_GRAVEYARD
+ -9.0f, // REGION_IKANA_CANYON
+ 28.0f, // REGION_GORON_VILLAGE
+ 7.0f, // REGION_STONE_TOWER
};
-f32 D_8082BD34[] = {
- -50.0f, -38.0f, 6.0f, 11.0f, 8.0f, 0.0f, 12.0f, 31.0f, 48.0f, 56.0f,
+f32 sOwlWarpWorldMapCursorsX[OWL_WARP_MAX - 1] = {
+ -50.0f, // OWL_WARP_GREAT_BAY_COAST
+ -38.0f, // OWL_WARP_ZORA_CAPE
+ 6.0f, // OWL_WARP_SNOWHEAD
+ 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE
+ 8.0f, // OWL_WARP_CLOCK_TOWN
+ 0.0f, // OWL_WARP_MILK_ROAD
+ 12.0f, // OWL_WARP_WOODFALL
+ 31.0f, // OWL_WARP_SOUTHERN_SWAMP
+ 48.0f, // OWL_WARP_IKANA_CANYON
+ 56.0f, // OWL_WARP_STONE_TOWER
};
-f32 D_8082BD5C[] = {
- -14.0f, -39.0f, 23.0f, 11.0f, -8.0f, -15.0f, -31.0f, -30.0f, -10.0f, 11.0f,
+f32 sOwlWarpWorldMapCursorsY[OWL_WARP_MAX - 1] = {
+ -14.0f, // OWL_WARP_GREAT_BAY_COAST
+ -39.0f, // OWL_WARP_ZORA_CAPE
+ 23.0f, // OWL_WARP_SNOWHEAD
+ 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE
+ -8.0f, // OWL_WARP_CLOCK_TOWN
+ -15.0f, // OWL_WARP_MILK_ROAD
+ -31.0f, // OWL_WARP_WOODFALL
+ -30.0f, // OWL_WARP_SOUTHERN_SWAMP
+ -10.0f, // OWL_WARP_IKANA_CANYON
+ 11.0f, // OWL_WARP_STONE_TOWER
};
-f32 D_8082BD84[] = {
- -72.0f, -47.0f, -26.0f, -50.0f, -48.0f, -48.0f, -48.0f, -48.0f, -48.0f,
+f32 sDungeonMapCursorsX[] = {
+ -72.0f, // DUNGEON_BOSS_KEY
+ -47.0f, // DUNGEON_COMPASS
+ -26.0f, // DUNGEON_MAP
+ -50.0f, // DUNGEON_STRAY_FAIRIES
+ -48.0f, // DUNGEON_FLOOR_INDEX_4 (top floor)
+ -48.0f, // DUNGEON_FLOOR_INDEX_3
+ -48.0f, // DUNGEON_FLOOR_INDEX_2
+ -48.0f, // DUNGEON_FLOOR_INDEX_1
+ -48.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor)
};
-f32 D_8082BDA8[] = {
- -47.0f, -47.0f, -47.0f, -30.0f, 33.0f, 22.0f, 11.0f, -2.0f, -13.0f,
+f32 sDungeonMapCursorsY[] = {
+ -47.0f, // DUNGEON_BOSS_KEY
+ -47.0f, // DUNGEON_COMPASS
+ -47.0f, // DUNGEON_MAP
+ -30.0f, // DUNGEON_STRAY_FAIRIES
+ 33.0f, // DUNGEON_FLOOR_INDEX_4 (top floor)
+ 22.0f, // DUNGEON_FLOOR_INDEX_3
+ 11.0f, // DUNGEON_FLOOR_INDEX_2
+ -2.0f, // DUNGEON_FLOOR_INDEX_1
+ -13.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor)
};
-f32 D_8082BDCC[] = {
- 52.0f, 80.0f, 24.0f, 52.0f, 81.0f, 24.0f, -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f,
- -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f, -68.0f, 22.0f, 83.0f, -67.0f, -21.0f,
+f32 sQuestStatusCursorsX[] = {
+ 52.0f, // QUEST_REMAINS_ODOLWA
+ 80.0f, // QUEST_REMAINS_GOHT
+ 24.0f, // QUEST_REMAINS_GYORG
+ 52.0f, // QUEST_REMAINS_TWINMOLD
+ 81.0f, // QUEST_SHIELD
+ 24.0f, // QUEST_SWORD
+ -78.0f, // QUEST_SONG_SONATA
+ -61.0f, // QUEST_SONG_LULLABY
+ -44.0f, // QUEST_SONG_BOSSA_NOVA
+ -24.0f, // QUEST_SONG_ELEGY
+ -6.0f, // QUEST_SONG_OATH
+ -3.0f, // QUEST_SONG_SARIA
+ -78.0f, // QUEST_SONG_TIME
+ -61.0f, // QUEST_SONG_HEALING
+ -44.0f, // QUEST_SONG_EPONA
+ -24.0f, // QUEST_SONG_SOARING
+ -6.0f, // QUEST_SONG_STORMS
+ -3.0f, // QUEST_SONG_SUN
+ -68.0f, // QUEST_BOMBERS_NOTEBOOK
+ 22.0f, // QUEST_QUIVER
+ 83.0f, // QUEST_BOMB_BAG
+ -67.0f, // QUEST_SKULL_TOKEN
+ -21.0f, // QUEST_HEART_PIECE
};
-f32 D_8082BE28[] = {
- 33.0f, 18.0f, 18.0f, 0.0f, -23.0f, -23.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f,
- -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, 27.0f, -53.0f, -53.0f, 14.0f, 26.0f,
+f32 sQuestStatusCursorsY[] = {
+ 33.0f, // QUEST_REMAINS_ODOLWA
+ 18.0f, // QUEST_REMAINS_GOHT
+ 18.0f, // QUEST_REMAINS_GYORG
+ 0.0f, // QUEST_REMAINS_TWINMOLD
+ -23.0f, // QUEST_SHIELD
+ -23.0f, // QUEST_SWORD
+ -29.0f, // QUEST_SONG_SONATA
+ -29.0f, // QUEST_SONG_LULLABY
+ -29.0f, // QUEST_SONG_BOSSA_NOVA
+ -29.0f, // QUEST_SONG_ELEGY
+ -29.0f, // QUEST_SONG_OATH
+ -29.0f, // QUEST_SONG_SARIA
+ -11.0f, // QUEST_SONG_TIME
+ -11.0f, // QUEST_SONG_HEALING
+ -11.0f, // QUEST_SONG_EPONA
+ -11.0f, // QUEST_SONG_SOARING
+ -11.0f, // QUEST_SONG_STORMS
+ -11.0f, // QUEST_SONG_SUN
+ 27.0f, // QUEST_BOMBERS_NOTEBOOK
+ -53.0f, // QUEST_QUIVER
+ -53.0f, // QUEST_BOMB_BAG
+ 14.0f, // QUEST_SKULL_TOKEN
+ 26.0f, // QUEST_HEART_PIECE
};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808274DC.s")
+void KaleidoScope_UpdateCursorSize(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 index;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827A8C.s")
+ pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = -8;
+ pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16;
-s16 D_8082BE84 = 0;
+ pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = 8;
+ pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827E08.s")
+ if (pauseCtx->cursorSpecialPos == 0) {
+ switch (pauseCtx->pageIndex) {
+ case PAUSE_ITEM:
+ pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_ITEM]];
+ pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_ITEM]];
+ pauseCtx->cursorWidth = 15.0f;
+ pauseCtx->cursorHeight = 15.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Draw.s")
+ case PAUSE_MAP:
+ if (!sInDungeonScene) {
+ if (IS_PAUSE_STATE_OWLWARP) {
+ pauseCtx->cursorX = sOwlWarpWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]];
+ pauseCtx->cursorY = sOwlWarpWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]];
+ } else {
+ pauseCtx->cursorX = sWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]];
+ pauseCtx->cursorY = sWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]];
+ }
+ if (!IS_PAUSE_STATE_OWLWARP) {
+ pauseCtx->cursorHeight = 10.0f;
+ pauseCtx->cursorWidth = 10.0f;
+ } else {
+ pauseCtx->cursorHeight = 15.0f;
+ pauseCtx->cursorWidth = 15.0f;
+ }
+ } else {
+ pauseCtx->cursorX = sDungeonMapCursorsX[pauseCtx->cursorPoint[PAUSE_MAP]];
+ pauseCtx->cursorY = sDungeonMapCursorsY[pauseCtx->cursorPoint[PAUSE_MAP]];
+ if (pauseCtx->cursorSlot[pauseCtx->pageIndex] >= DUNGEON_FLOOR_INDEX_4) {
+ // Floors
+ pauseCtx->cursorWidth = 18.0f;
+ pauseCtx->cursorHeight = 12.0f;
+ } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == DUNGEON_STRAY_FAIRIES) {
+ // Stray Fairies
+ pauseCtx->cursorHeight = 12.0f;
+ pauseCtx->cursorWidth = 40.0f;
+ } else {
+ // Map, Compass, Boss Key
+ pauseCtx->cursorHeight = 15.0f;
+ pauseCtx->cursorWidth = 15.0f;
+ }
+ }
+ break;
+
+ case PAUSE_QUEST:
+ if (!R_PAUSE_DBG_QUEST_CURSOR_ON) {
+ pauseCtx->cursorX = sQuestStatusCursorsX[pauseCtx->cursorPoint[PAUSE_QUEST]];
+ pauseCtx->cursorY = sQuestStatusCursorsY[pauseCtx->cursorPoint[PAUSE_QUEST]];
+ } else {
+ pauseCtx->cursorX = R_PAUSE_DBG_QUEST_CURSOR_X;
+ pauseCtx->cursorY = R_PAUSE_DBG_QUEST_CURSOR_Y;
+ }
+ pauseCtx->cursorHeight = 17.0f;
+ pauseCtx->cursorWidth = 17.0f;
+ if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == QUEST_17) {
+ pauseCtx->cursorHeight = 25.0f;
+ pauseCtx->cursorWidth = 25.0f;
+ } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SWORD) {
+ pauseCtx->cursorHeight = 18.0f;
+ pauseCtx->cursorWidth = 18.0f;
+ } else if ((pauseCtx->cursorSlot[pauseCtx->pageIndex] >= QUEST_SONG_SONATA) &&
+ (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SONG_SUN)) {
+ pauseCtx->cursorHeight = 12.0f;
+ pauseCtx->cursorWidth = 12.0f;
+ }
+ break;
+
+ case PAUSE_MASK:
+ pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_MASK]];
+ pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_MASK]];
+ pauseCtx->cursorWidth = 15.0f;
+ pauseCtx->cursorHeight = 15.0f;
+ break;
+
+ default:
+ break;
+ }
+
+ pauseCtx->cursorSpinPhase += 0x300;
+ } else {
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ pauseCtx->cursorX = -93.0f;
+ } else { // PAUSE_CURSOR_PAGE_RIGHT
+ pauseCtx->cursorX = 101.0f;
+ }
+ pauseCtx->cursorSpinPhase += 0x300;
+ pauseCtx->cursorHeight = 16.0f;
+ pauseCtx->cursorWidth = 16.0f;
+ pauseCtx->cursorY = -4.0f;
+ }
+
+ if (pauseCtx->cursorWidth < pauseCtx->cursorShrinkRate) {
+ pauseCtx->cursorWidth = 0;
+ } else {
+ pauseCtx->cursorWidth -= pauseCtx->cursorShrinkRate;
+ }
+
+ if (pauseCtx->cursorHeight < pauseCtx->cursorShrinkRate) {
+ pauseCtx->cursorHeight = 0.0f;
+ } else {
+ pauseCtx->cursorHeight -= pauseCtx->cursorShrinkRate;
+ }
+
+ if (pauseCtx->cursorShrinkRate != 0.0f) {
+ pauseCtx->cursorShrinkRate -= 1.0f;
+ }
+
+ sCursorCirclesX[0] = Math_SinS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorWidth;
+ sCursorCirclesX[1] = Math_SinS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorWidth;
+ sCursorCirclesX[2] = Math_SinS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorWidth;
+ sCursorCirclesX[3] = Math_SinS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorWidth;
+ sCursorCirclesY[0] = Math_CosS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorHeight;
+ sCursorCirclesY[1] = Math_CosS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorHeight;
+ sCursorCirclesY[2] = Math_CosS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorHeight;
+ sCursorCirclesY[3] = Math_CosS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorHeight;
+}
+
+void KaleidoScope_DrawCursor(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) ||
+ ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)))) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimR, sCursorPrimG, sCursorPrimB, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvR, sCursorEnvG, sCursorEnvB, 255);
+
+ Matrix_Translate(pauseCtx->cursorX, pauseCtx->cursorY, -50.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+
+ for (i = 0; i < 4; i++) {
+ Matrix_Push();
+ Matrix_Translate(sCursorCirclesX[i], sCursorCirclesY[i], -50.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08064340, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
+ G_TX_NOLOD, G_TX_NOLOD);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->cursorVtx[0], 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ Matrix_Pop();
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void KaleidoScope_DrawGameOver(PlayState* play) {
+ static s16 sGameOverUlt = 0;
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+
+ OPEN_DISPS(gfxCtx);
+
+ Gfx_SetupDL39_Opa(gfxCtx);
+
+ gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE);
+ gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2);
+ gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT,
+ COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 80, sGameOverPrimR, sGameOverPrimG, sGameOverPrimB, sGameOverPrimAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, sGameOverEnvR, sGameOverEnvG, sGameOverEnvB, 255);
+
+ sGameOverUlt -= 2;
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP1Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, 5, G_TX_NOLOD, G_TX_NOLOD);
+
+ gDPSetTileSize(POLY_OPA_DISP++, 1, 0, sGameOverUlt & 0x7F, 252, (sGameOverUlt & 0x7F) + 124);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, 0x100, sGameOverRectPosY << 2, 0x200, (sGameOverRectPosY + 32) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP2Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, 0x200, sGameOverRectPosY << 2, 0x300, (sGameOverRectPosY + 32) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP3Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0,
+ G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, 0x300, sGameOverRectPosY << 2, 0x400, (sGameOverRectPosY + 32) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void KaleidoScope_Draw(PlayState* play) {
+ s32 pad;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment);
+ gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x0B, pauseCtx->iconItemVtxSegment);
+
+ if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) {
+ KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
+
+ if (!IS_PAUSE_STATE_OWLWARP) {
+ // Draw Default or Game Over Menus
+ KaleidoScope_SetVertices(play, play->state.gfxCtx);
+ KaleidoScope_DrawPages(play, play->state.gfxCtx);
+
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f);
+
+ if (!IS_PAUSE_STATE_GAMEOVER) {
+ KaleidoScope_DrawInfoPanel(play);
+ }
+
+ KaleidoScope_UpdateCursorSize(play);
+
+ if (pauseCtx->state == PAUSE_STATE_MAIN) {
+ KaleidoScope_DrawCursor(play);
+ }
+
+ if ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_3) && (pauseCtx->state <= PAUSE_STATE_GAMEOVER_10) &&
+ (play->gameOverCtx.state != GAMEOVER_INACTIVE)) {
+ KaleidoScope_DrawGameOver(play);
+ }
+ } else {
+ // Draw Owl Warp Menu
+ KaleidoScope_SetVertices(play, play->state.gfxCtx);
+ KaleidoScope_DrawPages(play, play->state.gfxCtx);
+ KaleidoScope_DrawOwlWarpMapPage(play);
+
+ Gfx_SetupDL42_Opa(play->state.gfxCtx);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f);
+ KaleidoScope_DrawOwlWarpInfoPanel(play);
+ KaleidoScope_UpdateCursorSize(play);
+
+ if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) {
+ KaleidoScope_DrawCursor(play);
+ }
+ }
+ }
+
+ if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) {
+ KaleidoScope_DrawInventoryEditor(play);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) {
u32 rgb;
@@ -1641,10 +2778,10 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
Interface_UpdateButtonsAlt(play, 1);
if (pauseCtx->cursorSpecialPos == 0) {
- gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex][0];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex][1];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex][1];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][0];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1];
gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
} else {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
@@ -1720,10 +2857,10 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->roll = -314.0f;
pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart);
- size0 = SEGMENT_ROM_SIZE(icon_item_static_old);
- CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0);
+ size0 = SEGMENT_ROM_SIZE(icon_item_static_syms);
+ CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0);
- gSegments[0x08] = PHYSICAL_TO_VIRTUAL(pauseCtx->iconItemSegment);
+ gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment);
for (itemId = 0; itemId <= ITEM_BOW_ARROW_FIRE; itemId++) {
if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) {
@@ -1732,8 +2869,8 @@ void KaleidoScope_Update(PlayState* play) {
}
pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0);
- size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old);
- CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment,
+ size1 = SEGMENT_ROM_SIZE(icon_item_24_static_syms);
+ CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_yar), pauseCtx->iconItem24Segment,
size1);
pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1);
@@ -1760,7 +2897,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2);
func_8011552C(play, DO_ACTION_INFO);
if (((void)0, gSaveContext.worldMapArea) < 0x16) {
- func_8082192C(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea));
+ Kaleido_LoadMapNameStaticLarge(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea));
}
pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00);
@@ -1903,7 +3040,7 @@ void KaleidoScope_Update(PlayState* play) {
case PAUSE_STATE_SAVEPROMPT:
switch (pauseCtx->savePromptState) {
- case PAUSE_SAVEPROMPT_STATE_0:
+ case PAUSE_SAVEPROMPT_STATE_APPEARING:
pauseCtx->roll -= 78.5f;
sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
@@ -1917,18 +3054,18 @@ void KaleidoScope_Update(PlayState* play) {
if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_CUP)) {
if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) {
func_8011552C(play, DO_ACTION_NONE);
- pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU;
} else {
play_sound(NA_SE_SY_PIECE_OF_HEART);
Play_SaveCycleSceneFlags(&play->state);
gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId;
func_8014546C(sramCtx);
- if (gSaveContext.unk_3F3F == 0) {
+ if (!gSaveContext.flashSaveAvailable) {
pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5;
} else {
- func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum],
- D_801C67F0[gSaveContext.fileNum]);
- func_80147020(sramCtx);
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum],
+ gFlashSaveNumPages[gSaveContext.fileNum]);
+ Sram_StartWriteToFlashDefault(sramCtx);
pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_4;
}
sDelayTimer = 90;
@@ -1941,7 +3078,7 @@ void KaleidoScope_Update(PlayState* play) {
func_801A3AEC(0);
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
func_8011552C(play, DO_ACTION_NONE);
- pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU;
D_8082B90C = pauseCtx->roll;
}
break;
@@ -1987,26 +3124,31 @@ void KaleidoScope_Update(PlayState* play) {
}
break;
- case PAUSE_SAVEPROMPT_STATE_2:
+ case PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU:
pauseCtx->roll += 78.5f;
sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4);
sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4);
+
if (pauseCtx->roll >= -314.0f) {
pauseCtx->state = PAUSE_STATE_MAIN;
- pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING;
pauseCtx->roll = -314.0f;
pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll =
pauseCtx->maskPageRoll = 0.0f;
func_8011552C(play, DO_ACTION_INFO);
- gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex + 1][0];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex + 1][1];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex + 1][1];
- gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] =
+ gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][0];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] =
+ gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] =
+ gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] =
+ gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1];
if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) ||
(pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT)) {
KaleidoScope_MoveCursorToSpecialPos(play, pauseCtx->cursorSpecialPos);
} else {
- func_80821A04(play);
+ KaleidoScope_MoveCursorFromSpecialPos(play);
}
}
break;
@@ -2042,12 +3184,12 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->iconItemSegment =
(void*)(((uintptr_t)play->objectCtx.spaceStart + 0x30) & ~0x3F); // Messed up ALIGN64
- size0 = SEGMENT_ROM_SIZE(icon_item_static_old);
- CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0);
+ size0 = SEGMENT_ROM_SIZE(icon_item_static_syms);
+ CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0);
pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0);
- size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old);
- CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, size1);
+ size1 = SEGMENT_ROM_SIZE(icon_item_24_static_syms);
+ CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_24_static_yar), pauseCtx->iconItem24Segment, size1);
pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1);
size2 = SEGMENT_ROM_SIZE(icon_item_gameover_static);
@@ -2185,11 +3327,12 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId;
gSaveContext.save.saveInfo.playerData.health = 0x30;
func_8014546C(sramCtx);
- if (gSaveContext.unk_3F3F == 0) {
+ if (!gSaveContext.flashSaveAvailable) {
pauseCtx->state = PAUSE_STATE_GAMEOVER_8;
} else {
- func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], D_801C67F0[gSaveContext.fileNum]);
- func_80147020(sramCtx);
+ Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum],
+ gFlashSaveNumPages[gSaveContext.fileNum]);
+ Sram_StartWriteToFlashDefault(sramCtx);
pauseCtx->state = PAUSE_STATE_GAMEOVER_7;
}
sDelayTimer = 90;
@@ -2289,8 +3432,8 @@ void KaleidoScope_Update(PlayState* play) {
sPauseCursorRightX = 155;
pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart);
- size0 = SEGMENT_ROM_SIZE(icon_item_static_old);
- CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0);
+ size0 = SEGMENT_ROM_SIZE(icon_item_static_syms);
+ CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0);
pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0);
sInDungeonScene = false;
@@ -2304,7 +3447,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2);
func_8011552C(play, DO_ACTION_WARP);
worldMapCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
- func_80821900(pauseCtx->nameSegment, worldMapCursorPoint);
+ Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, worldMapCursorPoint);
pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00);
DmaMgr_SendRequest0(pauseCtx->iconItemVtxSegment, SEGMENT_ROM_START(icon_item_vtx_static),
diff --git a/tools/buildtools/.gitignore b/tools/buildtools/.gitignore
index ecf2dd851..1119d9786 100644
--- a/tools/buildtools/.gitignore
+++ b/tools/buildtools/.gitignore
@@ -5,3 +5,4 @@ makeromfs
mkldscript
reloc_prereq
yaz0
+makeyar
diff --git a/tools/buildtools/Makefile b/tools/buildtools/Makefile
index 6f34b5cfa..57c5d0542 100644
--- a/tools/buildtools/Makefile
+++ b/tools/buildtools/Makefile
@@ -1,6 +1,5 @@
-CC := gcc
-CFLAGS := -Wall -Wextra -pedantic -std=c99 -g -O2
-PROGRAMS := elf2rom makeromfs mkldscript reloc_prereq yaz0
+CFLAGS := -Wall -Wextra -Wpedantic -std=c99 -g -Os
+PROGRAMS := elf2rom makeromfs mkldscript reloc_prereq yaz0 makeyar
ifeq ($(shell command -v clang >/dev/null 2>&1; echo $$?),0)
CC := clang
@@ -8,15 +7,6 @@ else
CC := gcc
endif
-LLD ?= 0
-
-ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0)
- LLD := 1
-endif
-
-ifneq ($(LLD),0)
- CFLAGS += -fuse-ld=lld
-endif
all: $(PROGRAMS)
clean:
@@ -27,6 +17,7 @@ makeromfs_SOURCES := makeromfs.c n64chksum.c util.c
mkldscript_SOURCES := mkldscript.c spec.c util.c
reloc_prereq_SOURCES := reloc_prereq.c spec.c util.c
yaz0_SOURCES := yaz0tool.c yaz0.c util.c
+makeyar_SOURCES := makeyar.c elf32.c yaz0.c util.c
define COMPILE =
$(1): $($1_SOURCES)
diff --git a/tools/buildtools/elf32.c b/tools/buildtools/elf32.c
index 7540406fb..64e6a9a1b 100644
--- a/tools/buildtools/elf32.c
+++ b/tools/buildtools/elf32.c
@@ -138,6 +138,7 @@ bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum) {
sec->flags = e->read32(sechdr + 0x08);
sec->addr = e->read32(sechdr + 0x0C);
sec->offset = e->read32(sechdr + 0x10);
+ sec->size = e->read32(sechdr + 0x14);
sec->addralign = e->read32(sechdr + 0x20);
sec->entsize = e->read32(sechdr + 0x24);
return true;
@@ -162,5 +163,8 @@ bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum) {
sym->name = strings + e->read32(symtab + symnum * 0x10);
sym->value = e->read32(symtab + symnum * 0x10 + 4);
+ sym->size = e->read32(symtab + symnum * 0x10 + 8);
+ sym->st_type = symtab[symnum * 0x10 + 0xC] & 0xF;
+ sym->shndx = e->read16(symtab + symnum * 0x10 + 0xE);
return true;
}
diff --git a/tools/buildtools/elf32.h b/tools/buildtools/elf32.h
index 0dae635f2..f3de31358 100644
--- a/tools/buildtools/elf32.h
+++ b/tools/buildtools/elf32.h
@@ -3,6 +3,7 @@
#include
#include
+#include
enum {
ELF_MACHINE_NONE = 0,
@@ -52,14 +53,31 @@ struct Elf32_Section {
uint32_t type;
uint32_t flags;
uint32_t addr;
+ uint32_t size;
uint32_t offset;
uint32_t addralign;
uint32_t entsize;
};
+#define SHN_UNDEF 0
+#define SHN_ABS 0xFFF1
+#define SHN_COMMON 0xFFF2
+
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+#define STT_COMMON 5
+#define STT_TLS 6
+#define STT_NUM 7
+
struct Elf32_Symbol {
const char* name;
uint32_t value;
+ uint32_t size;
+ uint8_t st_type;
+ uint16_t shndx;
};
bool elf32_init(struct Elf32* e, const void* data, size_t size);
diff --git a/tools/buildtools/makeyar.c b/tools/buildtools/makeyar.c
new file mode 100644
index 000000000..6a241f6f5
--- /dev/null
+++ b/tools/buildtools/makeyar.c
@@ -0,0 +1,267 @@
+/* SPDX-FileCopyrightText: © 2023 ZeldaRET */
+/* SPDX-License-Identifier: MIT */
+
+/**
+ * Program to generate compressed yar (Yaz0 ARchive) files.
+ *
+ * The program expects an .o elf file and outputs a raw yar binary file and a
+ * "symbols" elf.
+ *
+ * A yar file consists of multiple Yaz0 files compressed individually. The
+ * archive begins with a header of non-fixed size, which describes the
+ * location of each individual Yaz0 block within the archive itself. This
+ * header is followed by each Yaz0 file.
+ *
+ * The first word (a 4 byte group) of the header indicates the size in bytes of
+ * the header itself (also describes the offset of the first Yaz0 block). The
+ * rest of the header consists of words describing the offsets of each Yaz0
+ * block relative to the end of the header, because the first Yaz0
+ * block is omitted from the offsets in the header.
+ *
+ * Each Yaz0 block is 0xFF-padded to a multiple of 0x10 in size.
+ *
+ * The entire archive is 0-padded to a multiple of 0x10 in size.
+ *
+ * The program works by compressing each .data symbol in the input elf file as
+ * its own Yaz0 compressed file, appending them in order for the generated
+ * archive. Other elf sections are ignored for the resulting yar file.
+ *
+ * The program also outputs an elf file that's identical to the elf input,
+ * but with its .data section zero'ed out completely. This "symbols" elf can be
+ * used for referencing each symbol as the whole file were completely
+ * uncompressed.
+ */
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "elf32.h"
+#include "yaz0.h"
+#include "util.h"
+
+
+typedef struct Bytearray {
+ uint8_t *bytes;
+ size_t size;
+} Bytearray;
+
+typedef struct SymbolList {
+ struct Elf32_Symbol *symbols;
+ size_t size; // allocated size
+ size_t len; // elements in the list
+} SymbolList;
+
+typedef struct DataSection {
+ Bytearray data;
+ uint32_t dataOffset;
+ SymbolList symbols;
+} DataSection;
+
+
+void Bytearray_Init(Bytearray *bytearr, const uint8_t *bytes, size_t size) {
+ bytearr->bytes = malloc(size);
+ if (bytearr->bytes == NULL) {
+ util_fatal_error("memory error");
+ }
+
+ memcpy(bytearr->bytes, bytes, size);
+ bytearr->size = size;
+}
+
+void Bytearray_InitValue(Bytearray *bytearr, uint8_t val, size_t count) {
+ bytearr->bytes = malloc(count * sizeof(uint8_t));
+ if (bytearr->bytes == NULL) {
+ util_fatal_error("memory error");
+ }
+
+ memset(bytearr->bytes, val, count);
+ bytearr->size = count;
+}
+
+void Bytearray_ExtendValue(Bytearray *bytearr, uint8_t val, size_t count) {
+ size_t newSize = bytearr->size + count;
+
+ bytearr->bytes = realloc(bytearr->bytes, newSize);
+ if (bytearr->bytes == NULL) {
+ util_fatal_error("memory error");
+ }
+
+ memset(&bytearr->bytes[bytearr->size], val, count);
+ bytearr->size = newSize;
+}
+
+void Bytearray_Extend(Bytearray *bytearr, const uint8_t *bytes, size_t size) {
+ size_t newSize = bytearr->size + size;
+
+ bytearr->bytes = realloc(bytearr->bytes, newSize);
+ if (bytearr->bytes == NULL) {
+ util_fatal_error("memory error");
+ }
+
+ memcpy(&bytearr->bytes[bytearr->size], bytes, size);
+ bytearr->size = newSize;
+}
+
+void Bytearray_Destroy(Bytearray *bytearr) {
+ free(bytearr->bytes);
+}
+
+void SymbolList_Init(SymbolList *list, size_t initialAmount) {
+ list->symbols = malloc(initialAmount * sizeof(struct Elf32_Symbol));
+ if (list->symbols == NULL) {
+ util_fatal_error("memory error");
+ }
+ list->size = initialAmount;
+ list->len = 0;
+}
+
+void SymbolList_Destroy(SymbolList *list) {
+ free(list->symbols);
+}
+
+void DataSection_FromElf(DataSection *dst, const Bytearray *elfBytes){
+ struct Elf32 elf;
+ size_t i;
+ int symIndex;
+ size_t dataShndx = 0;
+
+ if (!elf32_init(&elf, elfBytes->bytes, elfBytes->size) || (elf.machine != ELF_MACHINE_MIPS)) {
+ util_fatal_error("not a valid 32-bit MIPS ELF file");
+ }
+
+ for (i = 0; i < elf.shnum; i++) {
+ struct Elf32_Section sec;
+
+ if (!elf32_get_section(&elf, &sec, i)) {
+ util_fatal_error("invalid or corrupt ELF file");
+ }
+
+ if (strcmp(sec.name, ".data") == 0) {
+ dst->dataOffset = sec.offset;
+ Bytearray_Init(&dst->data, &elfBytes->bytes[sec.offset], sec.size);
+ dataShndx = i;
+ break;
+ }
+ }
+
+ SymbolList_Init(&dst->symbols, elf.numsymbols);
+ for (symIndex = 0; symIndex < elf.numsymbols; symIndex++) {
+ struct Elf32_Symbol sym;
+
+ if (!elf32_get_symbol(&elf, &sym, symIndex)) {
+ util_fatal_error("invalid or corrupt ELF file");
+ }
+
+ if (sym.shndx != dataShndx) {
+ continue;
+ }
+ if (sym.st_type != STT_OBJECT) {
+ continue;
+ }
+
+ dst->symbols.symbols[dst->symbols.len++] = sym;
+ }
+}
+
+void DataSection_Destroy(DataSection *dataSect) {
+ Bytearray_Destroy(&dataSect->data);
+ SymbolList_Destroy(&dataSect->symbols);
+}
+
+#define ALIGN16(val) (((val) + 0xF) & ~0xF)
+
+void createArchive(Bytearray *archive, const DataSection *dataSect) {
+ uint32_t firstEntryOffset = (dataSect->symbols.len + 1) * sizeof(uint32_t);
+ size_t i;
+ size_t offset;
+
+ // Fill with zeroes until the compressed data start
+ Bytearray_InitValue(archive, 0, firstEntryOffset);
+
+ util_write_uint32_be(&archive->bytes[0], firstEntryOffset);
+
+ offset = firstEntryOffset;
+ for (i = 0; i < dataSect->symbols.len; i++) {
+ const struct Elf32_Symbol *sym = &dataSect->symbols.symbols[i];
+ size_t uncompressedSize = sym->size;
+ uint8_t *output = malloc(uncompressedSize * sizeof(uint8_t)); // assume compressed shouldn't be bigger than uncompressed
+ size_t compressedSize;
+
+ output[0] = 'Y';
+ output[1] = 'a';
+ output[2] = 'z';
+ output[3] = '0';
+ util_write_uint32_be(&output[4], uncompressedSize);
+ memset(&output[8], 0, 8);
+ compressedSize = 0x10;
+
+ assert(sym->value + uncompressedSize <= dataSect->data.size);
+ compressedSize += yaz0_encode(&dataSect->data.bytes[sym->value], &output[0x10], uncompressedSize);
+
+ // Pad to 0x10
+ while (compressedSize % 0x10 != 0) {
+ output[compressedSize++] = 0xFF;
+ }
+
+ Bytearray_Extend(archive, output, compressedSize);
+
+ if (i > 0) {
+ util_write_uint32_be(&archive->bytes[i * sizeof(uint32_t)], offset - firstEntryOffset);
+ }
+
+ offset += compressedSize;
+ free(output);
+ }
+
+ util_write_uint32_be(&archive->bytes[i * sizeof(uint32_t)], offset - firstEntryOffset);
+
+ if (archive->size % 16 != 0) {
+ size_t extraPad = ALIGN16(archive->size) - archive->size;
+
+ Bytearray_ExtendValue(archive, 0, extraPad);
+ }
+}
+
+
+int main(int argc, char *argv[]) {
+ const char *inPath;
+ const char *binPath;
+ const char *symPath;
+ Bytearray elfBytes;
+ DataSection dataSect;
+ Bytearray archive;
+
+ if (argc != 4) {
+ fprintf(stderr, "%s in_file out_bin out_sym\n", argv[0]);
+ exit(1);
+ }
+
+ inPath = argv[1];
+ binPath = argv[2];
+ symPath = argv[3];
+
+ elfBytes.bytes = util_read_whole_file(inPath, &elfBytes.size);
+
+ DataSection_FromElf(&dataSect, &elfBytes);
+
+ createArchive(&archive, &dataSect);
+
+ // Write the compressed archive file as a raw binary
+ util_write_whole_file(binPath, archive.bytes, archive.size);
+
+ // Zero out data
+ memset(&elfBytes.bytes[dataSect.dataOffset], 0, dataSect.data.size);
+
+ util_write_whole_file(symPath, elfBytes.bytes, elfBytes.size);
+
+ Bytearray_Destroy(&archive);
+ DataSection_Destroy(&dataSect);
+ Bytearray_Destroy(&elfBytes);
+
+ return 0;
+}
diff --git a/tools/buildtools/yaz0.h b/tools/buildtools/yaz0.h
index 97656aac5..50ac586bb 100644
--- a/tools/buildtools/yaz0.h
+++ b/tools/buildtools/yaz0.h
@@ -1,8 +1,6 @@
#ifndef YAZ0_H
#define YAZ0_H
-int yaz0_encode2(uint8_t* src, uint8_t* dest, int uncompressedSize);
-
void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize);
int yaz0_encode(uint8_t* src, uint8_t* dest, int srcSize);
diff --git a/tools/decompress_yars.py b/tools/decompress_yars.py
new file mode 100755
index 000000000..404a50c56
--- /dev/null
+++ b/tools/decompress_yars.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+# SPDX-FileCopyrightText: © 2023 ZeldaRET
+# SPDX-License-Identifier: MIT
+
+# yar (Yaz0 ARchive) decompressor
+#
+# This program decompresses every raw yar binary file listed in
+# `tools/filelists/{version}/archives.csv` to a corresponding
+# `baserom/{file}.unarchive` raw file.
+#
+# It works by decompressing every Yaz0 block and appending them one by one into
+# a new raw binary file so it can be processed normally by other tools.
+
+
+from __future__ import annotations
+
+import argparse
+import dataclasses
+import libyaz0
+from pathlib import Path
+import struct
+
+
+PRINT_XML = False
+
+@dataclasses.dataclass
+class ArchiveMeta:
+ start: int
+ end: int
+
+
+def readFileAsBytearray(filepath: Path) -> bytearray:
+ with filepath.open(mode="rb") as f:
+ return bytearray(f.read())
+
+
+def readBytesAsWord(array_of_bytes: bytearray, offset: int) -> int:
+ return struct.unpack_from(f">I", array_of_bytes, offset)[0]
+
+
+def getOffsetsList(archiveBytes: bytearray) -> list[ArchiveMeta]:
+ archivesOffsets: list[ArchiveMeta] = []
+
+ firstEntryOffset = readBytesAsWord(archiveBytes, 0)
+ firstEntrySize = readBytesAsWord(archiveBytes, 4)
+
+ archivesOffsets.append(ArchiveMeta(firstEntryOffset, firstEntryOffset + firstEntrySize))
+
+ offset = 4
+ while offset < firstEntryOffset - 4:
+ entry = readBytesAsWord(archiveBytes, offset)
+ nextEntry = readBytesAsWord(archiveBytes, offset + 4)
+ entryStart = entry + firstEntryOffset
+ entryEnd = nextEntry + firstEntryOffset
+ archivesOffsets.append(ArchiveMeta(entryStart, entryEnd))
+
+ offset += 4
+
+ return archivesOffsets
+
+
+def extractArchive(archivePath: Path, outPath: Path):
+ archiveBytes = readFileAsBytearray(archivePath)
+
+ if readBytesAsWord(archiveBytes, 0) == 0:
+ # Empty file, ignore it
+ return
+
+ print(f"Extracting '{archivePath}' -> '{outPath}'")
+ archivesOffsets = getOffsetsList(archiveBytes)
+
+ if PRINT_XML:
+ print('')
+ print(f' ')
+
+ with outPath.open("wb") as out:
+ currentOffset = 0
+ for meta in archivesOffsets:
+ decompressedBytes = libyaz0.decompress(archiveBytes[meta.start:meta.end])
+ decompressedSize = len(decompressedBytes)
+ out.write(decompressedBytes)
+
+ if PRINT_XML:
+ print(f' ')
+
+ currentOffset += decompressedSize
+
+ if PRINT_XML:
+ print(f' ')
+ print('')
+
+
+def main():
+ parser = argparse.ArgumentParser(description="MM archives extractor")
+ parser.add_argument("-v", "--version", help="version to process", default="mm.us.rev1")
+ parser.add_argument("--xml", help="Generate xml to stdout", action="store_true")
+
+ args = parser.parse_args()
+
+ global PRINT_XML
+ PRINT_XML = args.xml
+
+ archivesCsvPath = Path(f"tools/filelists/{args.version}/archives.csv")
+
+ with archivesCsvPath.open() as f:
+ for line in f:
+ archiveName = line.strip().split(",")[1]
+ archivePath = Path(f"baserom/{archiveName}")
+
+ extractedPath = Path(str(archivePath) + ".unarchive")
+ extractArchive(archivePath, extractedPath)
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py
index e7b0f4d81..78d66d337 100755
--- a/tools/disasm/disasm.py
+++ b/tools/disasm/disasm.py
@@ -169,7 +169,6 @@ variable_addrs = None
files_text = {}
-
def proper_name(symbol, in_data=False, is_symbol=True):
# hacks
# ovl_En_Encount4 fake symbol at the very end of the data section
@@ -181,14 +180,18 @@ def proper_name(symbol, in_data=False, is_symbol=True):
return variables_ast[0x801EF670][0] + f" - 0x{0x801EF670 - 0x801EF51D:X}"
elif symbol == 0x801D0D7A: # play_hireso constant-folding D_801D0D80 array
return variables_ast[0x801D0D80][0] + f" - 0x{0x801D0D80 - 0x801D0D7A:X}"
+ elif symbol == 0x801D11F4: # play_hireso constant-folding D_801D1244 array
+ return variables_ast[0x801D1244][0] + f" - 0x{0x801D1244 - 0x801D11F4:X}"
+ elif symbol == 0x801D12C0: # play_hireso constant-folding D_801D12E8 array
+ return variables_ast[0x801D12E8][0] + f" - 0x{0x801D12E8 - 0x801D12C0:X}"
elif symbol == 0x80A09740: # boss_07 symbol with large addend folded into %lo
return variables_ast[0x80A09A60][0] + f" - 0x{0x80A09A60 - 0x80A09740:X}"
# bg_ikana_mirror symbol with large addend folded into %lo
elif symbol == 0x80B80248:
return variables_ast[0x80B801A8][0] + f" + 0x{0x80B80248 - 0x80B801A8:X}"
- # player symbol with very large addend folded into %lo, since we don't know the real symbol just use the first data symbol for now
+ # player symbol with very large addend folded into %lo
elif symbol == 0x8084D2FC:
- return variables_ast[0x8085B9F0][0] + f" - 0x{0x8085B9F0 - 0x8084D2FC:X}"
+ return variables_ast[0x8085D0FA][0] + f" - 0x{0x8085D0FA - 0x8084D2FC:X}"
# OS_K0_TO_PHYSICAL on rspS2DEX text and data symbols
elif symbol == 0x001ABAB0 or symbol == 0x001E3BB0:
return variables_ast[symbol + 0x80000000][0] + " - 0x80000000"
diff --git a/tools/disasm/dma_filenames.txt b/tools/disasm/dma_filenames.txt
index aaa17ab6d..798a8b366 100644
--- a/tools/disasm/dma_filenames.txt
+++ b/tools/disasm/dma_filenames.txt
@@ -7,8 +7,8 @@
'Audiotable',
'kanji',
'link_animetion',
- 'icon_item_static_old',
- 'icon_item_24_static_old',
+ 'icon_item_static_syms',
+ 'icon_item_24_static_syms',
'icon_item_field_static',
'icon_item_dungeon_static',
'icon_item_gameover_static',
@@ -18,10 +18,10 @@
'map_grand_static',
'item_name_static',
'map_name_static',
- 'icon_item_static_test',
- 'icon_item_24_static_test',
- 'schedule_dma_static_old',
- 'schedule_dma_static_test',
+ 'icon_item_static_yar',
+ 'icon_item_24_static_yar',
+ 'schedule_dma_static_syms',
+ 'schedule_dma_static_yar',
'schedule_static',
'story_static',
'do_action_static',
diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt
index de9a0e39b..c8b8046b0 100644
--- a/tools/disasm/files.txt
+++ b/tools/disasm/files.txt
@@ -57,7 +57,7 @@
0x80085570 : "gfxprint",
0x80086110 : "mtxuty-cvt",
0x80086280 : "assert",
- 0x800862E0 : "",
+ 0x800862E0 : "system_heap",
0x80086620 : "padsetup",
0x80086760 : "boot_80086760",
0x80086C70 : "fp",
@@ -256,7 +256,7 @@
0x80096C30 : "loadfragment2",
0x80096C40 : "stackcheck",
0x80096C50 : "gfxprint",
- 0x80097500 : "boot_800862E0",
+ 0x80097500 : "system_heap",
0x80097520 : "fp",
0x80097530 : "rand",
0x80097540 : "osViModeNtscHpf1",
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 12c14705c..3eaeca601 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -157,48 +157,48 @@
0x80086258:("MtxConv_L2F",),
0x80086280:("__assert",),
0x800862B4:("func_800862B4",),
- 0x800862E0:("SystemArena_MallocMin1",),
- 0x80086310:("SystemArena_FreeNullCheck",),
- 0x8008633C:("SystemArena_RunBlockFunc",),
- 0x800863AC:("SystemArena_RunBlockFunc1",),
- 0x8008641C:("SystemArena_RunBlockFunc8",),
- 0x800864EC:("SystemArena_RunBlockFunc1Reverse",),
- 0x80086588:("SystemArena_RunInits",),
- 0x800865F8:("SystemArena_Init",),
+ 0x800862E0:("SystemHeap_Malloc",),
+ 0x80086310:("SystemHeap_Free",),
+ 0x8008633C:("SystemHeap_RunBlockFunc",),
+ 0x800863AC:("SystemHeap_RunBlockFunc1",),
+ 0x8008641C:("SystemHeap_RunBlockFunc8",),
+ 0x800864EC:("SystemHeap_RunBlockFunc1Reverse",),
+ 0x80086588:("SystemHeap_RunInits",),
+ 0x800865F8:("SystemHeap_Init",),
0x80086620:("PadSetup_Init",),
- 0x80086760:("func_80086760",),
- 0x80086794:("func_80086794",),
- 0x800867B4:("func_800867B4",),
- 0x800867D4:("func_800867D4",),
- 0x800867F4:("func_800867F4",),
- 0x80086814:("func_80086814",),
- 0x80086834:("func_80086834",),
- 0x80086880:("func_80086880",),
- 0x800869A4:("func_800869A4",),
- 0x80086AF0:("func_80086AF0",),
- 0x80086B30:("func_80086B30",),
- 0x80086C18:("func_80086C18",),
- 0x80086C48:("func_80086C48",),
- 0x80086C70:("func_80086C70",),
- 0x80086C7C:("func_80086C7C",),
- 0x80086C88:("func_80086C88",),
- 0x80086C98:("func_80086C98",),
- 0x80086CA8:("func_80086CA8",),
- 0x80086CB4:("func_80086CB4",),
- 0x80086CC0:("func_80086CC0",),
- 0x80086CD0:("func_80086CD0",),
- 0x80086CE0:("func_80086CE0",),
- 0x80086CEC:("func_80086CEC",),
- 0x80086CF8:("func_80086CF8",),
- 0x80086D08:("func_80086D08",),
- 0x80086D18:("func_80086D18",),
- 0x80086D24:("func_80086D24",),
- 0x80086D30:("func_80086D30",),
- 0x80086D40:("func_80086D40",),
- 0x80086D50:("func_80086D50",),
- 0x80086D6C:("func_80086D6C",),
- 0x80086D8C:("func_80086D8C",),
- 0x80086DAC:("func_80086DAC",),
+ 0x80086760:("Math_FTanF",),
+ 0x80086794:("Math_FFloorF",),
+ 0x800867B4:("Math_FCeilF",),
+ 0x800867D4:("Math_FRoundF",),
+ 0x800867F4:("Math_FTruncF",),
+ 0x80086814:("Math_FNearbyIntF",),
+ 0x80086834:("Math_FAtanTaylorQF",),
+ 0x80086880:("Math_FAtanTaylorF",),
+ 0x800869A4:("Math_FAtanContFracF",),
+ 0x80086AF0:("Math_FAtanF",),
+ 0x80086B30:("Math_FAtan2F",),
+ 0x80086C18:("Math_FAsinF",),
+ 0x80086C48:("Math_FAcosF",),
+ 0x80086C70:("floorf",),
+ 0x80086C7C:("floor",),
+ 0x80086C88:("lfloorf",),
+ 0x80086C98:("lfloor",),
+ 0x80086CA8:("ceilf",),
+ 0x80086CB4:("ceil",),
+ 0x80086CC0:("lceilf",),
+ 0x80086CD0:("lceil",),
+ 0x80086CE0:("truncf",),
+ 0x80086CEC:("trunc",),
+ 0x80086CF8:("ltruncf",),
+ 0x80086D08:("ltrunc",),
+ 0x80086D18:("nearbyintf",),
+ 0x80086D24:("nearbyint",),
+ 0x80086D30:("lnearbyintf",),
+ 0x80086D40:("lnearbyint",),
+ 0x80086D50:("roundf",),
+ 0x80086D6C:("round",),
+ 0x80086D8C:("lroundf",),
+ 0x80086DAC:("lround",),
0x80086DD0:("SystemArena_Malloc",),
0x80086DF8:("SystemArena_MallocR",),
0x80086E20:("SystemArena_Realloc",),
@@ -206,7 +206,7 @@
0x80086E78:("SystemArena_Calloc",),
0x80086ECC:("SystemArena_GetSizes",),
0x80086F04:("SystemArena_CheckArena",),
- 0x80086F28:("SystemArena_InitArena",),
+ 0x80086F28:("SystemArena_Init",),
0x80086F58:("SystemArena_Cleanup",),
0x80086F7C:("SystemArena_IsInitialized",),
0x80086FA0:("Rand_Next",),
@@ -743,7 +743,7 @@
0x800B7170:("Actor_SetCameraHorseSetting",),
0x800B71DC:("Actor_MountHorse",),
0x800B7200:("func_800B7200",),
- 0x800B722C:("func_800B722C",),
+ 0x800B722C:("Actor_SpawnHorse",),
0x800B724C:("func_800B724C",),
0x800B7298:("func_800B7298",),
0x800B72E0:("func_800B72E0",),
@@ -1683,16 +1683,16 @@
0x800F37B0:("FireObj_Destroy",),
0x800F37F0:("FireObj_SetState2",),
0x800F3820:("FireObj_Update",),
- 0x800F3940:("func_800F3940",),
- 0x800F39B4:("func_800F39B4",),
- 0x800F3A64:("func_800F3A64",),
- 0x800F3B2C:("func_800F3B2C",),
- 0x800F3B68:("func_800F3B68",),
- 0x800F3C44:("func_800F3C44",),
- 0x800F3ED4:("func_800F3ED4",),
- 0x800F40A0:("func_800F40A0",),
- 0x800F415C:("func_800F415C",),
- 0x800F41E4:("func_800F41E4",),
+ 0x800F3940:("Horse_GetJumpingFencePathIndex",),
+ 0x800F39B4:("Horse_CopyPointFromPathList",),
+ 0x800F3A64:("Horse_IsValidSpawn",),
+ 0x800F3B2C:("Horse_ResetHorseData",),
+ 0x800F3B68:("Horse_IsValidSceneLayer",),
+ 0x800F3C44:("Horse_SpawnOverworld",),
+ 0x800F3ED4:("Horse_SpawnMinigame",),
+ 0x800F40A0:("Horse_Spawn",),
+ 0x800F415C:("Horse_RotateToPoint",),
+ 0x800F41E4:("Horse_IsActive",),
0x800F42A0:("Jpeg_ScheduleDecoderTask",),
0x800F43BC:("Jpeg_CopyToZbuffer",),
0x800F44F4:("Jpeg_GetUnalignedU16",),
@@ -1707,7 +1707,7 @@
0x800F4FC0:("Font_LoadMessageBoxEndIcon",),
0x800F5004:("Font_LoadOrderedFont",),
0x800F5090:("func_800F5090",),
- 0x800F50D4:("func_800F50D4",),
+ 0x800F50D4:("Environment_ZBufValToFixedPoint",),
0x800F510C:("Environment_Init",),
0x800F5954:("func_800F5954",),
0x800F5A8C:("Environment_LerpWeight",),
@@ -1751,10 +1751,10 @@
0x800FC64C:("Environment_DrawSandstorm",),
0x800FD2B4:("func_800FD2B4",),
0x800FD538:("func_800FD538",),
- 0x800FD59C:("func_800FD59C",),
- 0x800FD5E0:("func_800FD5E0",),
- 0x800FD654:("func_800FD654",),
- 0x800FD698:("func_800FD698",),
+ 0x800FD59C:("Environment_LerpAmbientColor",),
+ 0x800FD5E0:("Environment_LerpDiffuseColor",),
+ 0x800FD654:("Environment_LerpFogColor",),
+ 0x800FD698:("Environment_LerpFog",),
0x800FD720:("get_days_elapsed",),
0x800FD730:("reset_days_elapsed",),
0x800FD740:("get_current_day",),
@@ -2314,72 +2314,72 @@
0x8012BC50:("Gfx_SetFog",),
0x8012BD8C:("Gfx_SetFogWithSync",),
0x8012BF08:("Gfx_SetFog2",),
- 0x8012BF3C:("Gfx_CallSetupDLImpl",),
- 0x8012BF78:("Gfx_CallSetupDL",),
- 0x8012BF98:("Gfx_CallSetupDLAtPtr",),
- 0x8012BFC4:("func_8012BFC4",),
- 0x8012BFEC:("func_8012BFEC",),
- 0x8012C014:("func_8012C014",),
- 0x8012C058:("func_8012C058",),
- 0x8012C080:("func_8012C080",),
- 0x8012C0A8:("func_8012C0A8",),
- 0x8012C0D0:("func_8012C0D0",),
- 0x8012C0F8:("func_8012C0F8",),
- 0x8012C120:("func_8012C120",),
- 0x8012C148:("func_8012C148",),
- 0x8012C170:("func_8012C170",),
- 0x8012C198:("func_8012C198",),
- 0x8012C1C0:("func_8012C1C0",),
- 0x8012C1EC:("func_8012C1EC",),
- 0x8012C214:("func_8012C214",),
- 0x8012C240:("func_8012C240",),
+ 0x8012BF3C:("Gfx_SetupDLImpl",),
+ 0x8012BF78:("Gfx_SetupDL",),
+ 0x8012BF98:("Gfx_SetupDLAtPtr",),
+ 0x8012BFC4:("Gfx_SetupDL57",),
+ 0x8012BFEC:("Gfx_SetupDL57_b",),
+ 0x8012C014:("Gfx_SetupDL52_NoCD",),
+ 0x8012C058:("Gfx_SetupDL58_Opa",),
+ 0x8012C080:("Gfx_SetupDL57_Opa",),
+ 0x8012C0A8:("Gfx_SetupDL50_Opa",),
+ 0x8012C0D0:("Gfx_SetupDL51_Opa",),
+ 0x8012C0F8:("Gfx_SetupDL52_Xlu",),
+ 0x8012C120:("Gfx_SetupDL53_Opa",),
+ 0x8012C148:("Gfx_SetupDL54_Opa",),
+ 0x8012C170:("Gfx_SetupDL55_Xlu",),
+ 0x8012C198:("Gfx_SetupDL26",),
+ 0x8012C1C0:("Gfx_SetupDL26_Opa",),
+ 0x8012C1EC:("Gfx_SetupDL23",),
+ 0x8012C214:("Gfx_SetupDL23_Opa",),
+ 0x8012C240:("Gfx_SetupDL25_Xlu2",),
0x8012C268:("func_8012C268",),
- 0x8012C28C:("func_8012C28C",),
- 0x8012C2B4:("func_8012C2B4",),
- 0x8012C2DC:("func_8012C2DC",),
- 0x8012C304:("func_8012C304",),
- 0x8012C32C:("func_8012C32C",),
- 0x8012C354:("func_8012C354",),
- 0x8012C37C:("func_8012C37C",),
- 0x8012C3A4:("func_8012C3A4",),
- 0x8012C3CC:("func_8012C3CC",),
- 0x8012C3F4:("func_8012C3F4",),
- 0x8012C420:("func_8012C420",),
- 0x8012C448:("func_8012C448",),
- 0x8012C470:("func_8012C470",),
- 0x8012C498:("func_8012C498",),
- 0x8012C4C0:("func_8012C4C0",),
- 0x8012C4E8:("func_8012C4E8",),
- 0x8012C510:("func_8012C510",),
- 0x8012C538:("func_8012C538",),
- 0x8012C560:("func_8012C560",),
- 0x8012C588:("func_8012C588",),
- 0x8012C5B0:("func_8012C5B0",),
- 0x8012C5D8:("func_8012C5D8",),
- 0x8012C600:("func_8012C600",),
- 0x8012C628:("func_8012C628",),
- 0x8012C654:("func_8012C654",),
- 0x8012C680:("func_8012C680",),
- 0x8012C6AC:("func_8012C6AC",),
- 0x8012C6D4:("func_8012C6D4",),
- 0x8012C6FC:("func_8012C6FC",),
- 0x8012C724:("func_8012C724",),
- 0x8012C74C:("func_8012C74C",),
- 0x8012C774:("func_8012C774",),
- 0x8012C7B8:("func_8012C7B8",),
- 0x8012C7FC:("func_8012C7FC",),
- 0x8012C840:("func_8012C840",),
- 0x8012C868:("func_8012C868",),
- 0x8012C8AC:("func_8012C8AC",),
- 0x8012C8D4:("func_8012C8D4",),
- 0x8012C8FC:("func_8012C8FC",),
- 0x8012C924:("func_8012C924",),
- 0x8012C94C:("func_8012C94C",),
- 0x8012C974:("func_8012C974",),
- 0x8012C9BC:("func_8012C9BC",),
- 0x8012C9E4:("func_8012C9E4",),
- 0x8012CA0C:("func_8012CA0C",),
- 0x8012CA38:("func_8012CA38",),
+ 0x8012C28C:("Gfx_SetupDL25_Opa",),
+ 0x8012C2B4:("Gfx_SetupDL71",),
+ 0x8012C2DC:("Gfx_SetupDL25_Xlu",),
+ 0x8012C304:("Gfx_SetupDL72",),
+ 0x8012C32C:("Gfx_SetupDL31_Opa",),
+ 0x8012C354:("Gfx_SetupDL32_Opa",),
+ 0x8012C37C:("Gfx_SetupDL33_Opa",),
+ 0x8012C3A4:("Gfx_SetupDL64",),
+ 0x8012C3CC:("Gfx_SetupDL34",),
+ 0x8012C3F4:("Gfx_SetupDL34_Opa",),
+ 0x8012C420:("Gfx_SetupDL35_Opa",),
+ 0x8012C448:("Gfx_SetupDL44_Xlu",),
+ 0x8012C470:("Gfx_SetupDL36_Opa",),
+ 0x8012C498:("Gfx_SetupDL28",),
+ 0x8012C4C0:("Gfx_SetupDL28_Opa",),
+ 0x8012C4E8:("Gfx_SetupDL43_Opa",),
+ 0x8012C510:("Gfx_SetupDL45_Opa",),
+ 0x8012C538:("Gfx_SetupDL46_Overlay",),
+ 0x8012C560:("Gfx_SetupDL38_Xlu",),
+ 0x8012C588:("Gfx_SetupDL4_Xlu",),
+ 0x8012C5B0:("Gfx_SetupDL37_Opa",),
+ 0x8012C5D8:("Gfx_SetupDL2_Opa",),
+ 0x8012C600:("Gfx_SetupDL39",),
+ 0x8012C628:("Gfx_SetupDL39_Opa",),
+ 0x8012C654:("Gfx_SetupDL39_Overlay",),
+ 0x8012C680:("Gfx_SetupDL39_Ptr",),
+ 0x8012C6AC:("Gfx_SetupDL40_Opa",),
+ 0x8012C6D4:("Gfx_SetupDL41_Opa",),
+ 0x8012C6FC:("Gfx_SetupDL47_Xlu",),
+ 0x8012C724:("Gfx_SetupDL66",),
+ 0x8012C74C:("Gfx_SetupDL67",),
+ 0x8012C774:("Gfx_SetupDL68_NoCD",),
+ 0x8012C7B8:("Gfx_SetupDL69_NoCD",),
+ 0x8012C7FC:("Gfx_SetupDL65_NoCD",),
+ 0x8012C840:("Gfx_SetupDL70",),
+ 0x8012C868:("Gfx_SetupDL20_NoCD",),
+ 0x8012C8AC:("Gfx_SetupDL42_Opa",),
+ 0x8012C8D4:("Gfx_SetupDL42_Overlay",),
+ 0x8012C8FC:("Gfx_SetupDL48_Opa",),
+ 0x8012C924:("Gfx_SetupDL49_Xlu",),
+ 0x8012C94C:("Gfx_SetupDL27_Xlu",),
+ 0x8012C974:("Gfx_SetupDL60_XluNoCD",),
+ 0x8012C9BC:("Gfx_SetupDL61_Xlu",),
+ 0x8012C9E4:("Gfx_SetupDL56_Opa",),
+ 0x8012CA0C:("Gfx_SetupDL56_Ptr",),
+ 0x8012CA38:("Gfx_SetupDL59_Opa",),
0x8012CA60:("Gfx_BranchTexScroll",),
0x8012CB04:("func_8012CB04",),
0x8012CB28:("func_8012CB28",),
@@ -2748,17 +2748,17 @@
0x8013FD74:("View_ApplyPerspectiveToOverlay",),
0x80140024:("View_UpdateViewingMatrix",),
0x801400CC:("View_ApplyTo",),
- 0x80140260:("func_80140260",),
- 0x8014026C:("func_8014026C",),
- 0x80140730:("func_80140730",),
- 0x80140810:("func_80140810",),
- 0x80140898:("func_80140898",),
- 0x80140900:("func_80140900",),
- 0x8014090C:("func_8014090C",),
- 0x80140970:("func_80140970",),
- 0x80140CE0:("func_80140CE0",),
- 0x80140D04:("func_80140D04",),
- 0x80140D10:("func_80140D10",),
+ 0x80140260:("ViMode_LogPrint",),
+ 0x8014026C:("ViMode_Configure",),
+ 0x80140730:("ViMode_Save",),
+ 0x80140810:("ViMode_Load",),
+ 0x80140898:("ViMode_Init",),
+ 0x80140900:("ViMode_Destroy",),
+ 0x8014090C:("ViMode_ConfigureFeatures",),
+ 0x80140970:("ViMode_Update",),
+ 0x80140CE0:("VisCvg_Init",),
+ 0x80140D04:("VisCvg_Destroy",),
+ 0x80140D10:("VisCvg_Draw",),
0x80140E80:("func_80140E80",),
0x80140EA0:("func_80140EA0",),
0x80140EAC:("func_80140EAC",),
@@ -2802,21 +2802,21 @@
0x8014546C:("func_8014546C",),
0x80145698:("func_80145698",),
0x801457CC:("func_801457CC",),
- 0x80146580:("func_80146580",),
- 0x80146628:("func_80146628",),
+ 0x80146580:("Sram_EraseSave",),
+ 0x80146628:("Sram_CopySave",),
0x80146AA0:("Sram_InitSave",),
- 0x80146DF8:("func_80146DF8",),
+ 0x80146DF8:("Sram_WriteSaveOptionsToBuffer",),
0x80146E40:("Sram_InitSram",),
0x80146E70:("Sram_Alloc",),
- 0x80146EBC:("func_80146EBC",),
+ 0x80146EBC:("Sram_SyncWriteToFlash",),
0x80146EE8:("Sram_SaveSpecialEnterClockTown",),
0x80146F5C:("Sram_SaveSpecialNewDay",),
- 0x80147008:("func_80147008",),
- 0x80147020:("func_80147020",),
- 0x80147068:("func_80147068",),
- 0x80147138:("func_80147138",),
- 0x80147150:("func_80147150",),
- 0x80147198:("func_80147198",),
+ 0x80147008:("Sram_SetFlashPagesDefault",),
+ 0x80147020:("Sram_StartWriteToFlashDefault",),
+ 0x80147068:("Sram_UpdateWriteToFlashDefault",),
+ 0x80147138:("Sram_SetFlashPagesOwlSave",),
+ 0x80147150:("Sram_StartWriteToFlashOwlSave",),
+ 0x80147198:("Sram_UpdateWriteToFlashOwlSave",),
0x80147314:("func_80147314",),
0x80147414:("func_80147414",),
0x8014750C:("Sram_nop8014750C",),
@@ -2855,7 +2855,7 @@
0x801518B0:("Message_StartTextbox",),
0x80151938:("Message_ContinueTextbox",),
0x80151A68:("func_80151A68",),
- 0x80151BB4:("func_80151BB4",),
+ 0x80151BB4:("Message_BombersNotebookQueueEvent",),
0x80151C9C:("func_80151C9C",),
0x80151DA4:("func_80151DA4",),
0x80152434:("func_80152434",),
@@ -3040,16 +3040,16 @@
0x8016A178:("Play_AssignPlayerCsIdsFromScene",),
0x8016A268:("Play_FillScreen",),
0x8016A2C8:("Play_Init",),
- 0x8016AC10:("func_8016AC10",),
- 0x8016AE1C:("func_8016AE1C",),
- 0x8016B278:("func_8016B278",),
- 0x8016B4B0:("func_8016B4B0",),
- 0x8016C344:("func_8016C344",),
- 0x8016CD4C:("func_8016CD4C",),
- 0x8016E40C:("func_8016E40C",),
- 0x8016EA90:("func_8016EA90",),
+ 0x8016AC10:("BombersNotebook_DrawScisTexRect",),
+ 0x8016AE1C:("BombersNotebook_DrawHeaders",),
+ 0x8016B278:("BombersNotebook_DrawColumns",),
+ 0x8016B4B0:("BombersNotebook_DrawEntries",),
+ 0x8016C344:("BombersNotebook_DrawRows",),
+ 0x8016CD4C:("BombersNotebook_DrawTimeOfDay",),
+ 0x8016E40C:("BombersNotebook_DrawCursor",),
+ 0x8016EA90:("BombersNotebook_DrawArrows",),
0x8016F1A8:("BombersNotebook_Draw",),
- 0x8016F4EC:("func_8016F4EC",),
+ 0x8016F4EC:("BombersNotebook_LoadFiles",),
0x8016F5A8:("BombersNotebook_Update",),
0x8016FC78:("BombersNotebook_Init",),
0x8016FC98:("BombersNotebook_Destroy",),
@@ -3225,15 +3225,15 @@
0x801780F0:("Mtx_SetTranslateScaleMtx",),
0x801781EC:("Mtx_SetRotationMtx",),
0x8017842C:("Mtx_SetTranslationRotationScaleMtx",),
- 0x80178750:("func_80178750",),
- 0x80178818:("func_80178818",),
- 0x80178978:("func_80178978",),
- 0x801789D4:("func_801789D4",),
- 0x801789EC:("SysCfb_GetFbPtr",),
+ 0x80178750:("SysCfb_SetLoResMode",),
+ 0x80178818:("SysCfb_SetHiResMode",),
+ 0x80178978:("SysCfb_Init",),
+ 0x801789D4:("SysCfb_Reset",),
+ 0x801789EC:("SysCfb_GetFramebuffer",),
0x80178A14:("SysCfb_GetZBuffer",),
- 0x80178A24:("func_80178A24",),
- 0x80178A34:("func_80178A34",),
- 0x80178A94:("func_80178A94",),
+ 0x80178A24:("SysCfb_GetWorkBuffer",),
+ 0x80178A34:("SysCfb_GetZBufferPixel",),
+ 0x80178A94:("SysCfb_GetZBufferInt",),
0x80178AC0:("func_80178AC0",),
0x80178C80:("CmpDma_GetFileInfo",),
0x80178D7C:("CmpDma_Decompress",),
@@ -3248,13 +3248,13 @@
0x801791CC:("Check_DrawRegionLockErrorMessage",),
0x80179260:("Check_ExpansionPak",),
0x801792A4:("Check_RegionIsSupported",),
- 0x80179300:("func_80179300",),
- 0x80179400:("func_80179400",),
- 0x801794C4:("pow_int",),
- 0x801794EC:("sin_rad",),
- 0x80179540:("cos_rad",),
+ 0x80179300:("Math_FactorialF",),
+ 0x80179400:("Math_Factorial",),
+ 0x801794C4:("Math_PowF",),
+ 0x801794EC:("Math_SinF",),
+ 0x80179540:("Math_CosF",),
0x80179594:("Rand_ZeroFloat",),
- 0x801795C0:("randPlusMinusPoint5Scaled",),
+ 0x801795C0:("Rand_CenteredFloat",),
0x801795F0:("Math3D_Normalize",),
0x80179678:("Math3D_PlaneVsLineSegClosestPoint",),
0x80179798:("func_80179798",),
@@ -3447,21 +3447,21 @@
0x801856FC:("Slowly_ThreadEntry",),
0x8018571C:("Slowly_Init",),
0x801857A0:("Slowly_Destroy",),
- 0x801857C0:("func_801857C0",),
- 0x801857D0:("func_801857D0",),
- 0x80185864:("func_80185864",),
- 0x80185908:("func_80185908",),
- 0x80185968:("func_80185968",),
- 0x801859F0:("func_801859F0",),
- 0x80185A2C:("func_80185A2C",),
- 0x80185B1C:("func_80185B1C",),
- 0x80185BE4:("func_80185BE4",),
+ 0x801857C0:("SysFlashrom_IsInit",),
+ 0x801857D0:("SysFlashrom_GetVendorStr",),
+ 0x80185864:("SysFlashrom_CheckFlashType",),
+ 0x80185908:("SysFlashrom_InitFlash",),
+ 0x80185968:("SysFlashrom_ReadData",),
+ 0x801859F0:("SysFlashrom_EraseSector",),
+ 0x80185A2C:("SysFlashrom_ExecWrite",),
+ 0x80185B1C:("SysFlashrom_AttemptWrite",),
+ 0x80185BE4:("SysFlashrom_NeedsToErase",),
0x80185C24:("func_80185C24",),
0x80185D40:("SysFlashrom_ThreadEntry",),
- 0x80185DDC:("func_80185DDC",),
- 0x80185EC4:("func_80185EC4",),
- 0x80185F04:("func_80185F04",),
- 0x80185F64:("func_80185F64",),
+ 0x80185DDC:("SysFlashrom_WriteDataAsync",),
+ 0x80185EC4:("SysFlashrom_IsBusy",),
+ 0x80185F04:("SysFlashrom_AwaitResult",),
+ 0x80185F64:("SysFlashrom_WriteDataSync",),
0x80185F90:("func_80185F90",),
0x80186A70:("osFlashGetAddr",),
0x80186AB8:("osFlashReInit",),
@@ -4107,87 +4107,87 @@
0x80803EC0:("TitleSetup_Main",),
0x80803F0C:("TitleSetup_Destroy",),
0x80803F30:("TitleSetup_Init",),
- 0x80804010:("func_80804010",),
- 0x808041A0:("func_808041A0",),
- 0x80804654:("func_80804654",),
- 0x808047D8:("func_808047D8",),
- 0x8080489C:("func_8080489C",),
- 0x80804DAC:("func_80804DAC",),
- 0x80804E74:("func_80804E74",),
- 0x80804F98:("func_80804F98",),
- 0x8080525C:("func_8080525C",),
- 0x808052B0:("func_808052B0",),
- 0x808054A4:("func_808054A4",),
- 0x808055D0:("func_808055D0",),
- 0x808058A4:("func_808058A4",),
- 0x80805918:("func_80805918",),
- 0x80805A58:("func_80805A58",),
- 0x80805B30:("func_80805B30",),
- 0x80805C1C:("func_80805C1C",),
- 0x80806014:("func_80806014",),
- 0x80806148:("func_80806148",),
- 0x80806310:("func_80806310",),
- 0x808067E0:("func_808067E0",),
- 0x80806BC8:("func_80806BC8",),
- 0x80806CA0:("func_80806CA0",),
- 0x80806E84:("func_80806E84",),
- 0x80806F30:("func_80806F30",),
- 0x808071E4:("func_808071E4",),
- 0x80807390:("func_80807390",),
- 0x8080742C:("func_8080742C",),
- 0x808074B4:("func_808074B4",),
- 0x808077AC:("func_808077AC",),
- 0x80807940:("func_80807940",),
- 0x80807A78:("func_80807A78",),
- 0x80807C58:("func_80807C58",),
- 0x80808214:("func_80808214",),
- 0x80808D30:("func_80808D30",),
- 0x80808F1C:("func_80808F1C",),
- 0x80809DF0:("func_80809DF0",),
- 0x80809EA0:("func_80809EA0",),
- 0x8080A3CC:("func_8080A3CC",),
- 0x8080A418:("func_8080A418",),
- 0x8080A4A0:("func_8080A4A0",),
- 0x8080A6BC:("func_8080A6BC",),
- 0x8080A708:("func_8080A708",),
- 0x8080BBFC:("func_8080BBFC",),
- 0x8080BC20:("func_8080BC20",),
- 0x8080BC44:("FileSelect_nop8080bc44",),
- 0x8080BC4C:("FileSelect_nop8080BC4C",),
- 0x8080BC58:("func_8080BC58",),
- 0x8080BDAC:("func_8080BDAC",),
- 0x8080BDDC:("FileSelect_RenderView",),
- 0x8080BE60:("func_8080BE60",),
- 0x8080C040:("func_8080C040",),
- 0x8080C228:("func_8080C228",),
- 0x8080C29C:("func_8080C29C",),
- 0x8080C324:("func_8080C324",),
- 0x8080C3A8:("func_8080C3A8",),
- 0x8080D164:("func_8080D164",),
- 0x8080D170:("func_8080D170",),
- 0x8080D1BC:("func_8080D1BC",),
- 0x8080D220:("func_8080D220",),
- 0x8080D284:("func_8080D284",),
- 0x8080D2EC:("func_8080D2EC",),
- 0x8080D3D0:("func_8080D3D0",),
- 0x8080D40C:("func_8080D40C",),
- 0x8080D6D4:("func_8080D6D4",),
- 0x8080F25C:("func_8080F25C",),
- 0x808108DC:("func_808108DC",),
- 0x80811CB8:("func_80811CB8",),
- 0x80812460:("func_80812460",),
- 0x80812668:("func_80812668",),
- 0x80812760:("func_80812760",),
- 0x80812840:("func_80812840",),
- 0x80812980:("func_80812980",),
- 0x80812A6C:("func_80812A6C",),
- 0x80812D44:("func_80812D44",),
- 0x80812D94:("func_80812D94",),
- 0x80812E94:("func_80812E94",),
- 0x80812ED0:("func_80812ED0",),
+ 0x80804010:("FileSelect_SetupCopySource",),
+ 0x808041A0:("FileSelect_SelectCopySource",),
+ 0x80804654:("FileSelect_SetupCopyDest1",),
+ 0x808047D8:("FileSelect_SetupCopyDest2",),
+ 0x8080489C:("FileSelect_SelectCopyDest",),
+ 0x80804DAC:("FileSelect_ExitToCopySource1",),
+ 0x80804E74:("FileSelect_ExitToCopySource2",),
+ 0x80804F98:("FileSelect_SetupCopyConfirm1",),
+ 0x8080525C:("FileSelect_SetupCopyConfirm2",),
+ 0x808052B0:("FileSelect_CopyConfirm",),
+ 0x808054A4:("FileSelect_CopyWaitForFlashSave",),
+ 0x808055D0:("FileSelect_ReturnToCopyDest",),
+ 0x808058A4:("FileSelect_CopyAnim1",),
+ 0x80805918:("FileSelect_CopyAnim2",),
+ 0x80805A58:("FileSelect_CopyAnim3",),
+ 0x80805B30:("FileSelect_CopyAnim4",),
+ 0x80805C1C:("FileSelect_CopyAnim5",),
+ 0x80806014:("FileSelect_ExitCopyToMain",),
+ 0x80806148:("FileSelect_SetupEraseSelect",),
+ 0x80806310:("FileSelect_EraseSelect",),
+ 0x808067E0:("FileSelect_SetupEraseConfirm1",),
+ 0x80806BC8:("FileSelect_SetupEraseConfirm2",),
+ 0x80806CA0:("FileSelect_EraseConfirm",),
+ 0x80806E84:("FileSelect_ExitToEraseSelect1",),
+ 0x80806F30:("FileSelect_ExitToEraseSelect2",),
+ 0x808071E4:("FileSelect_EraseAnim1",),
+ 0x80807390:("FileSelect_EraseWaitForFlashSave",),
+ 0x8080742C:("FileSelect_EraseAnim2",),
+ 0x808074B4:("FileSelect_EraseAnim3",),
+ 0x808077AC:("FileSelect_ExitEraseToMain",),
+ 0x80807940:("FileSelect_DrawTexQuadI4",),
+ 0x80807A78:("FileSelect_DrawMultiTexQuadI4",),
+ 0x80807C58:("FileSelect_SetKeyboardVtx",),
+ 0x80808214:("FileSelect_SetNameEntryVtx",),
+ 0x80808D30:("FileSelect_DrawKeyboard",),
+ 0x80808F1C:("FileSelect_DrawNameEntry",),
+ 0x80809DF0:("FileSelect_StartNameEntry",),
+ 0x80809EA0:("FileSelect_UpdateKeyboardCursor",),
+ 0x8080A3CC:("FileSelect_NameEntryWaitForFlashSave",),
+ 0x8080A418:("FileSelect_StartOptions",),
+ 0x8080A4A0:("FileSelect_UpdateOptionsMenu",),
+ 0x8080A6BC:("FileSelect_OptionsWaitForFlashSave",),
+ 0x8080A708:("FileSelect_DrawOptionsImpl",),
+ 0x8080BBFC:("FileSelect_DrawOptions",),
+ 0x8080BC20:("FileSelect_IncrementConfigMode",),
+ 0x8080BC44:("FileSelect_Noop1",),
+ 0x8080BC4C:("FileSelect_Noop2",),
+ 0x8080BC58:("FileSelect_InitModeUpdate",),
+ 0x8080BDAC:("FileSelect_InitModeDraw",),
+ 0x8080BDDC:("FileSelect_SetView",),
+ 0x8080BE60:("FileSelect_DrawTexQuadIA8",),
+ 0x8080C040:("FileSelect_FadeInMenuElements",),
+ 0x8080C228:("FileSelect_SplitNumber",),
+ 0x8080C29C:("FileSelect_StartFadeIn",),
+ 0x8080C324:("FileSelect_FinishFadeIn",),
+ 0x8080C3A8:("FileSelect_UpdateMainMenu",),
+ 0x8080D164:("FileSelect_UnusedCM31",),
+ 0x8080D170:("FileSelect_UnusedCMDelay",),
+ 0x8080D1BC:("FileSelect_RotateToNameEntry",),
+ 0x8080D220:("FileSelect_RotateToOptions",),
+ 0x8080D284:("FileSelect_RotateToMain",),
+ 0x8080D2EC:("FileSelect_PulsateCursor",),
+ 0x8080D3D0:("FileSelect_ConfigModeUpdate",),
+ 0x8080D40C:("FileSelect_SetWindowVtx",),
+ 0x8080D6D4:("FileSelect_SetWindowContentVtx",),
+ 0x8080F25C:("FileSelect_DrawFileInfo",),
+ 0x808108DC:("FileSelect_DrawWindowContents",),
+ 0x80811CB8:("FileSelect_ConfigModeDraw",),
+ 0x80812460:("FileSelect_FadeMainToSelect",),
+ 0x80812668:("FileSelect_MoveSelectedFileToTop",),
+ 0x80812760:("FileSelect_FadeInFileInfo",),
+ 0x80812840:("FileSelect_ConfirmFile",),
+ 0x80812980:("FileSelect_FadeOutFileInfo",),
+ 0x80812A6C:("FileSelect_MoveSelectedFileToSlot",),
+ 0x80812D44:("FileSelect_FadeOut",),
+ 0x80812D94:("FileSelect_LoadGame",),
+ 0x80812E94:("FileSelect_SelectModeUpdate",),
+ 0x80812ED0:("FileSelect_SelectModeDraw",),
0x8081313C:("FileSelect_UpdateAndDrawSkybox",),
0x80813268:("FileSelect_Main",),
- 0x80813908:("func_80813908",),
+ 0x80813908:("FileSelect_InitContext",),
0x80813C74:("FileSelect_Destroy",),
0x80813C98:("FileSelect_Init",),
0x80814EB0:("DayTelop_Update",),
@@ -4218,41 +4218,41 @@
0x808204AC:("KaleidoScope_UpdateMaskCursor",),
0x80820FA4:("KaleidoScope_UpdateMaskEquip",),
0x80821730:("KaleidoScope_UpdatePrompt",),
- 0x80821900:("func_80821900",),
- 0x8082192C:("func_8082192C",),
- 0x80821958:("func_80821958",),
+ 0x80821900:("Kaleido_LoadMapNameStatic",),
+ 0x8082192C:("Kaleido_LoadMapNameStaticLarge",),
+ 0x80821958:("Kaleido_LoadItemNameStatic",),
0x80821984:("KaleidoScope_MoveCursorToSpecialPos",),
- 0x80821A04:("func_80821A04",),
+ 0x80821A04:("KaleidoScope_MoveCursorFromSpecialPos",),
0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",),
- 0x80821CC4:("func_80821CC4",),
+ 0x80821CC4:("KaleidoScope_SwitchPage",),
0x80821D84:("KaleidoScope_HandlePageToggles",),
0x80821F30:("KaleidoScope_DrawPageSections",),
0x808221DC:("KaleidoScope_DrawPages",),
- 0x80823350:("func_80823350",),
+ 0x80823350:("KaleidoScope_DrawInfoPanel",),
0x80824738:("KaleidoScope_UpdateNamePanel",),
0x808248D0:("KaleidoScope_DrawOwlWarpMapPage",),
- 0x80824B90:("func_80824B90",),
+ 0x80824B90:("KaleidoScope_DrawOwlWarpInfoPanel",),
0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",),
0x8082585C:("KaleidoScope_UpdateSwitchPage",),
0x808259D4:("KaleidoScope_SetView",),
0x80825A50:("KaleidoScope_SetPageVertices",),
0x80825E28:("KaleidoScope_SetVertices",),
- 0x808274DC:("func_808274DC",),
- 0x80827A8C:("func_80827A8C",),
- 0x80827E08:("func_80827E08",),
+ 0x808274DC:("KaleidoScope_UpdateCursorSize",),
+ 0x80827A8C:("KaleidoScope_DrawCursor",),
+ 0x80827E08:("KaleidoScope_DrawGameOver",),
0x808283D8:("KaleidoScope_Draw",),
0x808286D8:("KaleidoScope_GrayOutTextureRGBA32",),
0x80828788:("KaleidoScope_UpdateOpening",),
0x8082895C:("KaleidoScope_Update",),
0x8082DA90:("func_8082DA90",),
- 0x8082DABC:("func_8082DABC",),
+ 0x8082DABC:("Player_StopHorizontalMovement",),
0x8082DAD4:("func_8082DAD4",),
0x8082DAFC:("func_8082DAFC",),
- 0x8082DB18:("func_8082DB18",),
- 0x8082DB3C:("func_8082DB3C",),
+ 0x8082DB18:("Player_AnimationPlayOnce",),
+ 0x8082DB3C:("Player_AnimationPlayLoop",),
0x8082DB60:("func_8082DB60",),
0x8082DB90:("func_8082DB90",),
- 0x8082DBC0:("func_8082DBC0",),
+ 0x8082DBC0:("Player_AnimationPlayOnceReverse",),
0x8082DC28:("func_8082DC28",),
0x8082DC38:("func_8082DC38",),
0x8082DC64:("func_8082DC64",),
@@ -4262,18 +4262,18 @@
0x8082DE50:("func_8082DE50",),
0x8082DE88:("func_8082DE88",),
0x8082DF2C:("func_8082DF2C",),
- 0x8082DF48:("func_8082DF48",),
- 0x8082DF8C:("func_8082DF8C",),
+ 0x8082DF48:("Player_RequestRumble",),
+ 0x8082DF8C:("Player_AnimSfx_PlayVoice",),
0x8082E00C:("func_8082E00C",),
- 0x8082E078:("func_8082E078",),
- 0x8082E094:("func_8082E094",),
- 0x8082E0CC:("func_8082E0CC",),
- 0x8082E0F4:("func_8082E0F4",),
- 0x8082E12C:("func_8082E12C",),
- 0x8082E188:("func_8082E188",),
- 0x8082E1BC:("func_8082E1BC",),
+ 0x8082E078:("Player_GetFloorSfx",),
+ 0x8082E094:("Player_AnimSfx_PlayFloor",),
+ 0x8082E0CC:("Player_GetFloorSfxByAge",),
+ 0x8082E0F4:("Player_AnimSfx_PlayFloorByAge",),
+ 0x8082E12C:("Player_AnimSfx_PlayFloorWalk",),
+ 0x8082E188:("Player_AnimSfx_PlayFloorJump",),
+ 0x8082E1BC:("Player_AnimSfx_PlayFloorLand",),
0x8082E1F0:("func_8082E1F0",),
- 0x8082E224:("func_8082E224",),
+ 0x8082E224:("Player_PlayAnimSfx",),
0x8082E438:("func_8082E438",),
0x8082E4A4:("func_8082E4A4",),
0x8082E514:("func_8082E514",),
@@ -4308,23 +4308,23 @@
0x8082EF54:("func_8082EF54",),
0x8082EF9C:("func_8082EF9C",),
0x8082EFE4:("func_8082EFE4",),
- 0x8082F02C:("func_8082F02C",),
- 0x8082F09C:("func_8082F09C",),
- 0x8082F0E4:("func_8082F0E4",),
+ 0x8082F02C:("Player_LerpEnvLighting",),
+ 0x8082F09C:("Player_ResetCylinder",),
+ 0x8082F0E4:("Player_SetCylinderForAttack",),
0x8082F164:("func_8082F164",),
0x8082F1AC:("func_8082F1AC",),
0x8082F43C:("func_8082F43C",),
0x8082F470:("func_8082F470",),
- 0x8082F524:("func_8082F524",),
+ 0x8082F524:("Player_ItemToItemAction",),
0x8082F594:("func_8082F594",),
0x8082F5A4:("func_8082F5A4",),
0x8082F5C0:("func_8082F5C0",),
0x8082F5FC:("func_8082F5FC",),
- 0x8082F62C:("func_8082F62C",),
+ 0x8082F62C:("Player_SpawnExplosive",),
0x8082F7F4:("func_8082F7F4",),
0x8082F8A0:("func_8082F8A0",),
0x8082F8BC:("func_8082F8BC",),
- 0x8082F938:("func_8082F938",),
+ 0x8082F938:("Player_OverrideBlureColors",),
0x8082FA5C:("func_8082FA5C",),
0x8082FB68:("func_8082FB68",),
0x8082FBE8:("func_8082FBE8",),
@@ -4359,7 +4359,7 @@
0x808313A8:("func_808313A8",),
0x808313F0:("func_808313F0",),
0x80831454:("func_80831454",),
- 0x80831494:("func_80831494",),
+ 0x80831494:("Player_SetAction",),
0x8083172C:("func_8083172C",),
0x80831760:("func_80831760",),
0x808317C4:("func_808317C4",),
@@ -4420,16 +4420,16 @@
0x808354A4:("func_808354A4",),
0x808355D8:("func_808355D8",),
0x8083562C:("func_8083562C",),
- 0x80835BC8:("func_80835BC8",),
+ 0x80835BC8:("Player_TranslateAndRotateY",),
0x80835BF8:("func_80835BF8",),
- 0x80835C64:("func_80835C64",),
+ 0x80835C64:("Player_SpawnFairy",),
0x80835CD8:("func_80835CD8",),
0x80835D2C:("func_80835D2C",),
0x80835D58:("func_80835D58",),
0x80835DF8:("func_80835DF8",),
- 0x80835EAC:("func_80835EAC",),
- 0x8083604C:("func_8083604C",),
- 0x80836258:("func_80836258",),
+ 0x80835EAC:("Player_Door_Staircase",),
+ 0x8083604C:("Player_Door_Sliding",),
+ 0x80836258:("Player_Door_Knob",),
0x808365DC:("func_808365DC",),
0x80836888:("func_80836888",),
0x8083692C:("func_8083692C",),
@@ -4442,7 +4442,7 @@
0x80836C70:("func_80836C70",),
0x80836D8C:("func_80836D8C",),
0x80836DC0:("func_80836DC0",),
- 0x80836EA0:("func_80836EA0",),
+ 0x80836EA0:("Player_RequestQuake",),
0x80836F10:("func_80836F10",),
0x808370D4:("func_808370D4",),
0x80837134:("func_80837134",),
@@ -4464,7 +4464,7 @@
0x808381F8:("func_808381F8",),
0x8083827C:("func_8083827C",),
0x8083868C:("func_8083868C",),
- 0x80838760:("func_80838760",),
+ 0x80838760:("Player_StopCutscene",),
0x808387A0:("func_808387A0",),
0x80838830:("func_80838830",),
0x808388B8:("func_808388B8",),
@@ -4500,11 +4500,11 @@
0x8083A844:("func_8083A844",),
0x8083A878:("func_8083A878",),
0x8083A98C:("func_8083A98C",),
- 0x8083AD04:("func_8083AD04",),
- 0x8083AD8C:("func_8083AD8C",),
- 0x8083ADB8:("func_8083ADB8",),
+ 0x8083AD04:("Player_InitMode_Telescope",),
+ 0x8083AD8C:("Player_InitMode_B",),
+ 0x8083ADB8:("Player_InitMode_D",),
0x8083ADF0:("func_8083ADF0",),
- 0x8083AE38:("func_8083AE38",),
+ 0x8083AE38:("Player_InitMode_F",),
0x8083AECC:("func_8083AECC",),
0x8083AF30:("func_8083AF30",),
0x8083AF8C:("func_8083AF8C",),
@@ -4557,7 +4557,7 @@
0x8083E958:("func_8083E958",),
0x8083E9C4:("func_8083E9C4",),
0x8083EA44:("func_8083EA44",),
- 0x8083EBD0:("func_8083EBD0",),
+ 0x8083EBD0:("Player_ChooseIdleAnim",),
0x8083EE60:("func_8083EE60",),
0x8083F144:("func_8083F144",),
0x8083F190:("func_8083F190",),
@@ -4571,7 +4571,7 @@
0x8083FCF0:("func_8083FCF0",),
0x8083FD80:("func_8083FD80",),
0x8083FE38:("func_8083FE38",),
- 0x8083FE90:("func_8083FE90",),
+ 0x8083FE90:("Player_RequestQuakeAndRumble",),
0x8083FEF4:("func_8083FEF4",),
0x8083FF30:("func_8083FF30",),
0x8083FFEC:("func_8083FFEC",),
@@ -4590,33 +4590,33 @@
0x80840F34:("func_80840F34",),
0x80840F90:("func_80840F90",),
0x808411D4:("func_808411D4",),
- 0x808412A0:("func_808412A0",),
- 0x808412BC:("func_808412BC",),
+ 0x808412A0:("Player_InitMode_0",),
+ 0x808412BC:("Player_InitMode_2",),
0x80841358:("func_80841358",),
- 0x80841408:("func_80841408",),
- 0x808414E0:("func_808414E0",),
- 0x80841528:("func_80841528",),
- 0x808415A0:("func_808415A0",),
- 0x808415E4:("func_808415E4",),
- 0x80841624:("func_80841624",),
+ 0x80841408:("Player_InitMode_1",),
+ 0x808414E0:("Player_InitMode_3",),
+ 0x80841528:("Player_InitMode_4",),
+ 0x808415A0:("Player_InitMode_7",),
+ 0x808415E4:("Player_InitMode_5",),
+ 0x80841624:("Player_InitMode_6",),
0x80841744:("func_80841744",),
- 0x8084182C:("func_8084182C",),
+ 0x8084182C:("Player_InitCommon",),
0x80841A50:("func_80841A50",),
0x80841AC4:("Player_Init",),
0x80842510:("func_80842510",),
0x808425B4:("func_808425B4",),
- 0x808426F0:("func_808426F0",),
+ 0x808426F0:("Player_SetDoAction",),
0x808430E0:("func_808430E0",),
0x80843178:("func_80843178",),
- 0x80843EC0:("func_80843EC0",),
+ 0x80843EC0:("Player_UpdateCamAndSeqModes",),
0x808442D8:("func_808442D8",),
0x808445C4:("func_808445C4",),
- 0x808446F4:("func_808446F4",),
+ 0x808446F4:("Player_DetectSecrets",),
0x80844784:("func_80844784",),
0x80844D80:("func_80844D80",),
- 0x80844EF8:("func_80844EF8",),
+ 0x80844EF8:("Player_UpdateCommon",),
0x808460B8:("Player_Update",),
- 0x808463C0:("func_808463C0",),
+ 0x808463C0:("Player_DrawGameplay",),
0x80846460:("func_80846460",),
0x80846528:("Player_Draw",),
0x808470D4:("Player_Destroy",),
@@ -4834,7 +4834,7 @@
0x80859AF8:("func_80859AF8",),
0x80859B28:("func_80859B28",),
0x80859B54:("func_80859B54",),
- 0x80859BA8:("func_80859BA8",),
+ 0x80859BA8:("Player_Cutscene_Translate",),
0x80859C60:("func_80859C60",),
0x80859CA0:("func_80859CA0",),
0x80859CE0:("func_80859CE0",),
@@ -4845,7 +4845,7 @@
0x80859F4C:("func_80859F4C",),
0x80859FCC:("func_80859FCC",),
0x80859FF4:("func_80859FF4",),
- 0x8085A04C:("func_8085A04C",),
+ 0x8085A04C:("Player_Cutscene_TranslateReverse",),
0x8085A120:("func_8085A120",),
0x8085A144:("func_8085A144",),
0x8085A19C:("func_8085A19C",),
@@ -4869,19 +4869,19 @@
0x8085AA60:("func_8085AA60",),
0x8085AA84:("func_8085AA84",),
0x8085AACC:("func_8085AACC",),
- 0x8085AB58:("func_8085AB58",),
- 0x8085ABA8:("func_8085ABA8",),
+ 0x8085AB58:("Player_Cutscene_SetPosAndYawToStart",),
+ 0x8085ABA8:("Player_Cutscene_8085ABA8",),
0x8085AC9C:("func_8085AC9C",),
0x8085AD5C:("func_8085AD5C",),
0x8085ADA0:("func_8085ADA0",),
0x8085B08C:("func_8085B08C",),
- 0x8085B134:("func_8085B134",),
+ 0x8085B134:("Player_StartFishing",),
0x8085B170:("func_8085B170",),
- 0x8085B1F0:("func_8085B1F0",),
+ 0x8085B1F0:("Player_GrabPlayer",),
0x8085B28C:("func_8085B28C",),
0x8085B384:("func_8085B384",),
- 0x8085B3E0:("func_8085B3E0",),
- 0x8085B460:("func_8085B460",),
+ 0x8085B3E0:("Player_InflictDamage",),
+ 0x8085B460:("Player_TalkWithPlayer",),
0x8085B74C:("func_8085B74C",),
0x8085B820:("func_8085B820",),
0x8085B854:("func_8085B854",),
@@ -6033,7 +6033,7 @@
0x808BCDF0:("ItemBHeart_Init",),
0x808BCEA8:("ItemBHeart_Destroy",),
0x808BCEB8:("ItemBHeart_Update",),
- 0x808BCF54:("func_808BCF54",),
+ 0x808BCF54:("ItemBHeart_UpdateModel",),
0x808BCFC4:("ItemBHeart_Draw",),
0x808BD1E0:("EnDekunuts_Init",),
0x808BD31C:("EnDekunuts_Destroy",),
@@ -8591,24 +8591,24 @@
0x8099BE48:("EnCrow_OverrideLimbDraw",),
0x8099BF20:("EnCrow_PostLimbDraw",),
0x8099BFA4:("EnCrow_Draw",),
- 0x8099C290:("func_8099C290",),
- 0x8099C328:("func_8099C328",),
- 0x8099C41C:("func_8099C41C",),
+ 0x8099C290:("EnCow_RotatePoint",),
+ 0x8099C328:("EnCow_SetColliderPos",),
+ 0x8099C41C:("EnCow_SetTailPos",),
0x8099C498:("EnCow_Init",),
0x8099C834:("EnCow_Destroy",),
- 0x8099C880:("func_8099C880",),
- 0x8099CAA8:("func_8099CAA8",),
- 0x8099CB20:("func_8099CB20",),
- 0x8099CB68:("func_8099CB68",),
- 0x8099CBCC:("func_8099CBCC",),
- 0x8099CC68:("func_8099CC68",),
- 0x8099CCF8:("func_8099CCF8",),
- 0x8099CDA0:("func_8099CDA0",),
- 0x8099CFAC:("func_8099CFAC",),
+ 0x8099C880:("EnCow_UpdateAnimation",),
+ 0x8099CAA8:("EnCow_TalkEnd",),
+ 0x8099CB20:("EnCow_GiveMilkEnd",),
+ 0x8099CB68:("EnCow_GiveMilkWait",),
+ 0x8099CBCC:("EnCow_GiveMilk",),
+ 0x8099CC68:("EnCow_CheckForEmptyBottle",),
+ 0x8099CCF8:("EnCow_Talk",),
+ 0x8099CDA0:("EnCow_Idle",),
+ 0x8099CFAC:("EnCow_DoTail",),
0x8099D144:("EnCow_Update",),
- 0x8099D3C0:("func_8099D3C0",),
- 0x8099D4AC:("func_8099D4AC",),
- 0x8099D4FC:("func_8099D4FC",),
+ 0x8099D3C0:("EnCow_UpdateTail",),
+ 0x8099D4AC:("EnCow_OverrideLimbDraw",),
+ 0x8099D4FC:("EnCow_PostLimbDraw",),
0x8099D53C:("EnCow_Draw",),
0x8099D59C:("func_8099D59C",),
0x8099D780:("OceffWipe4_Init",),
@@ -9675,76 +9675,76 @@
0x80A10368:("EnSob1_ZoraShopkeeper_Draw",),
0x80A104E4:("EnSob1_GoronShopkeeper_Draw",),
0x80A10608:("EnSob1_BombShopkeeper_Draw",),
- 0x80A10FD0:("func_80A10FD0",),
- 0x80A11144:("func_80A11144",),
- 0x80A1143C:("func_80A1143C",),
- 0x80A115B4:("func_80A115B4",),
- 0x80A118F8:("func_80A118F8",),
- 0x80A11BF8:("func_80A11BF8",),
- 0x80A11EC0:("func_80A11EC0",),
- 0x80A1203C:("func_80A1203C",),
- 0x80A1213C:("func_80A1213C",),
- 0x80A121F4:("func_80A121F4",),
- 0x80A1222C:("func_80A1222C",),
- 0x80A122EC:("func_80A122EC",),
- 0x80A123A0:("func_80A123A0",),
- 0x80A124A0:("func_80A124A0",),
- 0x80A124FC:("func_80A124FC",),
- 0x80A125BC:("func_80A125BC",),
- 0x80A12660:("func_80A12660",),
- 0x80A126BC:("func_80A126BC",),
- 0x80A12774:("func_80A12774",),
- 0x80A12868:("func_80A12868",),
- 0x80A12954:("func_80A12954",),
- 0x80A12A64:("func_80A12A64",),
- 0x80A12B78:("func_80A12B78",),
- 0x80A12C48:("func_80A12C48",),
- 0x80A12D6C:("func_80A12D6C",),
- 0x80A12DF4:("func_80A12DF4",),
- 0x80A12E80:("func_80A12E80",),
- 0x80A12FE8:("func_80A12FE8",),
- 0x80A131F8:("func_80A131F8",),
- 0x80A132C8:("func_80A132C8",),
- 0x80A133A8:("func_80A133A8",),
- 0x80A13400:("func_80A13400",),
- 0x80A134B0:("func_80A134B0",),
- 0x80A134F4:("func_80A134F4",),
- 0x80A13564:("func_80A13564",),
+ 0x80A10FD0:("EnGo_InitSteam",),
+ 0x80A11144:("EnGo_DrawSteam",),
+ 0x80A1143C:("EnGo_InitDust",),
+ 0x80A115B4:("EnGo_DrawDust",),
+ 0x80A118F8:("EnGo_InitSnow",),
+ 0x80A11BF8:("EnGo_UpdateSnow",),
+ 0x80A11EC0:("EnGo_DrawSnow",),
+ 0x80A1203C:("EnGo_UpdateEffects",),
+ 0x80A1213C:("EnGo_DrawEffects",),
+ 0x80A121F4:("EnGo_CanSnowballHurtPlayer",),
+ 0x80A1222C:("EnGo_IsFallingAsleep",),
+ 0x80A122EC:("EnGo_UpdateFocus",),
+ 0x80A123A0:("EnGo_UpdateSnowballCollider",),
+ 0x80A124A0:("EnGo_UpdateMedigoronCollider",),
+ 0x80A124FC:("EnGo_UpdateRolledUpCollider",),
+ 0x80A125BC:("EnGo_UpdateFrozenCollider",),
+ 0x80A12660:("EnGo_UpdateStandingCollider",),
+ 0x80A126BC:("EnGo_UpdateCollider",),
+ 0x80A12774:("EnGo_UpdateTalking",),
+ 0x80A12868:("EnGo_DetectCollisions",),
+ 0x80A12954:("EnGo_UpdateSpringArrivalCutscene",),
+ 0x80A12A64:("EnGo_UpdateAnimationToCurrent",),
+ 0x80A12B78:("EnGo_UpdateSfx",),
+ 0x80A12C48:("EnGo_ChangeAnim",),
+ 0x80A12D6C:("EnGo_UpdateEyes",),
+ 0x80A12DF4:("EnGo_UpdateShiverSurprisedAnimation",),
+ 0x80A12E80:("EnGo_UpdateGraveyardAttentionTargetAndReactions",),
+ 0x80A12FE8:("EnGo_UpdateRotationToTarget",),
+ 0x80A131F8:("EnGo_UpdateAttentionTargetAndReactions",),
+ 0x80A132C8:("EnGo_GravemakerIdle",),
+ 0x80A133A8:("EnGo_FrozenIdle",),
+ 0x80A13400:("EnGo_FindGravemaker",),
+ 0x80A134B0:("EnGo_UpdateMedigoronColliderRadius",),
+ 0x80A134F4:("EnGo_ChangeCutscene",),
+ 0x80A13564:("EnGo_HandleGatekeeperPoundCutscene",),
0x80A136B8:("EnGo_RequestQuake",),
- 0x80A13728:("func_80A13728",),
- 0x80A137C0:("func_80A137C0",),
- 0x80A139E4:("func_80A139E4",),
- 0x80A13B1C:("func_80A13B1C",),
- 0x80A13E80:("func_80A13E80",),
- 0x80A14018:("func_80A14018",),
- 0x80A14104:("func_80A14104",),
- 0x80A141D4:("func_80A141D4",),
- 0x80A1428C:("func_80A1428C",),
- 0x80A14324:("func_80A14324",),
- 0x80A143A8:("func_80A143A8",),
- 0x80A14430:("func_80A14430",),
- 0x80A1449C:("func_80A1449C",),
- 0x80A144F4:("func_80A144F4",),
- 0x80A145AC:("func_80A145AC",),
- 0x80A14668:("func_80A14668",),
- 0x80A146CC:("func_80A146CC",),
- 0x80A14798:("func_80A14798",),
- 0x80A149B0:("func_80A149B0",),
- 0x80A14B30:("func_80A14B30",),
- 0x80A14E14:("func_80A14E14",),
- 0x80A14E74:("func_80A14E74",),
- 0x80A14EB0:("func_80A14EB0",),
- 0x80A14FC8:("func_80A14FC8",),
- 0x80A153FC:("func_80A153FC",),
- 0x80A15684:("func_80A15684",),
- 0x80A157C4:("func_80A157C4",),
+ 0x80A13728:("EnGo_CreateGatekeeperPoundEffects",),
+ 0x80A137C0:("EnGo_DrawIceBlockWhenFrozen",),
+ 0x80A139E4:("EnGo_MakeSteam",),
+ 0x80A13B1C:("EnGo_HandleOpenShrineCutscene",),
+ 0x80A13E80:("EnGo_HandleGivePowderKegCutscene",),
+ 0x80A14018:("EnGo_ChangeToStretchingAnimation",),
+ 0x80A14104:("EnGo_ChangeToSpectatingAnimation",),
+ 0x80A141D4:("EnGo_ChangeToFrozenAnimation",),
+ 0x80A1428C:("EnGo_ChangeToSnowballAnimation",),
+ 0x80A14324:("EnGo_ChangeToCoveringEarsAnimation",),
+ 0x80A143A8:("EnGo_ChangeToShiveringAnimation",),
+ 0x80A14430:("EnGo_SetupAthletic",),
+ 0x80A1449C:("EnGo_SetupSpectator",),
+ 0x80A144F4:("EnGo_SetupGatekeeper",),
+ 0x80A145AC:("EnGo_SetupGraveyardGoron",),
+ 0x80A14668:("EnGo_SetupShrineGoron",),
+ 0x80A146CC:("EnGo_SetupMedigoron",),
+ 0x80A14798:("EnGo_SetupInitialAction",),
+ 0x80A149B0:("EnGo_Idle",),
+ 0x80A14B30:("EnGo_Sleep",),
+ 0x80A14E14:("EnGo_Frozen",),
+ 0x80A14E74:("EnGo_AwaitThaw",),
+ 0x80A14EB0:("EnGo_Thaw",),
+ 0x80A14FC8:("EnGo_HandleSpringArrivalCutscene",),
+ 0x80A153FC:("EnGo_Snowball",),
+ 0x80A15684:("EnGo_GetMsgEventScript",),
+ 0x80A157C4:("EnGo_Talk",),
0x80A1590C:("EnGo_Init",),
0x80A15960:("EnGo_Destroy",),
0x80A159B0:("EnGo_Update",),
- 0x80A15B80:("func_80A15B80",),
+ 0x80A15B80:("EnGo_Draw_NoSkeleton",),
0x80A15D04:("EnGo_OverrideLimbDraw",),
0x80A15E38:("EnGo_TransfromLimbDraw",),
- 0x80A15FEC:("func_80A15FEC",),
+ 0x80A15FEC:("EnGo_Draw",),
0x80A16D40:("EnRaf_ClearPixelTeeth",),
0x80A16D6C:("EnRaf_ClearPixelPetal",),
0x80A16D90:("EnRaf_Init",),
@@ -10217,27 +10217,27 @@
0x80A35DDC:("ObjBell_Draw",),
0x80A35FF0:("EnSyatekiOkuta_Init",),
0x80A3611C:("EnSyatekiOkuta_Destroy",),
- 0x80A36148:("func_80A36148",),
- 0x80A361B0:("func_80A361B0",),
- 0x80A361F4:("func_80A361F4",),
- 0x80A36260:("func_80A36260",),
- 0x80A362A8:("func_80A362A8",),
- 0x80A362F8:("func_80A362F8",),
- 0x80A36350:("func_80A36350",),
- 0x80A36360:("func_80A36360",),
- 0x80A363B4:("func_80A363B4",),
- 0x80A36444:("func_80A36444",),
- 0x80A36488:("func_80A36488",),
- 0x80A364C0:("func_80A364C0",),
- 0x80A36504:("func_80A36504",),
- 0x80A3657C:("func_80A3657C",),
- 0x80A365EC:("func_80A365EC",),
- 0x80A368E0:("func_80A368E0",),
- 0x80A36A90:("func_80A36A90",),
- 0x80A36AF8:("func_80A36AF8",),
+ 0x80A36148:("EnSyatekiOkuta_SpawnDust",),
+ 0x80A361B0:("EnSyatekiOkuta_SpawnSplash",),
+ 0x80A361F4:("EnSyatekiOkuta_IsHiddenByAnotherOctorok",),
+ 0x80A36260:("EnSyatekiOkuta_SetupAttachToShootingGalleryMan",),
+ 0x80A362A8:("EnSyatekiOkuta_AttachToShootingGalleryMan",),
+ 0x80A362F8:("EnSyatekiOkuta_SetupDoNothing",),
+ 0x80A36350:("EnSyatekiOkuta_DoNothing",),
+ 0x80A36360:("EnSyatekiOkuta_SetupAppear",),
+ 0x80A363B4:("EnSyatekiOkuta_Appear",),
+ 0x80A36444:("EnSyatekiOkuta_SetupFloat",),
+ 0x80A36488:("EnSyatekiOkuta_Float",),
+ 0x80A364C0:("EnSyatekiOkuta_SetupHide",),
+ 0x80A36504:("EnSyatekiOkuta_Hide",),
+ 0x80A3657C:("EnSyatekiOkuta_SetupDie",),
+ 0x80A365EC:("EnSyatekiOkuta_Die",),
+ 0x80A368E0:("EnSyatekiOkuta_UpdateCollision",),
+ 0x80A36A90:("EnSyatekiOkuta_CheckCollision",),
+ 0x80A36AF8:("EnSyatekiOkuta_CheckForSignal",),
0x80A36B9C:("EnSyatekiOkuta_Update",),
- 0x80A36CB0:("func_80A36CB0",),
- 0x80A370EC:("func_80A370EC",),
+ 0x80A36CB0:("EnSyatekiOkuta_UpdateHeadScale",),
+ 0x80A370EC:("EnSyatekiOkuta_GetSnoutScale",),
0x80A37294:("EnSyatekiOkuta_OverrideLimbDraw",),
0x80A3735C:("EnSyatekiOkuta_Draw",),
0x80A37ED0:("ObjShutter_Init",),
@@ -11338,28 +11338,28 @@
0x80A90468:("EnTest5_Destroy",),
0x80A90478:("EnTest5_HandleBottleAction",),
0x80A905A4:("EnTest5_Update",),
- 0x80A90730:("func_80A90730",),
+ 0x80A90730:("EnTest6_SetupCutscene",),
0x80A90C08:("EnTest6_EnableMotionBlur",),
0x80A90C34:("EnTest6_DisableMotionBlur",),
- 0x80A90C54:("func_80A90C54",),
- 0x80A90D20:("func_80A90D20",),
- 0x80A90D34:("func_80A90D34",),
- 0x80A90FC0:("func_80A90FC0",),
+ 0x80A90C54:("EnTest6_EnableWhiteFillScreen",),
+ 0x80A90D20:("EnTest6_DisableWhiteFillScreen",),
+ 0x80A90D34:("EnTest6_DrawAmmoDropDefault",),
+ 0x80A90FC0:("EnTest6_DrawAmmoDropRupee",),
0x80A91324:("EnTest6_SetupAction",),
0x80A91330:("EnTest6_Init",),
0x80A9149C:("EnTest6_Destroy",),
- 0x80A9156C:("func_80A9156C",),
- 0x80A91690:("func_80A91690",),
- 0x80A916F0:("func_80A916F0",),
- 0x80A91760:("func_80A91760",),
- 0x80A920C8:("func_80A920C8",),
- 0x80A92118:("func_80A92118",),
- 0x80A92188:("func_80A92188",),
+ 0x80A9156C:("EnTest6_StartCutscene",),
+ 0x80A91690:("EnTest6_SetupInvertedSoTCutscene",),
+ 0x80A916F0:("EnTest6_StopInvertedSoTCutscene",),
+ 0x80A91760:("EnTest6_InvertedSoTCutscene",),
+ 0x80A920C8:("EnTest6_SetupDoubleSoTCutscene",),
+ 0x80A92118:("EnTest6_StopDoubleSoTCutscene",),
+ 0x80A92188:("EnTest6_DoubleSoTCutscene",),
0x80A9292C:("EnTest6_Update",),
- 0x80A92950:("func_80A92950",),
- 0x80A93298:("func_80A93298",),
- 0x80A9369C:("func_80A9369C",),
- 0x80A939E8:("func_80A939E8",),
+ 0x80A92950:("EnTest6_SharedSoTCutscene",),
+ 0x80A93298:("EnTest6_DrawThreeDayResetSoTCutscene",),
+ 0x80A9369C:("EnTest6_DrawDoubleSoTCutscene",),
+ 0x80A939E8:("EnTest6_DrawInvertedSoTCutscene",),
0x80A93DE8:("EnTest6_Draw",),
0x80A94A30:("func_80A94A30",),
0x80A94A64:("func_80A94A64",),
@@ -11971,7 +11971,7 @@
0x80AC6740:("TransitionWipe3_Start",),
0x80AC687C:("TransitionWipe3_Init",),
0x80AC68A8:("TransitionWipe3_Destroy",),
- 0x80AC68B4:("func_80AC68B4",),
+ 0x80AC68B4:("TransitionWipe3_UpdateScrollY",),
0x80AC68E0:("TransitionWipe3_Update",),
0x80AC69F8:("TransitionWipe3_Draw",),
0x80AC6BE4:("TransitionWipe3_IsDone",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index 68c0933d3..06d554b09 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -71,9 +71,7 @@
0x80097F70:("__osTimerList","OSTimer*","",0x4),
0x80097F80:("D_80097F80","f32","",0x4),
0x80097F90:("D_80097F90","f32","",0x4),
- 0x80097FA0:("D_80097FA0","UNK_TYPE1","",0x1),
- 0x80097FA4:("D_80097FA4","UNK_TYPE1","",0x1),
- 0x80097FA5:("D_80097FA5","UNK_TYPE1","",0x1),
+ 0x80097FA0:("sCmds","UNK_TYPE1","",0x1),
0x80097FB0:("__osPfsLastChannel","s32","",0x4),
0x80097FC0:("osViModeNtscLan1","OSViMode","",0x50),
0x80098010:("osViModeMpalLan1","OSViMode","",0x50),
@@ -86,7 +84,7 @@
0x80098144:("udigs","u8","[]",0x14),
0x80098160:("__osViDevMgr","OSDevMgr","",0x1c),
0x8009817C:("__additional_scanline","UNK_TYPE4","",0x4),
- 0x80098180:("D_80098180","UNK_TYPE1","",0x1),
+ 0x80098180:("sDigitalTable","UNK_TYPE1","",0x1),
0x80098190:("D_80098190","char","[]",0x5),
0x80098198:("D_80098198","char","[]",0x5),
0x800981A0:("D_800981A0","char","[]",0x7),
@@ -338,7 +336,7 @@
0x8009CF18:("__osEepromTimer","OSTimer","",0x20),
0x8009CF38:("D_8009CF38","OSMesgQueue","",0x18),
0x8009CF50:("D_8009CF50","OSMesg","",0x4),
- 0x8009CF60:("D_8009CF60","UNK_TYPE1","",0x1),
+ 0x8009CF60:("sHandleStatus","UNK_TYPE1","",0x1),
0x8009CF70:("D_8009CF70","UNK_TYPE4","",0x4),
0x8009CF80:("__osThreadSave","OSThread","",0x1b0),
0x8009D130:("D_8009D130","OSPiHandle","",0x74),
@@ -905,11 +903,11 @@
0x801BB050:("sDebugDisplayLight1","Lights1","",0x24),
0x801BB068:("D_801BB068","UNK_TYPE2","",0x2),
0x801BB08C:("D_801BB08C","UNK_TYPE1","",0x1),
- 0x801BB090:("D_801BB090","UNK_TYPE4","",0x4),
- 0x801BB094:("D_801BB094","UNK_TYPE1","",0x1),
- 0x801BB0DC:("D_801BB0DC","UNK_TYPE1","",0x1),
- 0x801BB0FC:("D_801BB0FC","UNK_TYPE2","",0x2),
- 0x801BB100:("D_801BB100","UNK_TYPE1","",0x1),
+ 0x801BB090:("sDebugTextDrawFlags","UNK_TYPE4","",0x4),
+ 0x801BB094:("sDebugTextBuffer","UNK_TYPE1","",0x1),
+ 0x801BB0DC:("sDebugTextColors","UNK_TYPE1","",0x1),
+ 0x801BB0FC:("sDebugCamTextEntryCount","UNK_TYPE2","",0x2),
+ 0x801BB100:("sDebugCamTextColors","UNK_TYPE1","",0x1),
0x801BB124:("sCurTextId","UNK_TYPE2","",0x2),
0x801BB128:("sCurOcarinaAction","UNK_TYPE2","",0x2),
0x801BB12C:("gOpeningEntranceIndex","UNK_TYPE1","",0x1),
@@ -933,22 +931,12 @@
0x801BD8FC:("sFireObjColors","FireObjColors","[1]",0x08),
0x801BD904:("sFireObjLightParams","FireObjLightParams","[1]",0x08),
0x801BD910:("gGameStateOverlayTable","GameStateOverlay","[7]",0x150),
- 0x801BDA60:("graphNumGameStates","UNK_TYPE4","",0x4),
- 0x801BDA70:("D_801BDA70","UNK_TYPE2","",0x2),
- 0x801BDA74:("D_801BDA74","UNK_TYPE2","",0x2),
- 0x801BDA78:("D_801BDA78","UNK_TYPE2","",0x2),
- 0x801BDA7C:("D_801BDA7C","UNK_TYPE2","",0x2),
- 0x801BDA9C:("D_801BDA9C","UNK_TYPE4","",0x4),
- 0x801BDAA0:("D_801BDAA0","UNK_TYPE4","",0x4),
- 0x801BDAA4:("D_801BDAA4","UNK_TYPE4","",0x4),
- 0x801BDAA8:("D_801BDAA8","UNK_TYPE2","",0x2),
- 0x801BDAAA:("D_801BDAAA","UNK_TYPE2","",0x2),
- 0x801BDAAC:("D_801BDAAC","UNK_TYPE2","",0x2),
- 0x801BDAAE:("D_801BDAAE","UNK_TYPE2","",0x2),
- 0x801BDAB0:("D_801BDAB0","UNK_TYPE2","",0x2),
- 0x801BDAB2:("D_801BDAB2","UNK_TYPE2","",0x2),
- 0x801BDAB4:("D_801BDAB4","UNK_TYPE2","",0x2),
- 0x801BDAB6:("D_801BDAB6","UNK_TYPE2","",0x2),
+ 0x801BDA60:("gGraphNumGameStates","UNK_TYPE4","",0x4),
+ 0x801BDA70:("sHorseValidScenes","struct_801BDAA8","[11]",0x2C),
+ 0x801BDA9C:("gHorseIsMounted","s32","",0x4),
+ 0x801BDAA0:("D_801BDAA0","s32","",0x4),
+ 0x801BDAA4:("gHorsePlayedEponasSong","s32","",0x4),
+ 0x801BDAA8:("sHorseValidSceneLayers","struct_801BDAA8","[4]",0x10),
0x801BDAC0:("D_801BDAC0","UNK_TYPE4","",0x4),
0x801BDAC4:("D_801BDAC4","UNK_TYPE4","",0x4),
0x801BDAC8:("D_801BDAC8","UNK_TYPE4","",0x4),
@@ -998,10 +986,10 @@
0x801BE9F4:("sHeartsDDEnvColors","s16","[3][3]",0x12),
0x801BEA08:("sHeartsDDPrimFactors","s16","[3][3]",0x12),
0x801BEA1C:("sHeartsDDEnvFactors","s16","[3][3]",0x12),
- 0x801BEA30:("HeartTextures","UNK_TYPE1","",0x1),
- 0x801BEA70:("HeartDDTextures","UNK_TYPE1","",0x1),
- 0x801BEAB0:("posBindFuncs","LightsPosBindFunc","[3]",0xc),
- 0x801BEABC:("dirBindFuncs","LightsBindFunc","[3]",0xc),
+ 0x801BEA30:("sHeartTextures","UNK_TYPE1","",0x1),
+ 0x801BEA70:("sHeartDDTextures","UNK_TYPE1","",0x1),
+ 0x801BEAB0:("sPosBindFuncs","LightsPosBindFunc","[3]",0xc),
+ 0x801BEABC:("sDirBindFuncs","LightsBindFunc","[3]",0xc),
0x801BEAD0:("D_801BEAD0","s32","[4]",0x10),
0x801BEAE0:("D_801BEAE0","s32","[4]",0x10),
0x801BEAF0:("D_801BEAF0","u32","[4]",0x10),
@@ -1109,30 +1097,30 @@
0x801BFB1C:("sMagicArrowEffectsG","UNK_TYPE1","",0x1),
0x801BFB24:("sMagicArrowEffectsB","UNK_TYPE1","",0x1),
0x801BFB2C:("sThreeDayClockAlpha","UNK_TYPE2","",0x2),
- 0x801BFB30:("D_801BFB30","UNK_TYPE2","",0x2),
- 0x801BFB34:("D_801BFB34","UNK_TYPE2","",0x2),
+ 0x801BFB30:("sClockAlphaTimer1","UNK_TYPE2","",0x2),
+ 0x801BFB34:("sClockAlphaTimer2","UNK_TYPE2","",0x2),
0x801BFB38:("sThreeDayClockHours","UNK_TYPE1","",0x1),
0x801BFB6C:("sThreeDayClockHourTextures","UNK_TYPE1","",0x1),
- 0x801BFBCC:("D_801BFBCC","UNK_TYPE2","",0x2),
- 0x801BFBD0:("D_801BFBD0","UNK_TYPE2","",0x2),
- 0x801BFBD4:("D_801BFBD4","UNK_TYPE2","",0x2),
- 0x801BFBD8:("D_801BFBD8","UNK_TYPE2","",0x2),
- 0x801BFBDC:("D_801BFBDC","UNK_TYPE2","",0x2),
- 0x801BFBE0:("D_801BFBE0","UNK_TYPE2","",0x2),
- 0x801BFBE4:("D_801BFBE4","UNK_TYPE2","",0x2),
- 0x801BFBE8:("D_801BFBE8","UNK_TYPE2","",0x2),
- 0x801BFBEC:("D_801BFBEC","UNK_TYPE1","",0x1),
- 0x801BFBF0:("D_801BFBF0","UNK_TYPE1","",0x1),
- 0x801BFBF4:("D_801BFBF4","UNK_TYPE1","",0x1),
- 0x801BFBF8:("D_801BFBF8","UNK_TYPE1","",0x1),
- 0x801BFBFC:("D_801BFBFC","UNK_TYPE1","",0x1),
- 0x801BFC00:("D_801BFC00","UNK_TYPE1","",0x1),
- 0x801BFC04:("D_801BFC04","UNK_TYPE1","",0x1),
- 0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1),
- 0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1),
- 0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1),
+ 0x801BFBCC:("sClockInvDiamondPrimRed","UNK_TYPE2","",0x2),
+ 0x801BFBD0:("sClockInvDiamondPrimGreen","UNK_TYPE2","",0x2),
+ 0x801BFBD4:("sClockInvDiamondPrimBlue","UNK_TYPE2","",0x2),
+ 0x801BFBD8:("sClockInvDiamondEnvRed","UNK_TYPE2","",0x2),
+ 0x801BFBDC:("sClockInvDiamondEnvGreen","UNK_TYPE2","",0x2),
+ 0x801BFBE0:("sClockInvDiamondEnvBlue","UNK_TYPE2","",0x2),
+ 0x801BFBE4:("sClockInvDiamondTimer","UNK_TYPE2","",0x2),
+ 0x801BFBE8:("sClockInvDiamondTargetIndex","UNK_TYPE2","",0x2),
+ 0x801BFBEC:("sClockInvDiamondPrimRedTargets","UNK_TYPE1","",0x1),
+ 0x801BFBF0:("sClockInvDiamondPrimGreenTargets","UNK_TYPE1","",0x1),
+ 0x801BFBF4:("sClockInvDiamondPrimBlueTargets","UNK_TYPE1","",0x1),
+ 0x801BFBF8:("sClockInvDiamondEnvRedTargets","UNK_TYPE1","",0x1),
+ 0x801BFBFC:("sClockInvDiamondEnvGreenTargets","UNK_TYPE1","",0x1),
+ 0x801BFC00:("sClockInvDiamondEnvBlueTargets","UNK_TYPE1","",0x1),
+ 0x801BFC04:("sFinalHoursClockDigitsRedTargets","UNK_TYPE1","",0x1),
+ 0x801BFC08:("sFinalHoursClockFrameEnvRedTargets","UNK_TYPE1","",0x1),
+ 0x801BFC0C:("sFinalHoursClockFrameEnvGreenTargets","UNK_TYPE1","",0x1),
+ 0x801BFC10:("sFinalHoursClockFrameEnvBlueTargets","UNK_TYPE1","",0x1),
0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1),
- 0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1),
+ 0x801BFC40:("sFinalHoursDigitSlotPosXOffset","UNK_TYPE1","",0x1),
0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2),
0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC),
0x801BFC6C:("sPerfectLettersType2SpellingOffsetsX","UNK_TYPE4","",0x4),
@@ -1304,7 +1292,7 @@
0x801C0EE4:("D_801C0EE4","s16","",0x2),
0x801C0EE8:("D_801C0EE8","s16","",0x2),
0x801C0EEC:("D_801C0EEC","s16","",0x2),
- 0x801C0EF0:("sSetupDL","Gfx","[438]",0xdb0),
+ 0x801C0EF0:("gSetupDLs","Gfx","[438]",0xdb0),
0x801C1CA0:("sFillSetupDL","Gfx","[12]",0x60),
0x801C1D00:("gEmptyDL","Gfx","[1]",0x8),
0x801C1D10:("sZeroVec","Vec3f","",0xc),
@@ -1325,13 +1313,13 @@
0x801C212C:("gSceneIdsPerRegion","SceneIdList","[]",0x252),
0x801C2380:("sSceneIdsPerTingleMap","u16","[]",0x90),
0x801C2410:("gPlayerFormItemRestrictions","UNK_TYPE1","",0x1),
- 0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10),
+ 0x801C2650:("naviQuestHintFiles","RomFile","[2]",0x10),
0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
- 0x801C26A8:("sceneHeaderFuncTable","scene_header_func","[31]",0x7c),
+ 0x801C26A8:("sSceneCmdHandlers","scene_header_func","[31]",0x7c),
0x801C2730:("gPlayerFormObjectIndices","s16","[5]",0xA),
0x801C273C:("gObjectTableSize","ObjectId","",0x4),
0x801C2740:("gObjectTable","RomFile","[643]",0x1418),
- 0x801C3B60:("sSceneDrawDefaultDl","Gfx","[11]",0x58),
+ 0x801C3B60:("sSceneDrawDefaultDL","Gfx","[11]",0x58),
0x801C3BB8:("gSceneProcSceneDrawFuncs","SceneDrawConfigFunc","[8]",0x20),
0x801C3BD8:("gSceneProcDrawFuncs","scene_proc_draw_func","[6]",0x18),
0x801C3BF0:("D_801C3BF0","Gfx","[4]",0x20),
@@ -1920,16 +1908,16 @@
0x801C5EB0:("D_801C5EB0","UNK_TYPE4","",0x4),
0x801C5EC4:("D_801C5EC4","UNK_TYPE2","",0x2),
0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4),
- 0x801C5FC0:("D_801C5FC0","u32","[452]",0x710),
- 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2),
- 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4),
+ 0x801C5FC0:("sPersistentCycleSceneFlags","u32","[452]",0x710),
+ 0x801C66D0:("sPersistentCycleWeekEventRegs","UNK_TYPE2","",0x2),
+ 0x801C6798:("gSramSlotOffsets","UNK_TYPE4","",0x4),
0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1),
- 0x801C67C8:("D_801C67C8","s32","[10]",0x28),
- 0x801C67F0:("D_801C67F0","s32","[10]",0x28),
- 0x801C6818:("D_801C6818","s32","[10]",0x28),
- 0x801C6840:("D_801C6840","UNK_TYPE1","",0x1),
- 0x801C6850:("D_801C6850","UNK_TYPE1","",0x1),
- 0x801C6870:("D_801C6870","UNK_TYPE1","",0x1),
+ 0x801C67C8:("gFlashSaveStartPages","s32","[10]",0x28),
+ 0x801C67F0:("gFlashSaveNumPages","s32","[10]",0x28),
+ 0x801C6818:("gFlashSpecialSaveNumPages","s32","[10]",0x28),
+ 0x801C6840:("gFlashOwlSaveStartPages","UNK_TYPE1","",0x1),
+ 0x801C6850:("gFlashOwlSaveNumPages","UNK_TYPE1","",0x1),
+ 0x801C6870:("gFlashSaveSizes","UNK_TYPE1","",0x1),
0x801C6890:("D_801C6890","UNK_TYPE1","",0x1),
0x801C6898:("sSaveDefaultPlayerData","SavePlayerData","",0x28),
0x801C68C0:("sSaveDefaultItemEquips","ItemEquips","",0x22),
@@ -1952,9 +1940,9 @@
0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2),
0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2),
0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2),
- 0x801C6A98:("D_801C6A98","UNK_TYPE1","",0x1),
- 0x801C6AB8:("D_801C6AB8","UNK_TYPE1","",0x1),
- 0x801C6B28:("D_801C6B28","UNK_TYPE1","",0x1),
+ 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1),
+ 0x801C6AB8:("sBombersNotebookEventMessages","UNK_TYPE1","",0x1),
+ 0x801C6B28:("gBombersNotebookWeekEventFlags","UNK_TYPE1","",0x1),
0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1),
0x801CED40:("D_801CED40","UNK_TYPE1","",0x1),
0x801CFB08:("D_801CFB08","UNK_TYPE1","",0x1),
@@ -2110,19 +2098,14 @@
0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2),
0x801D0D60:("D_801D0D60","Input*","",0x4),
0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14),
- 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1),
- 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1),
- 0x801D1230:("D_801D1230","UNK_TYPE1","",0x1),
- 0x801D1234:("D_801D1234","UNK_TYPE1","",0x1),
- 0x801D1238:("D_801D1238","UNK_TYPE4","",0x4),
- 0x801D1244:("D_801D1244","UNK_TYPE1","",0x1),
- 0x801D12C0:("D_801D12C0","UNK_TYPE1","",0x1),
- 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0x1),
- 0x801D12D4:("D_801D12D4","UNK_TYPE1","",0x1),
- 0x801D12D8:("D_801D12D8","UNK_TYPE1","",0x1),
+ 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x4B0),
+ 0x801D1230:("D_801D1230","UNK_TYPE1","",0x8),
+ 0x801D1238:("D_801D1238","UNK_TYPE4","",0x1),
+ 0x801D1244:("D_801D1244","UNK_TYPE1","",0x8C),
+ 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0xC),
0x801D12DC:("D_801D12DC","UNK_TYPE1","",0x1),
- 0x801D1330:("D_801D1330","UNK_TYPE2","",0x2),
- 0x801D1342:("D_801D1342","UNK_TYPE1","",0x1),
+ 0x801D12E8:("D_801D12E8","UNK_TYPE1","",0x1),
+ 0x801D1330:("D_801D1330","UNK_TYPE1","",0x14),
0x801D1344:("D_801D1344","UNK_TYPE2","",0x2),
0x801D1368:("D_801D1368","UNK_TYPE1","",0x1),
0x801D1374:("D_801D1374","UNK_TYPE2","",0x2),
@@ -4032,7 +4015,7 @@
0x801F8010:("D_801F8010","struct_801F8010","",0x10),
0x801F8020:("sVisZbuf","VisZbuf","",0x10),
0x801F8030:("sMonoColors","VisMono","",0x18),
- 0x801F8048:("D_801F8048","UNK_TYPE1","",0x1),
+ 0x801F8048:("D_801F8048","ViMode","",0x88),
0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc),
0x801F80E0:("sGraphFaultClient","FaultClient","",0x10),
0x801F80F0:("gGfxMasterDL","Gfx*","",0x4),
@@ -4075,30 +4058,30 @@
0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1),
0x801FBB20:("gRDPTotalTime","UNK_TYPE1","",0x1),
0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1),
- 0x801FBB30:("D_801FBB30","OSViMode","",0x50),
+ 0x801FBB30:("sNotebookViMode","OSViMode","",0x50),
0x801FBB80:("gFramebuffers","u32*","[2]",0x8),
- 0x801FBB88:("D_801FBB88","OSViMode*","",0x4),
+ 0x801FBB88:("gActiveViMode","OSViMode*","",0x4),
0x801FBB8C:("gZBufferPtr","u16*","",0x4),
- 0x801FBB90:("D_801FBB90","UNK_TYPE4","",0x4),
+ 0x801FBB90:("gWorkBuffer","UNK_TYPE4","",0x4),
0x801FBB94:("gGfxSPTaskOutputBufferPtr","UNK_TYPE1","",0x1),
- 0x801FBB98:("gGfxSPTaskOutputBufferSize","UNK_TYPE1","",0x1),
- 0x801FBB9C:("D_801FBB9C","UNK_TYPE1","",0x1),
- 0x801FBBA0:("D_801FBBA0","UNK_TYPE1","",0x1),
- 0x801FBBA4:("gZBuffer","u16*","",0x4),
- 0x801FBBA8:("gWorkBuffer","u16**","",0x4),
- 0x801FBBAC:("gGfxSPTaskOutputBuffer","u16**","",0x4),
- 0x801FBBB0:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1),
- 0x801FBBB4:("D_801FBBB4","UNK_TYPE1","",0x1),
- 0x801FBBB8:("D_801FBBB8","UNK_TYPE1","",0x1),
- 0x801FBBBC:("D_801FBBBC","UNK_TYPE1","",0x1),
- 0x801FBBC0:("D_801FBBC0","UNK_TYPE1","",0x1),
- 0x801FBBC4:("gGfxSPTaskOutputBuffer2","UNK_TYPE1","",0x1),
- 0x801FBBC8:("gGfxSPTaskOutputBufferEnd2","UNK_TYPE1","",0x1),
- 0x801FBBCC:("D_801FBBCC","UNK_TYPE2","",0x2),
- 0x801FBBCE:("D_801FBBCE","UNK_TYPE2","",0x2),
- 0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1),
- 0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1),
- 0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1),
+ 0x801FBB98:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1),
+ 0x801FBB9C:("sCfbLoRes1","UNK_TYPE1","",0x1),
+ 0x801FBBA0:("sCfbLoRes0","UNK_TYPE1","",0x1),
+ 0x801FBBA4:("gZBufferLoRes","u16*","",0x4),
+ 0x801FBBA8:("gWorkBufferLoRes","u16**","",0x4),
+ 0x801FBBAC:("gGfxSPTaskOutputBufferLoRes","u16**","",0x4),
+ 0x801FBBB0:("gGfxSPTaskOutputBufferEndLoRes","UNK_TYPE1","",0x1),
+ 0x801FBBB4:("sCfbHiRes1","UNK_TYPE1","",0x1),
+ 0x801FBBB8:("sCfbHiRes0","UNK_TYPE1","",0x1),
+ 0x801FBBBC:("gZBufferHiRes","UNK_TYPE1","",0x1),
+ 0x801FBBC0:("gWorkBufferHiRes","UNK_TYPE1","",0x1),
+ 0x801FBBC4:("gGfxSPTaskOutputBufferHiRes","UNK_TYPE1","",0x1),
+ 0x801FBBC8:("gGfxSPTaskOutputBufferEndHiRes","UNK_TYPE1","",0x1),
+ 0x801FBBCC:("gCfbWidth","UNK_TYPE2","",0x2),
+ 0x801FBBCE:("gCfbHeight","UNK_TYPE2","",0x2),
+ 0x801FBBD0:("gCfbLeftAdjust","UNK_TYPE1","",0x1),
+ 0x801FBBD2:("gCfbUpperAdjust","UNK_TYPE1","",0x1),
+ 0x801FBBD4:("gSysCfbHiResEnabled","UNK_TYPE1","",0x1),
0x801FBBE0:("sDmaBuffer","u32","[2]",0x8),
0x801FBBF0:("D_801FBBF0","Vec3f","",0xc),
0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18),
@@ -4174,14 +4157,14 @@
0x801FBDE8:("D_801FBDE8","Vec3f","",0xc),
0x801FBE00:("sMatrixStack","MtxF*","",0x4),
0x801FBE04:("sCurrentMatrix","MtxF*","",0x4),
- 0x801FBE10:("D_801FBE10","UNK_TYPE1","",0x1),
- 0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1),
- 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1),
- 0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4),
+ 0x801FBE10:("sFlashromMesgQueue","UNK_TYPE1","",0x1),
+ 0x801FBE28:("sFlashromMesg","UNK_TYPE1","",0x1),
+ 0x801FBE2C:("sFlashromIsInit","UNK_TYPE1","",0x1),
+ 0x801FBE30:("sFlashromVendor","UNK_TYPE4","",0x4),
0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000),
0x801FCE38:("sSysFlashromStackInfo","StackEntry","",0x1c),
0x801FCE58:("sSysFlashromThread","OSThread","",0x1b0),
- 0x801FD008:("D_801FD008","s80185D40","",0x2c),
+ 0x801FD008:("sFlashromRequest","s80185D40","",0x2c),
0x801FD034:("D_801FD034","OSMesg","",0x4),
0x801FD040:("D_801FD040","s32","",0x10),
0x801FD050:("D_801FD050","OSIoMesg","",0x18),
@@ -4535,13 +4518,13 @@
0x80803FC8:("openingCutscenes","u32","[2]",0x8),
0x80813DF0:("D_80813DF0","UNK_TYPE1","",0x1),
0x80813F30:("D_80813F30","UNK_TYPE1","",0x1),
- 0x80814130:("D_80814130","UNK_TYPE1","",0x1),
- 0x80814170:("D_80814170","UNK_TYPE1","",0x1),
- 0x808141B0:("D_808141B0","UNK_TYPE1","",0x1),
+ 0x80814130:("gOptionsDividerTopVtx","UNK_TYPE1","",0x1),
+ 0x80814170:("gOptionsDividerMiddleVtx","UNK_TYPE1","",0x1),
+ 0x808141B0:("gOptionsDividerBottomVtx","UNK_TYPE1","",0x1),
0x808141F0:("D_808141F0","UNK_TYPE1","",0x1),
- 0x80814240:("D_80814240","UNK_TYPE2","",0x2),
+ 0x80814240:("sChooseFileYOffsets","UNK_TYPE2","",0x2),
0x8081424C:("D_8081424C","UNK_TYPE2","",0x2),
- 0x80814260:("D_80814260","UNK_TYPE2","",0x2),
+ 0x80814260:("sEraseDelayTimer","UNK_TYPE2","",0x2),
0x80814264:("D_80814264","UNK_TYPE2","",0x2),
0x8081426C:("D_8081426C","UNK_TYPE1","",0x1),
0x80814280:("D_80814280","UNK_TYPE1","",0x1),
@@ -4550,31 +4533,31 @@
0x80814404:("D_80814404","UNK_TYPE2","",0x2),
0x80814410:("D_80814410","UNK_TYPE2","",0x2),
0x8081441C:("D_8081441C","UNK_TYPE2","",0x2),
- 0x80814428:("D_80814428","UNK_TYPE4","",0x4),
- 0x80814430:("D_80814430","UNK_TYPE2","",0x2),
+ 0x80814428:("sBackspaceEndTextures","UNK_TYPE4","",0x4),
+ 0x80814430:("sBackspaceEndWidths","UNK_TYPE2","",0x2),
0x80814434:("D_80814434","UNK_TYPE2","",0x2),
0x8081444C:("D_8081444C","UNK_TYPE1","",0x1),
- 0x80814464:("D_80814464","UNK_TYPE4","",0x4),
- 0x8081448C:("D_8081448C","UNK_TYPE4","",0x4),
- 0x808144BC:("D_808144BC","UNK_TYPE2","",0x2),
- 0x808144C0:("D_808144C0","UNK_TYPE2","",0x2),
- 0x808144C4:("D_808144C4","UNK_TYPE2","",0x2),
- 0x808144C8:("D_808144C8","UNK_TYPE2","",0x2),
- 0x808144CC:("D_808144CC","UNK_TYPE2","",0x2),
- 0x808144D0:("D_808144D0","UNK_TYPE2","",0x2),
- 0x808144D4:("D_808144D4","UNK_TYPE2","",0x2),
- 0x808144D8:("D_808144D8","UNK_TYPE2","",0x2),
- 0x808144DC:("D_808144DC","UNK_TYPE1","",0x1),
- 0x808144E8:("D_808144E8","UNK_TYPE1","",0x1),
- 0x80814510:("D_80814510","Gfx","[5]",0x28),
- 0x80814538:("D_80814538","UNK_TYPE2","",0x2),
- 0x80814548:("D_80814548","UNK_TYPE2","",0x2),
- 0x80814550:("fileChooseSkyboxRotation","s16","",0x2),
- 0x80814554:("D_80814554","UNK_TYPE1","",0x1),
- 0x8081455C:("D_8081455C","UNK_TYPE1","",0x1),
+ 0x80814464:("gOptionsMenuHeaders","UNK_TYPE4","",0x4),
+ 0x8081448C:("gOptionsMenuSettings","UNK_TYPE4","",0x4),
+ 0x808144BC:("sCursorPrimRed","UNK_TYPE2","",0x2),
+ 0x808144C0:("sCursorPrimGreen","UNK_TYPE2","",0x2),
+ 0x808144C4:("sCursorPrimBlue","UNK_TYPE2","",0x2),
+ 0x808144C8:("sCursorEnvRed","UNK_TYPE2","",0x2),
+ 0x808144CC:("sCursorEnvGreen","UNK_TYPE2","",0x2),
+ 0x808144D0:("sCursorEnvBlue","UNK_TYPE2","",0x2),
+ 0x808144D4:("sCursorPulseDir","UNK_TYPE2","",0x2),
+ 0x808144D8:("sCursorFlashTimer","UNK_TYPE2","",0x2),
+ 0x808144DC:("sCursorPrimColors","UNK_TYPE1","",0x1),
+ 0x808144E8:("sCursorEnvColors","UNK_TYPE1","",0x1),
+ 0x80814510:("sScreenFillSetupDL","Gfx","[5]",0x28),
+ 0x80814538:("sFileInfoBoxPartWidths","UNK_TYPE2","",0x2),
+ 0x80814548:("sWindowContentColors","UNK_TYPE2","",0x2),
+ 0x80814550:("sFileSelectSkyboxRotation","s16","",0x2),
+ 0x80814554:("sWalletFirstDigit","UNK_TYPE1","",0x1),
+ 0x8081455C:("sEmptyName","UNK_TYPE1","",0x1),
0x80814564:("D_80814564","UNK_TYPE2","",0x2),
- 0x80814568:("D_80814568","UNK_TYPE","[45]",0xb4),
- 0x8081461C:("D_8081461C","s16","[2]",0x4),
+ 0x80814568:("sConfigModeUpdateFuncs","UNK_TYPE","[45]",0xb4),
+ 0x8081461C:("sCursorAlphaTargets","s16","[2]",0x4),
0x80814620:("D_80814620","UNK_TYPE2","",0x2),
0x80814628:("D_80814628","UNK_TYPE2","",0x2),
0x80814630:("D_80814630","UNK_TYPE2","",0x2),
@@ -4583,24 +4566,24 @@
0x8081464C:("D_8081464C","UNK_TYPE1","",0x1),
0x80814650:("D_80814650","UNK_TYPE1","",0x1),
0x80814654:("D_80814654","UNK_TYPE1","",0x1),
- 0x8081465C:("D_8081465C","UNK_TYPE4","",0x4),
- 0x8081466C:("D_8081466C","UNK_TYPE1","",0x1),
- 0x8081467C:("D_8081467C","UNK_TYPE1","",0x1),
- 0x8081468C:("D_8081468C","UNK_TYPE4","",0x4),
- 0x808146B4:("D_808146B4","UNK_TYPE1","",0x1),
- 0x808146C4:("D_808146C4","UNK_TYPE1","",0x1),
- 0x808146D8:("D_808146D8","UNK_TYPE1","",0x1),
- 0x808146EC:("D_808146EC","UNK_TYPE2","",0x2),
- 0x808146F8:("D_808146F8","UNK_TYPE2","",0x2),
- 0x80814704:("D_80814704","UNK_TYPE4","",0x4),
- 0x80814720:("D_80814720","UNK_TYPE1","",0x1),
- 0x80814744:("D_80814744","UNK_TYPE1","",0x1),
- 0x80814758:("D_80814758","UNK_TYPE4","",0x4),
- 0x80814764:("D_80814764","UNK_TYPE4","",0x4),
- 0x80814774:("D_80814774","UNK_TYPE1","",0x1),
- 0x8081477C:("D_8081477C","UNK_TYPE","[8]",0x20),
- 0x8081479C:("D_8081479C","UNK_TYPE","[3]",0xc),
- 0x808147A8:("D_808147A8","UNK_TYPE","[3]",0xc),
+ 0x8081465C:("sFileSelRemainsTextures","UNK_TYPE4","",0x4),
+ 0x8081466C:("sFileSelDayENGTextures","UNK_TYPE1","",0x1),
+ 0x8081467C:("sFileSelHeartPieceTextures","UNK_TYPE1","",0x1),
+ 0x8081468C:("sHeartTextures","UNK_TYPE4","",0x4),
+ 0x808146B4:("sHealthToQuarterHeartCount","UNK_TYPE1","",0x1),
+ 0x808146C4:("sFileSelRupeePrimColors","UNK_TYPE1","",0x1),
+ 0x808146D8:("sFileSelRupeeEnvColors","UNK_TYPE1","",0x1),
+ 0x808146EC:("sHeartPrimColors","UNK_TYPE2","",0x2),
+ 0x808146F8:("sHeartEnvColors","UNK_TYPE2","",0x2),
+ 0x80814704:("sFileInfoBoxTextures","UNK_TYPE4","",0x4),
+ 0x80814720:("sTitleLabels","UNK_TYPE1","",0x1),
+ 0x80814744:("sWarningLabels","UNK_TYPE1","",0x1),
+ 0x80814758:("sFileButtonTextures","UNK_TYPE4","",0x4),
+ 0x80814764:("sActionButtonTextures","UNK_TYPE4","",0x4),
+ 0x80814774:("sFileYOffsets","UNK_TYPE1","",0x1),
+ 0x8081477C:("sSelectModeUpdateFuncs","UNK_TYPE","[8]",0x20),
+ 0x8081479C:("gFileSelectDrawFuncs","UNK_TYPE","[3]",0xc),
+ 0x808147A8:("gFileSelectUpdateFuncs","UNK_TYPE","[3]",0xc),
0x808147B4:("D_808147B4","UNK_TYPE4","",0x4),
0x808147C0:("D_808147C0","UNK_TYPE2","",0x2),
0x808147C8:("D_808147C8","UNK_TYPE2","",0x2),
@@ -4613,13 +4596,13 @@
0x808147EC:("D_808147EC","f32","",0x4),
0x808147F0:("D_808147F0","f32","",0x4),
0x80814E80:("D_80814E80","UNK_TYPE1","",0x1),
- 0x80814E90:("D_80814E90","UNK_TYPE1","",0x1),
+ 0x80814E90:("sSelectedSetting","UNK_TYPE1","",0x1),
0x80815FF0:("D_80815FF0","u8","",0x1),
0x80815FF4:("sDayLeftTextures","TexturePtr","[4]",0x10),
0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10),
0x80816014:("sHoursLeftTextures","TexturePtr","[3]",0xC),
0x8082AED0:("sQuestRemainsColorTimerInit","UNK_TYPE1","",0x1),
- 0x8082AED8:("sQuestHpColorTimerInit","UNK_TYPE1","",0x1),
+ 0x8082AED8:("sQuestHpColorTimerInits","UNK_TYPE1","",0x1),
0x8082AEE0:("sQuestSongPlayedOcarinaButtonsNum","UNK_TYPE2","",0x2),
0x8082AEE4:("sQuestSongPlayedOcarinaButtons","UNK_TYPE1","",0x1),
0x8082AEF0:("sQuestSongPlayedOcarinaButtonsAlpha","UNK_TYPE2","",0x2),
@@ -4725,7 +4708,7 @@
0x8082B918:("sPauseCursorLeftX","UNK_TYPE2","",0x2),
0x8082B91C:("sPauseCursorRightX","UNK_TYPE2","",0x2),
0x8082B920:("D_8082B920","UNK_TYPE2","",0x2),
- 0x8082B924:("D_8082B924","UNK_TYPE2","",0x2),
+ 0x8082B924:("sPauseZRCursorColorTimerInits","UNK_TYPE2","",0x2),
0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2),
0x8082B948:("sCursorPrimColorTarget","UNK_TYPE2","",0x2),
0x8082B96C:("sCursorEnvColorTarget","UNK_TYPE2","",0x2),
@@ -4733,12 +4716,12 @@
0x8082B994:("sCursorColorTargetIndex","UNK_TYPE2","",0x2),
0x8082B998:("D_8082B998","UNK_TYPE1","",0x1),
0x8082B9A8:("D_8082B9A8","UNK_TYPE1","",0x1),
- 0x8082B9B8:("D_8082B9B8","UNK_TYPE1","",0x1),
- 0x8082B9C8:("D_8082B9C8","UNK_TYPE2","",0x2),
- 0x8082B9CC:("D_8082B9CC","UNK_TYPE2","",0x2),
- 0x8082B9D0:("D_8082B9D0","UNK_TYPE1","",0x1),
- 0x8082B9E0:("D_8082B9E0","UNK_TYPE2","",0x2),
- 0x8082B9E4:("D_8082B9E4","UNK_TYPE2","",0x2),
+ 0x8082B9B8:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1),
+ 0x8082B9C8:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2),
+ 0x8082B9CC:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2),
+ 0x8082B9D0:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1),
+ 0x8082B9E0:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2),
+ 0x8082B9E4:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2),
0x8082B9E8:("sVtxPageMaskQuadsX","UNK_TYPE1","",0x1),
0x8082B9EC:("sVtxPageItemQuadsX","UNK_TYPE1","",0x1),
0x8082B9F0:("sVtxPageMapDungeonQuadsX","UNK_TYPE1","",0x1),
@@ -4770,17 +4753,17 @@
0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2),
0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2),
0x8082BC64:("sQuestVtxHeights","UNK_TYPE2","",0x2),
- 0x8082BCB4:("D_8082BCB4","UNK_TYPE1","",0x1),
- 0x8082BCCC:("D_8082BCCC","UNK_TYPE1","",0x1),
- 0x8082BCDC:("D_8082BCDC","UNK_TYPE1","",0x1),
- 0x8082BD08:("D_8082BD08","UNK_TYPE1","",0x1),
- 0x8082BD34:("D_8082BD34","UNK_TYPE1","",0x1),
- 0x8082BD5C:("D_8082BD5C","UNK_TYPE1","",0x1),
- 0x8082BD84:("D_8082BD84","UNK_TYPE1","",0x1),
- 0x8082BDA8:("D_8082BDA8","UNK_TYPE1","",0x1),
- 0x8082BDCC:("D_8082BDCC","UNK_TYPE1","",0x1),
- 0x8082BE28:("D_8082BE28","UNK_TYPE1","",0x1),
- 0x8082BE84:("D_8082BE84","UNK_TYPE2","",0x2),
+ 0x8082BCB4:("sItemMaskCursorsX","UNK_TYPE1","",0x1),
+ 0x8082BCCC:("sItemMaskCursorsY","UNK_TYPE1","",0x1),
+ 0x8082BCDC:("sWorldMapCursorsX","UNK_TYPE1","",0x1),
+ 0x8082BD08:("sWorldMapCursorsY","UNK_TYPE1","",0x1),
+ 0x8082BD34:("sOwlWarpWorldMapCursorsX","UNK_TYPE1","",0x1),
+ 0x8082BD5C:("sOwlWarpWorldMapCursorsY","UNK_TYPE1","",0x1),
+ 0x8082BD84:("sDungeonMapCursorsX","UNK_TYPE1","",0x1),
+ 0x8082BDA8:("sDungeonMapCursorsY","UNK_TYPE1","",0x1),
+ 0x8082BDCC:("sQuestStatusCursorsX","UNK_TYPE1","",0x1),
+ 0x8082BE28:("sQuestStatusCursorsY","UNK_TYPE1","",0x1),
+ 0x8082BE84:("sGameOverUlt","UNK_TYPE2","",0x2),
0x8082BE88:("sCursorPointsToOcarinaModes","UNK_TYPE1","",0x1),
0x8082BE9C:("sUnpausedHudVisibility","UNK_TYPE2","",0x2),
0x8082BEA0:("sNextMainState","UNK_TYPE2","",0x2),
@@ -4902,72 +4885,29 @@
0x8082C0E4:("jtbl_8082C0E4","UNK_PTR","",0x4),
0x8082C148:("jtbl_8082C148","UNK_PTR","",0x4),
0x8082C18C:("jtbl_8082C18C","UNK_PTR","",0x4),
- 0x8082DA50:("D_8082DA50","UNK_TYPE1","",0x1),
- 0x8082DA52:("D_8082DA52","UNK_TYPE1","",0x1),
- 0x8082DA54:("D_8082DA54","UNK_TYPE1","",0x1),
- 0x8082DA56:("D_8082DA56","UNK_TYPE1","",0x1),
+ 0x8082DA50:("sPauseZRCursorRed","UNK_TYPE1","",0x1),
+ 0x8082DA52:("sPauseZRCursorGreen","UNK_TYPE1","",0x1),
+ 0x8082DA54:("sPauseZRCursorBlue","UNK_TYPE1","",0x1),
+ 0x8082DA56:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1),
0x8082DA58:("sUnpausedButtonStatus","UNK_TYPE1","",0x1),
- 0x8082DA60:("D_8082DA60","f32","",0x4),
+ 0x8082DA60:("sCursorCirclesX","f32","",0x4),
0x8082DA64:("D_8082DA64","f32","",0x4),
0x8082DA68:("D_8082DA68","f32","",0x4),
0x8082DA6C:("D_8082DA6C","f32","",0x4),
- 0x8082DA70:("D_8082DA70","f32","",0x4),
+ 0x8082DA70:("sCursorCirclesY","f32","",0x4),
0x8082DA74:("D_8082DA74","f32","",0x4),
0x8082DA78:("D_8082DA78","f32","",0x4),
0x8082DA7C:("D_8082DA7C","f32","",0x4),
- 0x8082DA80:("D_8082DA80","UNK_TYPE1","",0x1),
- 0x8082DA82:("D_8082DA82","UNK_TYPE1","",0x1),
- 0x8082DA84:("D_8082DA84","UNK_TYPE1","",0x1),
- 0x8082DA86:("D_8082DA86","UNK_TYPE1","",0x1),
+ 0x8082DA80:("sPauseZRCursorRed","UNK_TYPE1","",0x1),
+ 0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1),
+ 0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1),
+ 0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1),
0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1),
0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1),
0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1),
- 0x8085BA38:("D_8085BA38","UNK_TYPE1","",0x1),
- 0x8085BE84:("D_8085BE84","UNK_TYPE1","",0x1),
- 0x8085BE9C:("D_8085BE9C","UNK_TYPE1","",0x1),
- 0x8085BEB4:("D_8085BEB4","UNK_TYPE1","",0x1),
- 0x8085BECC:("D_8085BECC","UNK_TYPE1","",0x1),
- 0x8085BEE4:("D_8085BEE4","UNK_TYPE1","",0x1),
- 0x8085BEFC:("D_8085BEFC","UNK_TYPE1","",0x1),
- 0x8085BF14:("D_8085BF14","UNK_TYPE1","",0x1),
- 0x8085BF44:("D_8085BF44","UNK_TYPE1","",0x1),
- 0x8085BF5C:("D_8085BF5C","UNK_TYPE1","",0x1),
- 0x8085BF74:("D_8085BF74","UNK_TYPE1","",0x1),
- 0x8085BF8C:("D_8085BF8C","UNK_TYPE1","",0x1),
- 0x8085BFA4:("D_8085BFA4","UNK_TYPE1","",0x1),
- 0x8085BFBC:("D_8085BFBC","UNK_TYPE1","",0x1),
- 0x8085BFD4:("D_8085BFD4","UNK_TYPE1","",0x1),
- 0x8085BFEC:("D_8085BFEC","UNK_TYPE1","",0x1),
- 0x8085C004:("D_8085C004","UNK_TYPE1","",0x1),
- 0x8085C01C:("D_8085C01C","UNK_TYPE1","",0x1),
- 0x8085C034:("D_8085C034","UNK_TYPE1","",0x1),
- 0x8085C04C:("D_8085C04C","UNK_TYPE1","",0x1),
- 0x8085C064:("D_8085C064","UNK_TYPE1","",0x1),
- 0x8085C07C:("D_8085C07C","UNK_TYPE1","",0x1),
- 0x8085C094:("D_8085C094","UNK_TYPE1","",0x1),
- 0x8085C0C4:("D_8085C0C4","UNK_TYPE1","",0x1),
- 0x8085C0DC:("D_8085C0DC","UNK_TYPE1","",0x1),
- 0x8085C0F4:("D_8085C0F4","UNK_TYPE1","",0x1),
- 0x8085C10C:("D_8085C10C","UNK_TYPE1","",0x1),
- 0x8085C124:("D_8085C124","UNK_TYPE1","",0x1),
- 0x8085C13C:("D_8085C13C","UNK_TYPE1","",0x1),
- 0x8085C154:("D_8085C154","UNK_TYPE1","",0x1),
- 0x8085C16C:("D_8085C16C","UNK_TYPE1","",0x1),
- 0x8085C184:("D_8085C184","UNK_TYPE1","",0x1),
- 0x8085C19C:("D_8085C19C","UNK_TYPE1","",0x1),
- 0x8085C1B4:("D_8085C1B4","UNK_TYPE1","",0x1),
- 0x8085C1CC:("D_8085C1CC","UNK_TYPE1","",0x1),
- 0x8085C1E4:("D_8085C1E4","UNK_TYPE1","",0x1),
- 0x8085C1FC:("D_8085C1FC","UNK_TYPE1","",0x1),
- 0x8085C214:("D_8085C214","UNK_TYPE1","",0x1),
- 0x8085C22C:("D_8085C22C","UNK_TYPE1","",0x1),
- 0x8085C244:("D_8085C244","UNK_TYPE1","",0x1),
- 0x8085C25C:("D_8085C25C","UNK_TYPE1","",0x1),
- 0x8085C274:("D_8085C274","UNK_TYPE1","",0x1),
- 0x8085C28C:("D_8085C28C","UNK_TYPE1","",0x1),
- 0x8085C2A4:("D_8085C2A4","UNK_TYPE4","",0x4),
- 0x8085C2A8:("D_8085C2A8","UNK_TYPE4","",0x4),
- 0x8085C2AC:("D_8085C2AC","UNK_TYPE4","",0x4),
+ 0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1),
+ 0x8085BE84:("D_8085BE84","LinkAnimationHeader*","[264]",0x420),
+ 0x8085C2A4:("D_8085C2A4","struct_8085C2A4","[6]",0x48),
0x8085C2EC:("D_8085C2EC","UNK_TYPE1","",0x1),
0x8085C318:("D_8085C318","UNK_TYPE1","",0x1),
0x8085C344:("D_8085C344","UNK_TYPE1","",0x1),
@@ -4975,9 +4915,8 @@
0x8085C3E4:("D_8085C3E4","f32","",0x4),
0x8085C3E8:("D_8085C3E8","f32","",0x4),
0x8085C3EC:("D_8085C3EC","UNK_TYPE2","",0x2),
- 0x8085C3F4:("D_8085C3F4","UNK_TYPE1","",0x1),
- 0x8085C84C:("D_8085C84C","UNK_TYPE4","",0x4),
- 0x8085C850:("D_8085C850","UNK_TYPE4","",0x4),
+ 0x8085C3F4:("sGetItemTable","GetItemEntry","[0xB9]",0x456),
+ 0x8085C84C:("sPlayerIdleAnimations","UNK_TYPE4","",0x78),
0x8085C8C4:("D_8085C8C4","UNK_TYPE1","",0x1),
0x8085C8C8:("D_8085C8C8","UNK_TYPE1","",0x1),
0x8085C8CC:("D_8085C8CC","UNK_TYPE1","",0x1),
@@ -4988,19 +4927,17 @@
0x8085C90C:("D_8085C90C","UNK_TYPE1","",0x1),
0x8085C91C:("D_8085C91C","UNK_TYPE1","",0x1),
0x8085C924:("D_8085C924","UNK_TYPE1","",0x1),
- 0x8085C928:("D_8085C928","UNK_TYPE1","",0x1),
- 0x8085C938:("D_8085C938","UNK_TYPE1","",0x1),
+ 0x8085C928:("D_8085C928","UNK_TYPE1","",0x14),
+ 0x8085C93C:("D_8085C93C","UNK_TYPE1","",0x1),
0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1),
- 0x8085C98C:("D_8085C98C","UNK_TYPE1","",0x1),
- 0x8085C99C:("D_8085C99C","UNK_TYPE1","",0x1),
+ 0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1),
+ 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1),
0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4),
0x8085CB3C:("D_8085CB3C","UNK_PTR","",0x4),
0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1),
- 0x8085CD00:("D_8085CD00","UNK_TYPE1","",0x1),
- 0x8085CD24:("D_8085CD24","UNK_TYPE1","",0x1),
- 0x8085CD30:("D_8085CD30","UNK_TYPE1","",0x1),
- 0x8085CE30:("D_8085CE30","UNK_TYPE1","",0x1),
- 0x8085CE60:("D_8085CE60","UNK_TYPE1","",0x1),
+ 0x8085CD00:("D_8085CD00","s8","[36]",0x24),
+ 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1),
+ 0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220),
0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1),
0x8085CF58:("D_8085CF58","UNK_TYPE1","",0x1),
0x8085CF60:("D_8085CF60","UNK_TYPE1","",0x1),
@@ -5009,10 +4946,10 @@
0x8085CF78:("D_8085CF78","UNK_TYPE1","",0x1),
0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1),
0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1),
- 0x8085CF88:("D_8085CF88","UNK_TYPE1","",0x1),
- 0x8085CFA8:("D_8085CFA8","UNK_TYPE2","",0x2),
- 0x8085CFAE:("D_8085CFAE","UNK_TYPE1","",0x1),
- 0x8085CFB8:("D_8085CFB8","UNK_TYPE1","",0x1),
+ 0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20),
+ 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8),
+ 0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1),
+ 0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4),
0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1),
0x8085CFC4:("D_8085CFC4","UNK_TYPE1","",0x1),
0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1),
@@ -5032,47 +4969,42 @@
0x8085D050:("D_8085D050","UNK_TYPE1","",0x1),
0x8085D054:("D_8085D054","UNK_PTR","",0x4),
0x8085D090:("D_8085D090","UNK_TYPE1","",0x1),
- 0x8085D094:("D_8085D094","UNK_TYPE1","",0x1),
- 0x8085D097:("D_8085D097","UNK_TYPE1","",0x1),
+ 0x8085D094:("D_8085D094","UNK_TYPE1","",0x6),
0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4),
0x8085D0D4:("D_8085D0D4","UNK_TYPE1","",0x1),
0x8085D0E4:("D_8085D0E4","UNK_TYPE1","",0x1),
0x8085D0F4:("D_8085D0F4","UNK_TYPE4","",0x4),
- 0x8085D0F8:("D_8085D0F8","UNK_TYPE1","",0x1),
+ 0x8085D0F8:("sReturnEntranceGroupData","s16","[1]",0x2),
+ 0x8085D0FA:("sReturnEntranceGroupIndices","u8","[1]",0x1),
0x8085D100:("D_8085D100","UNK_TYPE1","",0x1),
- 0x8085D10C:("D_8085D10C","f32","",0x4),
- 0x8085D114:("D_8085D114","f32","",0x4),
+ 0x8085D10C:("D_8085D10C","Vec3f","",0xC),
0x8085D118:("D_8085D118","UNK_TYPE1","",0x1),
0x8085D124:("D_8085D124","UNK_TYPE1","",0x1),
- 0x8085D130:("D_8085D130","UNK_TYPE1","",0x1),
- 0x8085D134:("D_8085D134","f32","",0x4),
- 0x8085D13C:("D_8085D13C","UNK_TYPE1","",0x1),
+ 0x8085D130:("D_8085D130","Vec3f","",0xC),
+ 0x8085D13C:("sFallImpactInfos","UNK_TYPE1","",0x1),
0x8085D148:("D_8085D148","UNK_TYPE1","",0x1),
0x8085D154:("D_8085D154","UNK_TYPE1","",0x1),
0x8085D160:("D_8085D160","UNK_TYPE1","",0x1),
- 0x8085D174:("D_8085D174","UNK_TYPE1","",0x1),
+ 0x8085D174:("sPlayerMass","u8","[5]",0x5),
0x8085D17C:("D_8085D17C","UNK_TYPE1","",0x1),
0x8085D190:("D_8085D190","UNK_TYPE1","",0x1),
0x8085D1A4:("D_8085D1A4","UNK_TYPE1","",0x1),
0x8085D1F8:("D_8085D1F8","UNK_TYPE1","",0x1),
0x8085D200:("D_8085D200","UNK_TYPE4","",0x4),
0x8085D218:("D_8085D218","UNK_TYPE1","",0x1),
- 0x8085D224:("D_8085D224","UNK_TYPE1","",0x1),
- 0x8085D23C:("D_8085D23C","UNK_TYPE1","",0x1),
- 0x8085D252:("D_8085D252","UNK_TYPE1","",0x1),
+ 0x8085D224:("D_8085D224","UNK_TYPE1","",0x30),
+ 0x8085D254:("D_8085D254","u16","[4]",0x8),
0x8085D25C:("D_8085D25C","UNK_TYPE1","",0x1),
0x8085D264:("D_8085D264","UNK_TYPE1","",0x1),
0x8085D26C:("D_8085D26C","UNK_TYPE1","",0x1),
0x8085D270:("D_8085D270","UNK_TYPE1","",0x1),
- 0x8085D27C:("D_8085D27C","f32","",0x4),
- 0x8085D284:("D_8085D284","f32","",0x4),
- 0x8085D288:("D_8085D288","UNK_TYPE1","",0x1),
- 0x8085D28C:("D_8085D28C","f32","",0x4),
+ 0x8085D27C:("D_8085D27C","Vec3f","",0xC),
+ 0x8085D288:("D_8085D288","Vec3f","",0xC),
0x8085D294:("D_8085D294","UNK_TYPE1","",0x1),
0x8085D2A4:("D_8085D2A4","UNK_TYPE1","",0x1),
0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1),
0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1),
- 0x8085D2C0:("D_8085D2C0","ActorInitVar","",0x4),
+ 0x8085D2C0:("sInitChain","ActorInitVar","",0x4),
0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4),
0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4),
0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24),
@@ -5082,9 +5014,7 @@
0x8085D340:("D_8085D340","UNK_TYPE1","",0x1),
0x8085D34C:("D_8085D34C","UNK_TYPE1","",0x1),
0x8085D354:("D_8085D354","UNK_TYPE1","",0x1),
- 0x8085D358:("D_8085D358","UNK_TYPE1","",0x1),
- 0x8085D35C:("D_8085D35C","f32","",0x4),
- 0x8085D360:("D_8085D360","f32","",0x4),
+ 0x8085D358:("D_8085D358","Vec3f","",0xC),
0x8085D364:("D_8085D364","UNK_TYPE1","",0x1),
0x8085D370:("D_8085D370","UNK_TYPE1","",0x1),
0x8085D37C:("D_8085D37C","UNK_TYPE1","",0x1),
@@ -5094,8 +5024,8 @@
0x8085D3F4:("D_8085D3F4","UNK_TYPE1","",0x1),
0x8085D3F8:("D_8085D3F8","UNK_TYPE1","",0x1),
0x8085D3FC:("D_8085D3FC","UNK_TYPE4","",0x4),
- 0x8085D404:("D_8085D404","UNK_TYPE1","",0x1),
- 0x8085D410:("D_8085D410","UNK_TYPE1","",0x1),
+ 0x8085D404:("sWaterConveyorSpeeds","UNK_TYPE1","",0x1),
+ 0x8085D410:("sFloorConveyorSpeeds","UNK_TYPE1","",0x1),
0x8085D41C:("D_8085D41C","UNK_TYPE1","",0x1),
0x8085D428:("D_8085D428","UNK_TYPE1","",0x1),
0x8085D450:("D_8085D450","UNK_TYPE1","",0x1),
@@ -5113,32 +5043,28 @@
0x8085D574:("D_8085D574","UNK_TYPE4","",0x4),
0x8085D580:("D_8085D580","UNK_TYPE1","",0x1),
0x8085D584:("D_8085D584","UNK_TYPE1","",0x1),
- 0x8085D588:("D_8085D588","UNK_TYPE1","",0x1),
- 0x8085D5A0:("D_8085D5A0","UNK_TYPE1","",0x1),
- 0x8085D5B8:("D_8085D5B8","UNK_TYPE1","",0x1),
+ 0x8085D588:("D_8085D588","Vec3f","[2]",0x18),
+ 0x8085D5A0:("D_8085D5A0","Vec3f","[2]",0x18),
+ 0x8085D5B8:("D_8085D5B8","Vec3f","[2]",0x18),
0x8085D5D0:("D_8085D5D0","UNK_TYPE1","",0x1),
0x8085D5DC:("D_8085D5DC","UNK_TYPE1","",0x1),
0x8085D5E0:("D_8085D5E0","UNK_TYPE1","",0x1),
0x8085D5E4:("D_8085D5E4","UNK_TYPE1","",0x1),
- 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0x1),
- 0x8085D5FA:("D_8085D5FA","UNK_TYPE1","",0x1),
- 0x8085D604:("D_8085D604","UNK_TYPE1","",0x1),
- 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x1),
- 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x1),
- 0x8085D62C:("D_8085D62C","f32","",0x4),
- 0x8085D630:("D_8085D630","f32","",0x4),
- 0x8085D634:("D_8085D634","f32","",0x4),
- 0x8085D638:("D_8085D638","f32","",0x4),
- 0x8085D640:("D_8085D640","f32","",0x4),
- 0x8085D644:("D_8085D644","UNK_TYPE1","",0x1),
- 0x8085D64C:("D_8085D64C","f32","",0x4),
+ 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0xC),
+ 0x8085D5FC:("D_8085D5FC","UNK_TYPE1","",0x1),
+ 0x8085D604:("D_8085D604","UNK_TYPE1","",0x8),
+ 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x10),
+ 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x10),
+ 0x8085D62C:("D_8085D62C","Vec3f","",0xC),
+ 0x8085D638:("D_8085D638","Vec3f","",0xC),
+ 0x8085D644:("D_8085D644","Vec3f","",0xC),
0x8085D650:("D_8085D650","UNK_TYPE1","",0x1),
0x8085D658:("D_8085D658","UNK_TYPE1","",0x1),
0x8085D660:("D_8085D660","UNK_TYPE1","",0x1),
0x8085D66C:("D_8085D66C","UNK_TYPE4","",0x4),
0x8085D674:("D_8085D674","UNK_TYPE4","",0x4),
- 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0x1),
- 0x8085D680:("D_8085D680","UNK_TYPE1","",0x1),
+ 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0xC),
+ 0x8085D688:("D_8085D688","UNK_TYPE1","",0x1),
0x8085D6A4:("D_8085D6A4","UNK_TYPE1","",0x1),
0x8085D6D0:("D_8085D6D0","UNK_PTR","",0x4),
0x8085D6DC:("D_8085D6DC","UNK_TYPE1","",0x1),
@@ -5149,18 +5075,16 @@
0x8085D73C:("D_8085D73C","UNK_TYPE1","",0x1),
0x8085D74C:("D_8085D74C","UNK_TYPE1","",0x1),
0x8085D75C:("D_8085D75C","UNK_TYPE1","",0x1),
- 0x8085D764:("D_8085D764","UNK_TYPE1","",0x1),
- 0x8085D76D:("D_8085D76D","UNK_TYPE1","",0x1),
+ 0x8085D764:("D_8085D764","Vec3f","",0xC),
0x8085D770:("D_8085D770","UNK_TYPE1","",0x1),
0x8085D77C:("D_8085D77C","UNK_TYPE1","",0x1),
0x8085D788:("D_8085D788","UNK_TYPE1","",0x1),
- 0x8085D78C:("D_8085D78C","UNK_TYPE1","",0x1),
- 0x8085D797:("D_8085D797","UNK_TYPE1","",0x1),
+ 0x8085D78C:("D_8085D78C","Color_RGBA8","",0x4),
+ 0x8085D790:("D_8085D790","u8","[6]",0x6),
0x8085D798:("D_8085D798","UNK_TYPE2","",0x2),
- 0x8085D7EC:("D_8085D7EC","UNK_TYPE1","",0x1),
- 0x8085D7F8:("D_8085D7F8","UNK_TYPE1","",0x1),
- 0x8085D800:("D_8085D800","f32","",0x4),
- 0x8085D804:("D_8085D804","UNK_TYPE1","",0x1),
+ 0x8085D7EC:("D_8085D7EC","Vec3f","",0xC),
+ 0x8085D7F8:("D_8085D7F8","Vec3f","",0xC),
+ 0x8085D804:("D_8085D804","s8","[5]",0x5),
0x8085D80C:("D_8085D80C","UNK_TYPE1","",0x1),
0x8085D838:("D_8085D838","UNK_TYPE1","",0x1),
0x8085D840:("D_8085D840","UNK_TYPE1","",0x1),
@@ -5170,18 +5094,14 @@
0x8085D904:("D_8085D904","UNK_TYPE1","",0x1),
0x8085D908:("D_8085D908","UNK_TYPE1","",0x1),
0x8085D910:("D_8085D910","UNK_TYPE1","",0x1),
- 0x8085D918:("D_8085D918","UNK_TYPE1","",0x1),
- 0x8085D91C:("D_8085D91C","f32","",0x4),
- 0x8085D924:("D_8085D924","UNK_TYPE1","",0x1),
- 0x8085D928:("D_8085D928","f32","",0x4),
+ 0x8085D918:("D_8085D918","Vec3f","",0xC),
+ 0x8085D924:("D_8085D924","Vec3f","",0xC),
0x8085D930:("D_8085D930","UNK_TYPE1","",0x1),
0x8085D934:("D_8085D934","UNK_TYPE1","",0x1),
0x8085D938:("D_8085D938","UNK_TYPE4","",0x4),
0x8085D93C:("D_8085D93C","UNK_TYPE4","",0x4),
- 0x8085D940:("D_8085D940","f32","",0x4),
- 0x8085D948:("D_8085D948","f32","",0x4),
- 0x8085D94C:("D_8085D94C","f32","",0x4),
- 0x8085D954:("D_8085D954","f32","",0x4),
+ 0x8085D940:("D_8085D940","Vec3f","",0xC),
+ 0x8085D94C:("D_8085D94C","Vec3f","",0xC),
0x8085D958:("D_8085D958","UNK_TYPE1","",0x1),
0x8085D960:("D_8085D960","UNK_TYPE1","",0x1),
0x8085D96C:("D_8085D96C","UNK_TYPE1","",0x1),
@@ -5425,20 +5345,18 @@
0x8085E6EC:("D_8085E6EC","f32","",0x4),
0x8085E6F0:("D_8085E6F0","f32","",0x4),
0x8085E6F4:("D_8085E6F4","f32","",0x4),
- 0x80862AF0:("D_80862AF0","UNK_TYPE1","",0x1),
- 0x80862AF4:("D_80862AF4","f32","",0x4),
- 0x80862AF8:("D_80862AF8","f32","",0x4),
+ 0x80862AF0:("sDogSpawnPos","Vec3f","",0xC),
0x80862AFC:("D_80862AFC","f32","",0x4),
0x80862B00:("D_80862B00","UNK_TYPE1","",0x1),
0x80862B02:("D_80862B02","UNK_TYPE1","",0x1),
0x80862B04:("D_80862B04","UNK_TYPE1","",0x1),
- 0x80862B08:("D_80862B08","UNK_TYPE1","",0x1),
- 0x80862B0C:("D_80862B0C","UNK_TYPE1","",0x1),
- 0x80862B10:("D_80862B10","UNK_TYPE1","",0x1),
- 0x80862B14:("D_80862B14","UNK_TYPE1","",0x1),
+ 0x80862B08:("sPlayerCurrentFloorType","UNK_TYPE1","",0x1),
+ 0x80862B0C:("sPlayerCurrentWallFlags","UNK_TYPE1","",0x1),
+ 0x80862B10:("sPlayerConveyorSpeedIndex","UNK_TYPE1","",0x1),
+ 0x80862B14:("sPlayerIsOnFloorConveyor","UNK_TYPE1","",0x1),
0x80862B16:("D_80862B16","UNK_TYPE1","",0x1),
0x80862B18:("D_80862B18","f32","",0x4),
- 0x80862B1C:("D_80862B1C","UNK_TYPE1","",0x1),
+ 0x80862B1C:("sPlayerPrevFloorProperty","UNK_TYPE1","",0x1),
0x80862B20:("D_80862B20","UNK_TYPE1","",0x1),
0x80862B24:("D_80862B24","UNK_TYPE1","",0x1),
0x80862B28:("D_80862B28","UNK_TYPE1","",0x1),
@@ -5446,7 +5364,7 @@
0x80862B30:("D_80862B30","UNK_TYPE1","",0x1),
0x80862B3C:("D_80862B3C","f32","",0x4),
0x80862B40:("D_80862B40","UNK_TYPE1","",0x1),
- 0x80862B44:("D_80862B44","UNK_TYPE1","",0x1),
+ 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1),
0x80862B48:("D_80862B48","UNK_TYPE1","",0x1),
0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1),
0x80862B50:("D_80862B50","UNK_TYPE1","",0x1),
@@ -6516,7 +6434,7 @@
0x808BCD44:("D_808BCD44","f32","",0x4),
0x808BCDE0:("sNumLitTorchesInGroup","UNK_TYPE1","",0x1),
0x808BD160:("Item_B_Heart_InitVars","UNK_TYPE1","",0x1),
- 0x808BD180:("D_808BD180","UNK_TYPE1","",0x1),
+ 0x808BD180:("sInitChain","UNK_TYPE1","",0x1),
0x808BD190:("D_808BD190","f32","",0x4),
0x808BEF10:("En_Dekunuts_InitVars","UNK_TYPE1","",0x1),
0x808BEF30:("D_808BEF30","UNK_TYPE1","",0x1),
@@ -11270,11 +11188,11 @@
0x80A37A88:("D_80A37A88","UNK_TYPE1","",0x1),
0x80A37B08:("D_80A37B08","UNK_TYPE1","",0x1),
0x80A37B88:("D_80A37B88","UNK_TYPE1","",0x1),
- 0x80A37B90:("D_80A37B90","UNK_TYPE1","",0x1),
- 0x80A37B94:("D_80A37B94","UNK_TYPE1","",0x1),
- 0x80A37B98:("D_80A37B98","UNK_TYPE1","",0x1),
- 0x80A37BA4:("D_80A37BA4","UNK_TYPE1","",0x1),
- 0x80A37BA8:("D_80A37BA8","UNK_TYPE1","",0x1),
+ 0x80A37B90:("sDustPrimColor","UNK_TYPE1","",0x1),
+ 0x80A37B94:("sDustEnvColor","UNK_TYPE1","",0x1),
+ 0x80A37B98:("sBubbleAccel","UNK_TYPE1","",0x1),
+ 0x80A37BA4:("sBubblePrimColor","UNK_TYPE1","",0x1),
+ 0x80A37BA8:("sBubbleEnvColor","UNK_TYPE1","",0x1),
0x80A37BB0:("D_80A37BB0","f32","",0x4),
0x80A37BB4:("D_80A37BB4","f32","",0x4),
0x80A37BB8:("D_80A37BB8","f32","",0x4),
@@ -12341,19 +12259,19 @@
0x80A8FF6C:("D_80A8FF6C","f32","",0x4),
0x80A906E0:("En_Test5_InitVars","UNK_TYPE1","",0x1),
0x80A93E60:("En_Test6_InitVars","UNK_TYPE1","",0x1),
- 0x80A93E80:("D_80A93E80","UNK_TYPE1","",0x1),
- 0x80A9402C:("D_80A9402C","UNK_TYPE1","",0x1),
- 0x80A94048:("D_80A94048","UNK_TYPE1","",0x1),
- 0x80A9404C:("D_80A9404C","UNK_TYPE1","",0x1),
- 0x80A94050:("D_80A94050","UNK_TYPE1","",0x1),
- 0x80A94054:("D_80A94054","UNK_TYPE2","",0x2),
- 0x80A94058:("D_80A94058","UNK_TYPE2","",0x2),
+ 0x80A93E80:("sDoubleSoTCsCamData","UNK_TYPE1","",0x1),
+ 0x80A9402C:("sSoTCsAmmoDropTextures","UNK_TYPE1","",0x1),
+ 0x80A94048:("sInvSoTCsFogColor","UNK_TYPE1","",0x1),
+ 0x80A9404C:("sInvSoTCsAmbientColor","UNK_TYPE1","",0x1),
+ 0x80A94050:("sInvSoTCsDiffuseColor","UNK_TYPE1","",0x1),
+ 0x80A94054:("sInvSoTCsFogNear","UNK_TYPE2","",0x2),
+ 0x80A94058:("sInvSoTCsZFar","UNK_TYPE2","",0x2),
0x80A9405C:("D_80A9405C","UNK_TYPE1","",0x1),
- 0x80A94068:("D_80A94068","UNK_TYPE1","",0x1),
- 0x80A9406C:("D_80A9406C","UNK_TYPE1","",0x1),
- 0x80A94070:("D_80A94070","UNK_TYPE1","",0x1),
- 0x80A94074:("D_80A94074","UNK_TYPE2","",0x2),
- 0x80A94078:("D_80A94078","UNK_TYPE2","",0x2),
+ 0x80A94068:("sDoubleSoTCsFogColor","UNK_TYPE1","",0x1),
+ 0x80A9406C:("sDoubleSoTCsAmbientColor","UNK_TYPE1","",0x1),
+ 0x80A94070:("sDoubleSoTCsDiffuseColor","UNK_TYPE1","",0x1),
+ 0x80A94074:("sDoubleSoTCsFogNear","UNK_TYPE2","",0x2),
+ 0x80A94078:("sDoubleSoTCsZFar","UNK_TYPE2","",0x2),
0x80A94080:("D_80A94080","f32","",0x4),
0x80A94084:("D_80A94084","f32","",0x4),
0x80A94088:("D_80A94088","f32","",0x4),
@@ -12384,7 +12302,7 @@
0x80A94338:("jtbl_80A94338","UNK_PTR","",0x4),
0x80A94360:("D_80A94360","f32","",0x4),
0x80A94364:("D_80A94364","f32","",0x4),
- 0x80A94910:("D_80A94910","UNK_TYPE4","",0x4),
+ 0x80A94910:("sSoTCsAmmoDrops","UNK_TYPE4","",0x4),
0x80A99010:("D_80A99010","UNK_TYPE4","",0x4),
0x80A990F0:("En_Az_InitVars","UNK_TYPE1","",0x1),
0x80A99110:("D_80A99110","UNK_TYPE1","",0x1),
@@ -12896,15 +12814,14 @@
0x80AC65B0:("D_80AC65B0","UNK_TYPE1","",0x1),
0x80AC66A8:("TransitionWipe1_InitVars","UNK_PTR","",0x4),
0x80AC66D0:("D_80AC66D0","f32","",0x4),
- 0x80AC6C60:("D_80AC6C60","UNK_TYPE1","",0x1),
- 0x80AC7060:("D_80AC7060","UNK_TYPE1","",0x1),
- 0x80AC7460:("D_80AC7460","UNK_TYPE1","",0x1),
- 0x80AC7860:("D_80AC7860","UNK_TYPE1","",0x1),
- 0x80AC7C60:("D_80AC7C60","UNK_TYPE1","",0x1),
- 0x80AC8060:("D_80AC8060","UNK_TYPE1","",0x1),
- 0x80AC8250:("D_80AC8250","UNK_TYPE1","",0x1),
- 0x80AC8280:("D_80AC8280","UNK_TYPE1","",0x1),
- 0x80AC8350:("D_80AC8350","UNK_PTR","",0x4),
+ 0x80AC6C60:("fbdemo_tex_000520","UNK_TYPE1","",0x1),
+ 0x80AC7060:("fbdemo_tex_000920","UNK_TYPE1","",0x1),
+ 0x80AC7460:("fbdemo_tex_000D20","UNK_TYPE1","",0x1),
+ 0x80AC7860:("fbdemo_tex_001120","UNK_TYPE1","",0x1),
+ 0x80AC7C60:("fbdemo_tex_001520","UNK_TYPE1","",0x1),
+ 0x80AC8060:("sTransWipe3Vtx","UNK_TYPE1","",0x1),
+ 0x80AC8280:("sTransWipe3DL","UNK_TYPE1","",0x1),
+ 0x80AC8350:("sTransWipe3Textures","TexturePtr[]","8",0x4),
0x80AC8370:("TransitionWipe3_InitVars","UNK_PTR","",0x4),
0x80AC83A0:("D_80AC83A0","f32","",0x4),
0x80AC8650:("TransitionWipe4_InitVars","UNK_PTR","",0x4),
diff --git a/tools/extract_baserom.py b/tools/extract_baserom.py
index 03d230e80..c631a6392 100755
--- a/tools/extract_baserom.py
+++ b/tools/extract_baserom.py
@@ -14,8 +14,8 @@ FILE_NAMES = [
'Audiotable',
'kanji',
'link_animetion',
- 'icon_item_static_old',
- 'icon_item_24_static_old',
+ 'icon_item_static_syms',
+ 'icon_item_24_static_syms',
'icon_item_field_static',
'icon_item_dungeon_static',
'icon_item_gameover_static',
@@ -25,10 +25,10 @@ FILE_NAMES = [
'map_grand_static',
'item_name_static',
'map_name_static',
- 'icon_item_static_test',
- 'icon_item_24_static_test',
- 'schedule_dma_static_old',
- 'schedule_dma_static_test',
+ 'icon_item_static_yar',
+ 'icon_item_24_static_yar',
+ 'schedule_dma_static_syms',
+ 'schedule_dma_static_yar',
'schedule_static',
'story_static',
'do_action_static',
diff --git a/tools/filelists/mm.us.rev1/all.csv b/tools/filelists/mm.us.rev1/all.csv
index c23622330..7c98a7cf3 100644
--- a/tools/filelists/mm.us.rev1/all.csv
+++ b/tools/filelists/mm.us.rev1/all.csv
@@ -6,8 +6,8 @@
5,Audiotable
6,kanji
7,link_animetion
-8,icon_item_static_old
-9,icon_item_24_static_old
+8,icon_item_static_syms
+9,icon_item_24_static_syms
10,icon_item_field_static
11,icon_item_dungeon_static
12,icon_item_gameover_static
@@ -17,10 +17,10 @@
16,map_grand_static
17,item_name_static
18,map_name_static
-19,icon_item_static_test
-20,icon_item_24_static_test
-21,schedule_dma_static_old
-22,schedule_dma_static_test
+19,icon_item_static_yar
+20,icon_item_24_static_yar
+21,schedule_dma_static_syms
+22,schedule_dma_static_yar
23,schedule_static
24,story_static
25,do_action_static
diff --git a/tools/filelists/mm.us.rev1/archives.csv b/tools/filelists/mm.us.rev1/archives.csv
index a0b758dfd..3053456d0 100644
--- a/tools/filelists/mm.us.rev1/archives.csv
+++ b/tools/filelists/mm.us.rev1/archives.csv
@@ -2,6 +2,6 @@
16,map_grand_static
17,item_name_static
18,map_name_static
-19,icon_item_static_test
-20,icon_item_24_static_test
-22,schedule_dma_static_test
+19,icon_item_static_yar
+20,icon_item_24_static_yar
+22,schedule_dma_static_yar
diff --git a/tools/filelists/mm.us.rev1/deleted.csv b/tools/filelists/mm.us.rev1/deleted.csv
index 12e60f6ee..2fca3fbe8 100644
--- a/tools/filelists/mm.us.rev1/deleted.csv
+++ b/tools/filelists/mm.us.rev1/deleted.csv
@@ -1,3 +1,3 @@
-8,icon_item_static_old
-9,icon_item_24_static_old
-21,schedule_dma_static_old
+8,icon_item_static_syms
+9,icon_item_24_static_syms
+21,schedule_dma_static_syms
diff --git a/tools/gitable.py b/tools/gitable.py
new file mode 100755
index 000000000..dad39638f
--- /dev/null
+++ b/tools/gitable.py
@@ -0,0 +1,1171 @@
+#!/usr/bin/env python3
+import argparse
+from cgitb import text
+import dataclasses
+import os
+import struct
+import sys
+import typing
+
+GETITEMENTRY_FORMAT = ">BBbBH"
+GETITEMENTRY_LENGTH = struct.calcsize(GETITEMENTRY_FORMAT)
+
+# MM US: 0x2E964
+
+itemId_names = {
+ 0x00: "ITEM_OCARINA",
+ 0x01: "ITEM_BOW",
+ 0x02: "ITEM_ARROW_FIRE",
+ 0x03: "ITEM_ARROW_ICE",
+ 0x04: "ITEM_ARROW_LIGHT",
+ 0x05: "ITEM_OCARINA_FAIRY",
+ 0x06: "ITEM_BOMB",
+ 0x07: "ITEM_BOMBCHU",
+ 0x08: "ITEM_STICK",
+ 0x09: "ITEM_NUT",
+ 0x0A: "ITEM_MAGIC_BEANS",
+ 0x0B: "ITEM_SLINGSHOT",
+ 0x0C: "ITEM_POWDER_KEG",
+ 0x0D: "ITEM_PICTO_BOX",
+ 0x0E: "ITEM_LENS",
+ 0x0F: "ITEM_HOOKSHOT",
+ 0x10: "ITEM_SWORD_GREAT_FAIRY",
+ 0x11: "ITEM_LONGSHOT",
+ 0x12: "ITEM_BOTTLE",
+ 0x13: "ITEM_POTION_RED",
+ 0x14: "ITEM_POTION_GREEN",
+ 0x15: "ITEM_POTION_BLUE",
+ 0x16: "ITEM_FAIRY",
+ 0x17: "ITEM_DEKU_PRINCESS",
+ 0x18: "ITEM_MILK_BOTTLE",
+ 0x19: "ITEM_MILK_HALF",
+ 0x1A: "ITEM_FISH",
+ 0x1B: "ITEM_BUG",
+ 0x1C: "ITEM_BLUE_FIRE",
+ 0x1D: "ITEM_POE",
+ 0x1E: "ITEM_BIG_POE",
+ 0x1F: "ITEM_SPRING_WATER",
+ 0x20: "ITEM_HOT_SPRING_WATER",
+ 0x21: "ITEM_ZORA_EGG",
+ 0x22: "ITEM_GOLD_DUST",
+ 0x23: "ITEM_MUSHROOM",
+ 0x24: "ITEM_SEAHORSE",
+ 0x25: "ITEM_CHATEAU",
+ 0x26: "ITEM_HYLIAN_LOACH",
+ 0x27: "ITEM_OBABA_DRINK",
+ 0x28: "ITEM_MOON_TEAR",
+ 0x29: "ITEM_DEED_LAND",
+ 0x2A: "ITEM_DEED_SWAMP",
+ 0x2B: "ITEM_DEED_MOUNTAIN",
+ 0x2C: "ITEM_DEED_OCEAN",
+ 0x2D: "ITEM_ROOM_KEY",
+ 0x2E: "ITEM_LETTER_MAMA",
+ 0x2F: "ITEM_LETTER_TO_KAFEI",
+ 0x30: "ITEM_PENDANT_OF_MEMORIES",
+ 0x31: "ITEM_TINGLE_MAP",
+ 0x32: "ITEM_MASK_DEKU",
+ 0x33: "ITEM_MASK_GORON",
+ 0x34: "ITEM_MASK_ZORA",
+ 0x35: "ITEM_MASK_FIERCE_DEITY",
+ 0x36: "ITEM_MASK_TRUTH",
+ 0x37: "ITEM_MASK_KAFEIS_MASK",
+ 0x38: "ITEM_MASK_ALL_NIGHT",
+ 0x39: "ITEM_MASK_BUNNY",
+ 0x3A: "ITEM_MASK_KEATON",
+ 0x3B: "ITEM_MASK_GARO",
+ 0x3C: "ITEM_MASK_ROMANI",
+ 0x3D: "ITEM_MASK_CIRCUS_LEADER",
+ 0x3E: "ITEM_MASK_POSTMAN",
+ 0x3F: "ITEM_MASK_COUPLE",
+ 0x40: "ITEM_MASK_GREAT_FAIRY",
+ 0x41: "ITEM_MASK_GIBDO",
+ 0x42: "ITEM_MASK_DON_GERO",
+ 0x43: "ITEM_MASK_KAMARO",
+ 0x44: "ITEM_MASK_CAPTAIN",
+ 0x45: "ITEM_MASK_STONE",
+ 0x46: "ITEM_MASK_BREMEN",
+ 0x47: "ITEM_MASK_BLAST",
+ 0x48: "ITEM_MASK_SCENTS",
+ 0x49: "ITEM_MASK_GIANT",
+ 0x4A: "ITEM_BOW_ARROW_FIRE",
+ 0x4B: "ITEM_BOW_ARROW_ICE",
+ 0x4C: "ITEM_BOW_ARROW_LIGHT",
+ 0x4D: "ITEM_SWORD_KOKIRI",
+ 0x4E: "ITEM_SWORD_RAZOR",
+ 0x4F: "ITEM_SWORD_GILDED",
+ 0x50: "ITEM_SWORD_DEITY",
+ 0x51: "ITEM_SHIELD_HERO",
+ 0x52: "ITEM_SHIELD_MIRROR",
+ 0x53: "ITEM_QUIVER_30",
+ 0x54: "ITEM_QUIVER_40",
+ 0x55: "ITEM_QUIVER_50",
+ 0x56: "ITEM_BOMB_BAG_20",
+ 0x57: "ITEM_BOMB_BAG_30",
+ 0x58: "ITEM_BOMB_BAG_40",
+ 0x59: "ITEM_WALLET_DEFAULT",
+ 0x5A: "ITEM_WALLET_ADULT",
+ 0x5B: "ITEM_WALLET_GIANT",
+ 0x5C: "ITEM_FISHING_POLE",
+ 0x5D: "ITEM_REMAINS_ODOLWA",
+ 0x5E: "ITEM_REMAINS_GOHT",
+ 0x5F: "ITEM_REMAINS_GYORG",
+ 0x60: "ITEM_REMAINS_TWINMOLD",
+ 0x61: "ITEM_SONG_SONATA",
+ 0x62: "ITEM_SONG_LULLABY",
+ 0x63: "ITEM_SONG_NOVA",
+ 0x64: "ITEM_SONG_ELEGY",
+ 0x65: "ITEM_SONG_OATH",
+ 0x66: "ITEM_SONG_SARIA",
+ 0x67: "ITEM_SONG_TIME",
+ 0x68: "ITEM_SONG_HEALING",
+ 0x69: "ITEM_SONG_EPONA",
+ 0x6A: "ITEM_SONG_SOARING",
+ 0x6B: "ITEM_SONG_STORMS",
+ 0x6C: "ITEM_SONG_SUN",
+ 0x6D: "ITEM_BOMBERS_NOTEBOOK",
+ 0x6E: "ITEM_SKULL_TOKEN",
+ 0x6F: "ITEM_HEART_CONTAINER",
+ 0x70: "ITEM_HEART_PIECE",
+ 0x73: "ITEM_SONG_LULLABY_INTRO" ,
+ 0x74: "ITEM_KEY_BOSS",
+ 0x75: "ITEM_COMPASS",
+ 0x76: "ITEM_DUNGEON_MAP",
+ 0x77: "ITEM_STRAY_FAIRIES",
+ 0x78: "ITEM_KEY_SMALL",
+ 0x79: "ITEM_MAGIC_SMALL",
+ 0x7A: "ITEM_MAGIC_LARGE",
+ 0x7B: "ITEM_HEART_PIECE_2",
+ 0x7C: "ITEM_INVALID_1",
+ 0x7D: "ITEM_INVALID_2",
+ 0x7E: "ITEM_INVALID_3",
+ 0x7F: "ITEM_INVALID_4",
+ 0x80: "ITEM_INVALID_5",
+ 0x81: "ITEM_INVALID_6",
+ 0x82: "ITEM_INVALID_7",
+ 0x83: "ITEM_RECOVERY_HEART",
+ 0x84: "ITEM_RUPEE_GREEN",
+ 0x85: "ITEM_RUPEE_BLUE",
+ 0x86: "ITEM_RUPEE_10",
+ 0x87: "ITEM_RUPEE_RED",
+ 0x88: "ITEM_RUPEE_PURPLE",
+ 0x89: "ITEM_RUPEE_SILVER",
+ 0x8A: "ITEM_RUPEE_HUGE",
+ 0x8B: "ITEM_STICKS_5",
+ 0x8C: "ITEM_STICKS_10",
+ 0x8D: "ITEM_NUTS_5",
+ 0x8E: "ITEM_NUTS_10",
+ 0x8F: "ITEM_BOMBS_5",
+ 0x90: "ITEM_BOMBS_10",
+ 0x91: "ITEM_BOMBS_20",
+ 0x92: "ITEM_BOMBS_30",
+ 0x93: "ITEM_ARROWS_10",
+ 0x94: "ITEM_ARROWS_30",
+ 0x95: "ITEM_ARROWS_40",
+ 0x96: "ITEM_ARROWS_50",
+ 0x97: "ITEM_BOMBCHUS_20",
+ 0x98: "ITEM_BOMBCHUS_10",
+ 0x99: "ITEM_BOMBCHUS_1",
+ 0x9A: "ITEM_BOMBCHUS_5",
+ 0x9B: "ITEM_STICK_UPGRADE_20",
+ 0x9C: "ITEM_STICK_UPGRADE_30",
+ 0x9D: "ITEM_NUT_UPGRADE_30",
+ 0x9E: "ITEM_NUT_UPGRADE_40",
+ 0x9F: "ITEM_CHATEAU_2",
+ 0xA0: "ITEM_MILK",
+ 0xA1: "ITEM_GOLD_DUST_2",
+ 0xA2: "ITEM_HYLIAN_LOACH_2",
+ 0xA3: "ITEM_SEAHORSE_CAUGHT",
+ 0xF0: "ITEM_F0" ,
+ 0xF1: "ITEM_F1",
+ 0xF2: "ITEM_F2",
+ 0xFC: "ITEM_FC" ,
+ 0xFD: "ITEM_FD",
+ 0xFE: "ITEM_FE",
+ 0xFF: "ITEM_NONE",
+}
+
+getItemId_names = {
+ 0x00: "GI_NONE",
+ 0x01: "GI_RUPEE_GREEN",
+ 0x02: "GI_RUPEE_BLUE",
+ 0x03: "GI_RUPEE_10",
+ 0x04: "GI_RUPEE_RED",
+ 0x05: "GI_RUPEE_PURPLE",
+ 0x06: "GI_RUPEE_SILVER",
+ 0x07: "GI_RUPEE_HUGE",
+ 0x08: "GI_WALLET_ADULT",
+ 0x09: "GI_WALLET_GIANT",
+ 0x0A: "GI_RECOVERY_HEART",
+ 0x0C: "GI_HEART_PIECE",
+ 0x0D: "GI_HEART_CONTAINER",
+ 0x0E: "GI_MAGIC_SMALL",
+ 0x0F: "GI_MAGIC_LARGE",
+ 0x11: "GI_STRAY_FAIRY",
+ 0x14: "GI_BOMBS_1",
+ 0x15: "GI_BOMBS_5",
+ 0x16: "GI_BOMBS_10",
+ 0x17: "GI_BOMBS_20",
+ 0x18: "GI_BOMBS_30",
+ 0x19: "GI_STICKS_1",
+ 0x1A: "GI_BOMBCHUS_10",
+ 0x1B: "GI_BOMB_BAG_20",
+ 0x1C: "GI_BOMB_BAG_30",
+ 0x1D: "GI_BOMB_BAG_40",
+ 0x1E: "GI_ARROWS_10",
+ 0x1F: "GI_ARROWS_30",
+ 0x20: "GI_ARROWS_40",
+ 0x21: "GI_ARROWS_50",
+ 0x22: "GI_QUIVER_30",
+ 0x23: "GI_QUIVER_40",
+ 0x24: "GI_QUIVER_50",
+ 0x25: "GI_ARROW_FIRE",
+ 0x26: "GI_ARROW_ICE",
+ 0x27: "GI_ARROW_LIGHT",
+ 0x28: "GI_NUTS_1",
+ 0x29: "GI_NUTS_5",
+ 0x2A: "GI_NUTS_10",
+ 0x2E: "GI_BOMBCHUS_20",
+ 0x32: "GI_SHIELD_HERO",
+ 0x33: "GI_SHIELD_MIRROR",
+ 0x34: "GI_POWDER_KEG",
+ 0x35: "GI_MAGIC_BEANS",
+ 0x36: "GI_BOMBCHUS_1",
+ 0x37: "GI_SWORD_KOKIRI",
+ 0x38: "GI_SWORD_RAZOR",
+ 0x39: "GI_SWORD_GILDED",
+ 0x3A: "GI_BOMBCHUS_5",
+ 0x3B: "GI_SWORD_GREAT_FAIRY",
+ 0x3C: "GI_KEY_SMALL",
+ 0x3D: "GI_KEY_BOSS",
+ 0x3E: "GI_MAP",
+ 0x3F: "GI_COMPASS",
+ 0x40: "GI_40",
+ 0x41: "GI_HOOKSHOT",
+ 0x42: "GI_LENS",
+ 0x43: "GI_PICTO_BOX",
+ 0x4C: "GI_OCARINA",
+ 0x50: "GI_BOMBERS_NOTEBOOK",
+ 0x52: "GI_SKULL_TOKEN",
+ 0x55: "GI_REMAINS_ODOLWA",
+ 0x56: "GI_REMAINS_GOHT",
+ 0x57: "GI_REMAINS_GYORG",
+ 0x58: "GI_REMAINS_TWINMOLD",
+ 0x59: "GI_POTION_RED_BOTTLE",
+ 0x5A: "GI_BOTTLE",
+ 0x5B: "GI_POTION_RED",
+ 0x5C: "GI_POTION_GREEN",
+ 0x5D: "GI_POTION_BLUE",
+ 0x5E: "GI_FAIRY",
+ 0x5F: "GI_DEKU_PRINCESS",
+ 0x60: "GI_MILK_BOTTLE",
+ 0x61: "GI_MILK_HALF",
+ 0x62: "GI_FISH",
+ 0x63: "GI_BUG",
+ 0x64: "GI_BLUE_FIRE",
+ 0x65: "GI_POE",
+ 0x66: "GI_BIG_POE",
+ 0x67: "GI_SPRING_WATER",
+ 0x68: "GI_HOT_SPRING_WATER",
+ 0x69: "GI_ZORA_EGG",
+ 0x6A: "GI_GOLD_DUST",
+ 0x6B: "GI_MUSHROOM",
+ 0x6C: "GI_6C",
+ 0x6D: "GI_6D",
+ 0x6E: "GI_SEAHORSE",
+ 0x6F: "GI_CHATEAU_BOTTLE",
+ 0x70: "GI_70",
+ 0x75: "GI_75",
+ 0x76: "GI_ICE_TRAP",
+ 0x78: "GI_MASK_DEKU",
+ 0x79: "GI_MASK_GORON",
+ 0x7A: "GI_MASK_ZORA",
+ 0x7B: "GI_MASK_FIERCE_DEITY",
+ 0x7C: "GI_MASK_CAPTAIN",
+ 0x7D: "GI_MASK_GIANT",
+ 0x7E: "GI_MASK_ALL_NIGHT",
+ 0x7F: "GI_MASK_BUNNY",
+ 0x80: "GI_MASK_KEATON",
+ 0x81: "GI_MASK_GARO",
+ 0x82: "GI_MASK_ROMANI",
+ 0x83: "GI_MASK_CIRCUS_LEADER",
+ 0x84: "GI_MASK_POSTMAN",
+ 0x85: "GI_MASK_COUPLE",
+ 0x86: "GI_MASK_GREAT_FAIRY",
+ 0x87: "GI_MASK_GIBDO",
+ 0x88: "GI_MASK_DON_GERO",
+ 0x89: "GI_MASK_KAMARO",
+ 0x8A: "GI_MASK_TRUTH",
+ 0x8B: "GI_MASK_STONE",
+ 0x8C: "GI_MASK_BREMEN",
+ 0x8D: "GI_MASK_BLAST",
+ 0x8E: "GI_MASK_SCENTS",
+ 0x8F: "GI_MASK_KAFEIS_MASK",
+ 0x91: "GI_CHATEAU",
+ 0x92: "GI_MILK",
+ 0x93: "GI_GOLD_DUST_2",
+ 0x94: "GI_HYLIAN_LOACH",
+ 0x95: "GI_SEAHORSE_CAUGHT",
+ 0x96: "GI_MOON_TEAR",
+ 0x97: "GI_DEED_LAND",
+ 0x98: "GI_DEED_SWAMP",
+ 0x99: "GI_DEED_MOUNTAIN",
+ 0x9A: "GI_DEED_OCEAN",
+ 0x9B: "GI_SWORD_GREAT_FAIRY_STOLEN",
+ 0x9C: "GI_SWORD_KOKIRI_STOLEN",
+ 0x9D: "GI_SWORD_RAZOR_STOLEN",
+ 0x9E: "GI_SWORD_GILDED_STOLEN",
+ 0x9F: "GI_SHIELD_HERO_STOLEN",
+ 0xA0: "GI_ROOM_KEY",
+ 0xA1: "GI_LETTER_TO_MAMA",
+ 0xA2: "GI_A2",
+ 0xA3: "GI_A3",
+ 0xA4: "GI_A4",
+ 0xA5: "GI_A5",
+ 0xA6: "GI_A6",
+ 0xA7: "GI_A7",
+ 0xA8: "GI_A8",
+ 0xA9: "GI_BOTTLE_STOLEN",
+ 0xAA: "GI_LETTER_TO_KAFEI",
+ 0xAB: "GI_PENDANT_OF_MEMORIES",
+ 0xB4: "GI_TINGLE_MAP_CLOCK_TOWN",
+ 0xB5: "GI_TINGLE_MAP_WOODFALL",
+ 0xB6: "GI_TINGLE_MAP_SNOWHEAD",
+ 0xB7: "GI_TINGLE_MAP_ROMANI_RANCH",
+ 0xB8: "GI_TINGLE_MAP_GREAT_BAY",
+ 0xB9: "GI_TINGLE_MAP_STONE_TOWER",
+ 0xBA: "GI_MAX" # I pity the fool
+}
+
+getItemDrawId_names = {
+ 0x00: "GID_BOTTLE",
+ 0x01: "GID_KEY_SMALL",
+ 0x02: "GID_MASK_KAMARO",
+ 0x03: "GID_MASK_COUPLE",
+ 0x04: "GID_04",
+ 0x05: "GID_05",
+ 0x06: "GID_06",
+ 0x07: "GID_07",
+ 0x08: "GID_RECOVERY_HEART",
+ 0x09: "GID_KEY_BOSS",
+ 0x0A: "GID_COMPASS",
+ 0x0B: "GID_BOMBERS_NOTEBOOK",
+ 0x0C: "GID_MASK_STONE",
+ 0x0D: "GID_MASK_KAFEIS_MASK",
+ 0x0E: "GID_MASK_CIRCUS_LEADER",
+ 0x0F: "GID_MASK_BREMEN",
+ 0x10: "GID_MASK_ALL_NIGHT",
+ 0x11: "GID_NUTS",
+ 0x12: "GID_HEART_CONTAINER",
+ 0x13: "GID_HEART_PIECE",
+ 0x14: "GID_QUIVER_30",
+ 0x15: "GID_QUIVER_40",
+ 0x16: "GID_QUIVER_50",
+ 0x17: "GID_BOMB_BAG_20",
+ 0x18: "GID_BOMB_BAG_30",
+ 0x19: "GID_BOMB_BAG_40",
+ 0x1A: "GID_STICK",
+ 0x1B: "GID_DUNGEON_MAP",
+ 0x1C: "GID_MAGIC_SMALL",
+ 0x1D: "GID_MAGIC_LARGE",
+ 0x1E: "GID_BOMB",
+ 0x1F: "GID_STONE_OF_AGONY",
+ 0x20: "GID_WALLET_ADULT",
+ 0x21: "GID_WALLET_GIANT",
+ 0x22: "GID_MASK_DON_GERO",
+ 0x23: "GID_ARROWS_SMALL",
+ 0x24: "GID_ARROWS_MEDIUM",
+ 0x25: "GID_ARROWS_LARGE",
+ 0x26: "GID_BOMBCHU",
+ 0x27: "GID_SHIELD_HERO",
+ 0x28: "GID_HOOKSHOT",
+ 0x29: "GID_29",
+ 0x2A: "GID_OCARINA",
+ 0x2B: "GID_MILK",
+ 0x2C: "GID_MASK_KEATON",
+ 0x2D: "GID_TINGLE_MAP",
+ 0x2E: "GID_BOW",
+ 0x2F: "GID_LENS",
+ 0x30: "GID_POTION_GREEN",
+ 0x31: "GID_POTION_RED",
+ 0x32: "GID_POTION_BLUE",
+ 0x33: "GID_SHIELD_MIRROR",
+ 0x34: "GID_MAGIC_BEANS",
+ 0x35: "GID_FISH",
+ 0x36: "GID_LETTER_MAMA",
+ 0x37: "GID_37",
+ 0x38: "GID_SWORD_BGS",
+ 0x39: "GID_MASK_SUN",
+ 0x3A: "GID_MASK_BLAST",
+ 0x3B: "GID_FAIRY",
+ 0x3C: "GID_MASK_SCENTS",
+ 0x3D: "GID_MASK_CAPTAIN",
+ 0x3E: "GID_MASK_BUNNY",
+ 0x3F: "GID_MASK_TRUTH",
+ 0x40: "GID_DEED_SWAMP",
+ 0x41: "GID_DEED_MOUNTAIN",
+ 0x42: "GID_RUPEE_HUGE",
+ 0x43: "GID_DEED_OCEAN",
+ 0x44: "GID_MASK_GORON",
+ 0x45: "GID_MASK_ZORA",
+ 0x46: "GID_46",
+ 0x47: "GID_ARROW_FIRE",
+ 0x48: "GID_ARROW_ICE",
+ 0x49: "GID_ARROW_LIGHT",
+ 0x4A: "GID_SKULL_TOKEN",
+ 0x4B: "GID_BUG",
+ 0x4C: "GID_4C",
+ 0x4D: "GID_POE",
+ 0x4E: "GID_FAIRY_2",
+ 0x4F: "GID_RUPEE_GREEN",
+ 0x50: "GID_RUPEE_BLUE",
+ 0x51: "GID_RUPEE_RED",
+ 0x52: "GID_BIG_POE",
+ 0x53: "GID_RUPEE_PURPLE",
+ 0x54: "GID_RUPEE_SILVER",
+ 0x55: "GID_SWORD_KOKIRI",
+ 0x56: "GID_SKULL_TOKEN_2",
+ 0x57: "GID_57",
+ 0x58: "GID_ZORA_EGG",
+ 0x59: "GID_MOON_TEAR",
+ 0x5A: "GID_DEED_LAND",
+ 0x5B: "GID_MASK_DEKU",
+ 0x5C: "GID_REMAINS_ODOLWA",
+ 0x5D: "GID_POWDER_KEG",
+ 0x5E: "GID_GOLD_DUST",
+ 0x5F: "GID_SEAHORSE",
+ 0x60: "GID_60",
+ 0x61: "GID_HYLIAN_LOACH",
+ 0x62: "GID_SEAHORSE_CAUGHT",
+ 0x63: "GID_REMAINS_GOHT",
+ 0x64: "GID_REMAINS_GYORG",
+ 0x65: "GID_REMAINS_TWINMOLD",
+ 0x66: "GID_SWORD_RAZOR",
+ 0x67: "GID_SWORD_GILDED",
+ 0x68: "GID_SWORD_GREAT_FAIRY",
+ 0x69: "GID_MASK_GARO",
+ 0x6A: "GID_MASK_GREAT_FAIRY",
+ 0x6B: "GID_MASK_GIBDO",
+ 0x6C: "GID_ROOM_KEY",
+ 0x6D: "GID_LETTER_TO_KAFEI",
+ 0x6E: "GID_PENDANT_OF_MEMORIES",
+ 0x6F: "GID_MUSHROOM",
+ 0x70: "GID_MASK_ROMANI",
+ 0x71: "GID_MASK_POSTMAN",
+ 0x72: "GID_MASK_GIANT",
+ 0x73: "GID_CHATEAU",
+ 0x74: "GID_PICTO_BOX",
+ 0x75: "GID_MASK_FIERCE_DEITY",
+ 0x76: "GID_MAX",
+ -1: "GID_NONE",
+}
+
+objectId_names = {
+ 0x000: "OBJECT_UNSET_0",
+ 0x001: "GAMEPLAY_KEEP",
+ 0x002: "GAMEPLAY_FIELD_KEEP",
+ 0x003: "GAMEPLAY_DANGEON_KEEP",
+ 0x004: "OBJECT_NB",
+ 0x005: "OBJECT_OKUTA",
+ 0x006: "OBJECT_CROW",
+ 0x007: "OBJECT_AH",
+ 0x008: "OBJECT_DY_OBJ",
+ 0x009: "OBJECT_WALLMASTER",
+ 0x00A: "OBJECT_DODONGO",
+ 0x00B: "OBJECT_FIREFLY",
+ 0x00C: "OBJECT_BOX",
+ 0x00D: "OBJECT_AL",
+ 0x00E: "OBJECT_BUBBLE",
+ 0x00F: "OBJECT_NIW",
+ 0x010: "OBJECT_LINK_BOY",
+ 0x011: "OBJECT_LINK_CHILD",
+ 0x012: "OBJECT_TITE",
+ 0x013: "OBJECT_TAB",
+ 0x014: "OBJECT_PH",
+ 0x015: "OBJECT_AND",
+ 0x016: "OBJECT_MSMO",
+ 0x017: "OBJECT_DINOFOS",
+ 0x018: "OBJECT_DRS",
+ 0x019: "OBJECT_ZL1",
+ 0x01A: "OBJECT_AN4",
+ 0x01B: "OBJECT_UNSET_1B",
+ 0x01C: "OBJECT_TEST3",
+ 0x01D: "OBJECT_FAMOS",
+ 0x01E: "OBJECT_UNSET_1E",
+ 0x01F: "OBJECT_UNSET_1F",
+ 0x020: "OBJECT_ST",
+ 0x021: "OBJECT_UNSET_21",
+ 0x022: "OBJECT_THIEFBIRD",
+ 0x023: "OBJECT_UNSET_23",
+ 0x024: "OBJECT_UNSET_24",
+ 0x025: "OBJECT_UNSET_25",
+ 0x026: "OBJECT_UNSET_26",
+ 0x027: "OBJECT_UNSET_27",
+ 0x028: "OBJECT_UNSET_28",
+ 0x029: "OBJECT_UNSET_29",
+ 0x02A: "OBJECT_BOMBF",
+ 0x02B: "OBJECT_UNSET_2B",
+ 0x02C: "OBJECT_UNSET_2C",
+ 0x02D: "OBJECT_UNSET_2D",
+ 0x02E: "OBJECT_UNSET_2E",
+ 0x02F: "OBJECT_UNSET_2F",
+ 0x030: "OBJECT_AM",
+ 0x031: "OBJECT_DEKUBABA",
+ 0x032: "OBJECT_UNSET_32",
+ 0x033: "OBJECT_UNSET_33",
+ 0x034: "OBJECT_UNSET_34",
+ 0x035: "OBJECT_UNSET_35",
+ 0x036: "OBJECT_UNSET_36",
+ 0x037: "OBJECT_UNSET_37",
+ 0x038: "OBJECT_UNSET_38",
+ 0x039: "OBJECT_UNSET_39",
+ 0x03A: "OBJECT_UNSET_3A",
+ 0x03B: "OBJECT_UNSET_3B",
+ 0x03C: "OBJECT_UNSET_3C",
+ 0x03D: "OBJECT_UNSET_3D",
+ 0x03E: "OBJECT_WARP1",
+ 0x03F: "OBJECT_B_HEART",
+ 0x040: "OBJECT_DEKUNUTS",
+ 0x041: "OBJECT_UNSET_41",
+ 0x042: "OBJECT_UNSET_42",
+ 0x043: "OBJECT_UNSET_43",
+ 0x044: "OBJECT_UNSET_44",
+ 0x045: "OBJECT_UNSET_45",
+ 0x046: "OBJECT_UNSET_46",
+ 0x047: "OBJECT_UNSET_47",
+ 0x048: "OBJECT_UNSET_48",
+ 0x049: "OBJECT_UNSET_49",
+ 0x04A: "OBJECT_UNSET_4A",
+ 0x04B: "OBJECT_UNSET_4B",
+ 0x04C: "OBJECT_UNSET_4C",
+ 0x04D: "OBJECT_UNSET_4D",
+ 0x04E: "OBJECT_UNSET_4E",
+ 0x04F: "OBJECT_UNSET_4F",
+ 0x050: "OBJECT_UNSET_50",
+ 0x051: "OBJECT_BB",
+ 0x052: "OBJECT_DEATH",
+ 0x053: "OBJECT_UNSET_53",
+ 0x054: "OBJECT_UNSET_54",
+ 0x055: "OBJECT_UNSET_55",
+ 0x056: "OBJECT_UNSET_56",
+ 0x057: "OBJECT_UNSET_57",
+ 0x058: "OBJECT_UNSET_58",
+ 0x059: "OBJECT_UNSET_59",
+ 0x05A: "OBJECT_UNSET_5A",
+ 0x05B: "OBJECT_UNSET_5B",
+ 0x05C: "OBJECT_F40_OBJ",
+ 0x05D: "OBJECT_PO_COMPOSER",
+ 0x05E: "OBJECT_UNSET_5E",
+ 0x05F: "OBJECT_HATA",
+ 0x060: "OBJECT_UNSET_60",
+ 0x061: "OBJECT_WOOD02",
+ 0x062: "OBJECT_UNSET_62",
+ 0x063: "OBJECT_UNSET_63",
+ 0x064: "OBJECT_TRAP",
+ 0x065: "OBJECT_UNSET_65",
+ 0x066: "OBJECT_UNSET_66",
+ 0x067: "OBJECT_UNSET_67",
+ 0x068: "OBJECT_UNSET_68",
+ 0x069: "OBJECT_UNSET_69",
+ 0x06A: "OBJECT_VM",
+ 0x06B: "OBJECT_UNSET_6B",
+ 0x06C: "OBJECT_UNSET_6C",
+ 0x06D: "OBJECT_UNSET_6D",
+ 0x06E: "OBJECT_UNSET_6E",
+ 0x06F: "OBJECT_UNSET_6F",
+ 0x070: "OBJECT_EFC_STAR_FIELD",
+ 0x071: "OBJECT_UNSET_71",
+ 0x072: "OBJECT_UNSET_72",
+ 0x073: "OBJECT_UNSET_73",
+ 0x074: "OBJECT_UNSET_74",
+ 0x075: "OBJECT_RD",
+ 0x076: "OBJECT_YUKIMURA_OBJ",
+ 0x077: "OBJECT_HEAVY_OBJECT",
+ 0x078: "OBJECT_UNSET_78",
+ 0x079: "OBJECT_UNSET_79",
+ 0x07A: "OBJECT_UNSET_7A",
+ 0x07B: "OBJECT_UNSET_7B",
+ 0x07C: "OBJECT_UNSET_7C",
+ 0x07D: "OBJECT_HORSE_LINK_CHILD",
+ 0x07E: "OBJECT_UNSET_7E",
+ 0x07F: "OBJECT_UNSET_7F",
+ 0x080: "OBJECT_SYOKUDAI",
+ 0x081: "OBJECT_UNSET_81",
+ 0x082: "OBJECT_UNSET_82",
+ 0x083: "OBJECT_UNSET_83",
+ 0x084: "OBJECT_EFC_TW",
+ 0x085: "OBJECT_UNSET_85",
+ 0x086: "OBJECT_GI_KEY",
+ 0x087: "OBJECT_MIR_RAY",
+ 0x088: "OBJECT_CTOWER_ROT",
+ 0x089: "OBJECT_UNSET_89",
+ 0x08A: "OBJECT_BDOOR",
+ 0x08B: "OBJECT_UNSET_8B",
+ 0x08C: "OBJECT_UNSET_8C",
+ 0x08D: "OBJECT_UNSET_8D",
+ 0x08E: "OBJECT_SB",
+ 0x08F: "OBJECT_GI_MELODY",
+ 0x090: "OBJECT_GI_HEART",
+ 0x091: "OBJECT_GI_COMPASS",
+ 0x092: "OBJECT_GI_BOSSKEY",
+ 0x093: "OBJECT_UNSET_93",
+ 0x094: "OBJECT_GI_NUTS",
+ 0x095: "OBJECT_UNSET_95",
+ 0x096: "OBJECT_GI_HEARTS",
+ 0x097: "OBJECT_GI_ARROWCASE",
+ 0x098: "OBJECT_GI_BOMBPOUCH",
+ 0x099: "OBJECT_IN",
+ 0x09A: "OBJECT_UNSET_9A",
+ 0x09B: "OBJECT_UNSET_9B",
+ 0x09C: "OBJECT_UNSET_9C",
+ 0x09D: "OBJECT_OS_ANIME",
+ 0x09E: "OBJECT_GI_BOTTLE",
+ 0x09F: "OBJECT_GI_STICK",
+ 0x0A0: "OBJECT_GI_MAP",
+ 0x0A1: "OBJECT_OF1D_MAP",
+ 0x0A2: "OBJECT_RU2",
+ 0x0A3: "OBJECT_UNSET_A3",
+ 0x0A4: "OBJECT_GI_MAGICPOT",
+ 0x0A5: "OBJECT_GI_BOMB_1",
+ 0x0A6: "OBJECT_UNSET_A6",
+ 0x0A7: "OBJECT_MA2",
+ 0x0A8: "OBJECT_GI_PURSE",
+ 0x0A9: "OBJECT_UNSET_A9",
+ 0x0AA: "OBJECT_UNSET_AA",
+ 0x0AB: "OBJECT_RR",
+ 0x0AC: "OBJECT_UNSET_AC",
+ 0x0AD: "OBJECT_UNSET_AD",
+ 0x0AE: "OBJECT_UNSET_AE",
+ 0x0AF: "OBJECT_GI_ARROW",
+ 0x0B0: "OBJECT_GI_BOMB_2",
+ 0x0B1: "OBJECT_UNSET_B1",
+ 0x0B2: "OBJECT_UNSET_B2",
+ 0x0B3: "OBJECT_GI_SHIELD_2",
+ 0x0B4: "OBJECT_GI_HOOKSHOT",
+ 0x0B5: "OBJECT_GI_OCARINA",
+ 0x0B6: "OBJECT_GI_MILK",
+ 0x0B7: "OBJECT_MA1",
+ 0x0B8: "OBJECT_UNSET_B8",
+ 0x0B9: "OBJECT_UNSET_B9",
+ 0x0BA: "OBJECT_UNSET_BA",
+ 0x0BB: "OBJECT_NY",
+ 0x0BC: "OBJECT_FR",
+ 0x0BD: "OBJECT_UNSET_BD",
+ 0x0BE: "OBJECT_UNSET_BE",
+ 0x0BF: "OBJECT_GI_BOW",
+ 0x0C0: "OBJECT_GI_GLASSES",
+ 0x0C1: "OBJECT_GI_LIQUID",
+ 0x0C2: "OBJECT_ANI",
+ 0x0C3: "OBJECT_GI_SHIELD_3",
+ 0x0C4: "OBJECT_UNSET_C4",
+ 0x0C5: "OBJECT_UNSET_C5",
+ 0x0C6: "OBJECT_GI_BEAN",
+ 0x0C7: "OBJECT_GI_FISH",
+ 0x0C8: "OBJECT_UNSET_C8",
+ 0x0C9: "OBJECT_UNSET_C9",
+ 0x0CA: "OBJECT_UNSET_CA",
+ 0x0CB: "OBJECT_GI_LONGSWORD",
+ 0x0CC: "OBJECT_UNSET_CC",
+ 0x0CD: "OBJECT_UNSET_CD",
+ 0x0CE: "OBJECT_UNSET_CE",
+ 0x0CF: "OBJECT_UNSET_CF",
+ 0x0D0: "OBJECT_ZO",
+ 0x0D1: "OBJECT_UNSET_D1",
+ 0x0D2: "OBJECT_UMAJUMP",
+ 0x0D3: "OBJECT_UNSET_D3",
+ 0x0D4: "OBJECT_UNSET_D4",
+ 0x0D5: "OBJECT_MASTERGOLON",
+ 0x0D6: "OBJECT_MASTERZOORA",
+ 0x0D7: "OBJECT_AOB",
+ 0x0D8: "OBJECT_IK",
+ 0x0D9: "OBJECT_AHG",
+ 0x0DA: "OBJECT_CNE",
+ 0x0DB: "OBJECT_UNSET_DB",
+ 0x0DC: "OBJECT_UNSET_DC",
+ 0x0DD: "OBJECT_AN3",
+ 0x0DE: "OBJECT_BJI",
+ 0x0DF: "OBJECT_BBA",
+ 0x0E0: "OBJECT_AN2",
+ 0x0E1: "OBJECT_UNSET_E1",
+ 0x0E2: "OBJECT_AN1",
+ 0x0E3: "OBJECT_BOJ",
+ 0x0E4: "OBJECT_FZ",
+ 0x0E5: "OBJECT_BOB",
+ 0x0E6: "OBJECT_GE1",
+ 0x0E7: "OBJECT_YABUSAME_POINT",
+ 0x0E8: "OBJECT_UNSET_E8",
+ 0x0E9: "OBJECT_UNSET_E9",
+ 0x0EA: "OBJECT_UNSET_EA",
+ 0x0EB: "OBJECT_UNSET_EB",
+ 0x0EC: "OBJECT_D_HSBLOCK",
+ 0x0ED: "OBJECT_D_LIFT",
+ 0x0EE: "OBJECT_MAMENOKI",
+ 0x0EF: "OBJECT_GOROIWA",
+ 0x0F0: "OBJECT_TORYO",
+ 0x0F1: "OBJECT_DAIKU",
+ 0x0F2: "OBJECT_NWC",
+ 0x0F3: "OBJECT_GM",
+ 0x0F4: "OBJECT_MS",
+ 0x0F5: "OBJECT_HS",
+ 0x0F6: "OBJECT_UNSET_F6",
+ 0x0F7: "OBJECT_LIGHTSWITCH",
+ 0x0F8: "OBJECT_KUSA",
+ 0x0F9: "OBJECT_TSUBO",
+ 0x0FA: "OBJECT_UNSET_FA",
+ 0x0FB: "OBJECT_UNSET_FB",
+ 0x0FC: "OBJECT_KANBAN",
+ 0x0FD: "OBJECT_OWL",
+ 0x0FE: "OBJECT_MK",
+ 0x0FF: "OBJECT_FU",
+ 0x100: "OBJECT_GI_KI_TAN_MASK",
+ 0x101: "OBJECT_UNSET_101",
+ 0x102: "OBJECT_GI_MASK18",
+ 0x103: "OBJECT_GI_RABIT_MASK",
+ 0x104: "OBJECT_GI_TRUTH_MASK",
+ 0x105: "OBJECT_UNSET_105",
+ 0x106: "OBJECT_STREAM",
+ 0x107: "OBJECT_MM",
+ 0x108: "OBJECT_UNSET_108",
+ 0x109: "OBJECT_UNSET_109",
+ 0x10A: "OBJECT_UNSET_10A",
+ 0x10B: "OBJECT_UNSET_10B",
+ 0x10C: "OBJECT_UNSET_10C",
+ 0x10D: "OBJECT_UNSET_10D",
+ 0x10E: "OBJECT_UNSET_10E",
+ 0x10F: "OBJECT_JS",
+ 0x110: "OBJECT_CS",
+ 0x111: "OBJECT_UNSET_111",
+ 0x112: "OBJECT_UNSET_112",
+ 0x113: "OBJECT_GI_SOLDOUT",
+ 0x114: "OBJECT_UNSET_114",
+ 0x115: "OBJECT_MAG",
+ 0x116: "OBJECT_UNSET_116",
+ 0x117: "OBJECT_UNSET_117",
+ 0x118: "OBJECT_UNSET_118",
+ 0x119: "OBJECT_GI_GOLONMASK",
+ 0x11A: "OBJECT_GI_ZORAMASK",
+ 0x11B: "OBJECT_UNSET_11B",
+ 0x11C: "OBJECT_UNSET_11C",
+ 0x11D: "OBJECT_KA",
+ 0x11E: "OBJECT_UNSET_11E",
+ 0x11F: "OBJECT_ZG",
+ 0x120: "OBJECT_UNSET_120",
+ 0x121: "OBJECT_GI_M_ARROW",
+ 0x122: "OBJECT_DS2",
+ 0x123: "OBJECT_UNSET_123",
+ 0x124: "OBJECT_FISH",
+ 0x125: "OBJECT_GI_SUTARU",
+ 0x126: "OBJECT_UNSET_126",
+ 0x127: "OBJECT_SSH",
+ 0x128: "OBJECT_BIGSLIME",
+ 0x129: "OBJECT_BG",
+ 0x12A: "OBJECT_BOMBIWA",
+ 0x12B: "OBJECT_HINTNUTS",
+ 0x12C: "OBJECT_RS",
+ 0x12D: "OBJECT_UNSET_12D",
+ 0x12E: "OBJECT_GLA",
+ 0x12F: "OBJECT_UNSET_12F",
+ 0x130: "OBJECT_GELDB",
+ 0x131: "OBJECT_UNSET_131",
+ 0x132: "OBJECT_DOG",
+ 0x133: "OBJECT_KIBAKO2",
+ 0x134: "OBJECT_DNS",
+ 0x135: "OBJECT_DNK",
+ 0x136: "OBJECT_UNSET_136",
+ 0x137: "OBJECT_GI_INSECT",
+ 0x138: "OBJECT_UNSET_138",
+ 0x139: "OBJECT_GI_GHOST",
+ 0x13A: "OBJECT_GI_SOUL",
+ 0x13B: "OBJECT_UNSET_13B",
+ 0x13C: "OBJECT_UNSET_13C",
+ 0x13D: "OBJECT_UNSET_13D",
+ 0x13E: "OBJECT_UNSET_13E",
+ 0x13F: "OBJECT_GI_RUPY",
+ 0x140: "OBJECT_MU",
+ 0x141: "OBJECT_WF",
+ 0x142: "OBJECT_SKB",
+ 0x143: "OBJECT_GS",
+ 0x144: "OBJECT_PS",
+ 0x145: "OBJECT_OMOYA_OBJ",
+ 0x146: "OBJECT_COW",
+ 0x147: "OBJECT_UNSET_147",
+ 0x148: "OBJECT_GI_SWORD_1",
+ 0x149: "OBJECT_UNSET_149",
+ 0x14A: "OBJECT_UNSET_14A",
+ 0x14B: "OBJECT_ZL4",
+ 0x14C: "OBJECT_LINK_GORON",
+ 0x14D: "OBJECT_LINK_ZORA",
+ 0x14E: "OBJECT_GRASSHOPPER",
+ 0x14F: "OBJECT_BOYO",
+ 0x150: "OBJECT_UNSET_150",
+ 0x151: "OBJECT_UNSET_151",
+ 0x152: "OBJECT_UNSET_152",
+ 0x153: "OBJECT_FWALL",
+ 0x154: "OBJECT_LINK_NUTS",
+ 0x155: "OBJECT_JSO",
+ 0x156: "OBJECT_KNIGHT",
+ 0x157: "OBJECT_ICICLE",
+ 0x158: "OBJECT_SPDWEB",
+ 0x159: "OBJECT_UNSET_159",
+ 0x15A: "OBJECT_BOSS01",
+ 0x15B: "OBJECT_BOSS02",
+ 0x15C: "OBJECT_BOSS03",
+ 0x15D: "OBJECT_BOSS04",
+ 0x15E: "OBJECT_BOSS05",
+ 0x15F: "OBJECT_BOSS06",
+ 0x160: "OBJECT_BOSS07",
+ 0x161: "OBJECT_RAF",
+ 0x162: "OBJECT_FUNEN",
+ 0x163: "OBJECT_RAILLIFT",
+ 0x164: "OBJECT_NUMA_OBJ",
+ 0x165: "OBJECT_FLOWERPOT",
+ 0x166: "OBJECT_SPINYROLL",
+ 0x167: "OBJECT_ICE_BLOCK",
+ 0x168: "OBJECT_UNSET_168",
+ 0x169: "OBJECT_KEIKOKU_DEMO",
+ 0x16A: "OBJECT_SLIME",
+ 0x16B: "OBJECT_PR",
+ 0x16C: "OBJECT_F52_OBJ",
+ 0x16D: "OBJECT_F53_OBJ",
+ 0x16E: "OBJECT_UNSET_16E",
+ 0x16F: "OBJECT_KIBAKO",
+ 0x170: "OBJECT_SEK",
+ 0x171: "OBJECT_GMO",
+ 0x172: "OBJECT_BAT",
+ 0x173: "OBJECT_SEKIHIL",
+ 0x174: "OBJECT_SEKIHIG",
+ 0x175: "OBJECT_SEKIHIN",
+ 0x176: "OBJECT_SEKIHIZ",
+ 0x177: "OBJECT_UNSET_177",
+ 0x178: "OBJECT_WIZ",
+ 0x179: "OBJECT_LADDER",
+ 0x17A: "OBJECT_MKK",
+ 0x17B: "OBJECT_UNSET_17B",
+ 0x17C: "OBJECT_UNSET_17C",
+ 0x17D: "OBJECT_UNSET_17D",
+ 0x17E: "OBJECT_KEIKOKU_OBJ",
+ 0x17F: "OBJECT_SICHITAI_OBJ",
+ 0x180: "OBJECT_DEKUCITY_ANA_OBJ",
+ 0x181: "OBJECT_RAT",
+ 0x182: "OBJECT_WATER_EFFECT",
+ 0x183: "OBJECT_UNSET_183",
+ 0x184: "OBJECT_DBLUE_OBJECT",
+ 0x185: "OBJECT_BAL",
+ 0x186: "OBJECT_WARP_UZU",
+ 0x187: "OBJECT_DRIFTICE",
+ 0x188: "OBJECT_FALL",
+ 0x189: "OBJECT_HANAREYAMA_OBJ",
+ 0x18A: "OBJECT_CRACE_OBJECT",
+ 0x18B: "OBJECT_DNQ",
+ 0x18C: "OBJECT_OBJ_TOKEIDAI",
+ 0x18D: "OBJECT_EG",
+ 0x18E: "OBJECT_TRU",
+ 0x18F: "OBJECT_TRT",
+ 0x190: "OBJECT_HAKUGIN_OBJ",
+ 0x191: "OBJECT_HORSE_GAME_CHECK",
+ 0x192: "OBJECT_STK",
+ 0x193: "OBJECT_UNSET_193",
+ 0x194: "OBJECT_UNSET_194",
+ 0x195: "OBJECT_MNK",
+ 0x196: "OBJECT_GI_BOTTLE_RED",
+ 0x197: "OBJECT_TOKEI_TOBIRA",
+ 0x198: "OBJECT_AZ",
+ 0x199: "OBJECT_TWIG",
+ 0x19A: "OBJECT_DEKUCITY_OBJ",
+ 0x19B: "OBJECT_PO_FUSEN",
+ 0x19C: "OBJECT_RACETSUBO",
+ 0x19D: "OBJECT_HA",
+ 0x19E: "OBJECT_BIGOKUTA",
+ 0x19F: "OBJECT_OPEN_OBJ",
+ 0x1A0: "OBJECT_FU_KAITEN",
+ 0x1A1: "OBJECT_FU_MATO",
+ 0x1A2: "OBJECT_MTORIDE",
+ 0x1A3: "OBJECT_OSN",
+ 0x1A4: "OBJECT_TOKEI_STEP",
+ 0x1A5: "OBJECT_LOTUS",
+ 0x1A6: "OBJECT_TL",
+ 0x1A7: "OBJECT_DKJAIL_OBJ",
+ 0x1A8: "OBJECT_VISIBLOCK",
+ 0x1A9: "OBJECT_TSN",
+ 0x1AA: "OBJECT_DS2N",
+ 0x1AB: "OBJECT_FSN",
+ 0x1AC: "OBJECT_SHN",
+ 0x1AD: "OBJECT_BIGICICLE",
+ 0x1AE: "OBJECT_GI_BOTTLE_15",
+ 0x1AF: "OBJECT_TK",
+ 0x1B0: "OBJECT_MARKET_OBJ",
+ 0x1B1: "OBJECT_GI_RESERVE00",
+ 0x1B2: "OBJECT_GI_RESERVE01",
+ 0x1B3: "OBJECT_LIGHTBLOCK",
+ 0x1B4: "OBJECT_TAKARAYA_OBJECTS",
+ 0x1B5: "OBJECT_WDHAND",
+ 0x1B6: "OBJECT_SDN",
+ 0x1B7: "OBJECT_SNOWWD",
+ 0x1B8: "OBJECT_GIANT",
+ 0x1B9: "OBJECT_COMB",
+ 0x1BA: "OBJECT_HANA",
+ 0x1BB: "OBJECT_BOSS_HAKUGIN",
+ 0x1BC: "OBJECT_MEGANEANA_OBJ",
+ 0x1BD: "OBJECT_GI_NUTSMASK",
+ 0x1BE: "OBJECT_STK2",
+ 0x1BF: "OBJECT_SPOT11_OBJ",
+ 0x1C0: "OBJECT_DANPEI_OBJECT",
+ 0x1C1: "OBJECT_DHOUSE",
+ 0x1C2: "OBJECT_HAKAISI",
+ 0x1C3: "OBJECT_PO",
+ 0x1C4: "OBJECT_SNOWMAN",
+ 0x1C5: "OBJECT_PO_SISTERS",
+ 0x1C6: "OBJECT_PP",
+ 0x1C7: "OBJECT_GORONSWITCH",
+ 0x1C8: "OBJECT_DELF",
+ 0x1C9: "OBJECT_BOTIHASIRA",
+ 0x1CA: "OBJECT_GI_BIGBOMB",
+ 0x1CB: "OBJECT_PST",
+ 0x1CC: "OBJECT_BSMASK",
+ 0x1CD: "OBJECT_SPIDERTENT",
+ 0x1CE: "OBJECT_ZORAEGG",
+ 0x1CF: "OBJECT_KBT",
+ 0x1D0: "OBJECT_GG",
+ 0x1D1: "OBJECT_MARUTA",
+ 0x1D2: "OBJECT_GHAKA",
+ 0x1D3: "OBJECT_OYU",
+ 0x1D4: "OBJECT_DNP",
+ 0x1D5: "OBJECT_DAI",
+ 0x1D6: "OBJECT_KGY",
+ 0x1D7: "OBJECT_FB",
+ 0x1D8: "OBJECT_TAISOU",
+ 0x1D9: "OBJECT_MASK_BU_SAN",
+ 0x1DA: "OBJECT_MASK_KI_TAN",
+ 0x1DB: "OBJECT_MASK_RABIT",
+ 0x1DC: "OBJECT_MASK_SKJ",
+ 0x1DD: "OBJECT_MASK_BAKURETU",
+ 0x1DE: "OBJECT_MASK_TRUTH",
+ 0x1DF: "OBJECT_GK",
+ 0x1E0: "OBJECT_HAKA_OBJ",
+ 0x1E1: "OBJECT_MASK_GORON",
+ 0x1E2: "OBJECT_MASK_ZORA",
+ 0x1E3: "OBJECT_MASK_NUTS",
+ 0x1E4: "OBJECT_MASK_BOY",
+ 0x1E5: "OBJECT_DNT",
+ 0x1E6: "OBJECT_YUKIYAMA",
+ 0x1E7: "OBJECT_ICEFLOE",
+ 0x1E8: "OBJECT_GI_GOLD_DUST",
+ 0x1E9: "OBJECT_GI_BOTTLE_16",
+ 0x1EA: "OBJECT_GI_BOTTLE_22",
+ 0x1EB: "OBJECT_BEE",
+ 0x1EC: "OBJECT_OT",
+ 0x1ED: "OBJECT_UTUBO",
+ 0x1EE: "OBJECT_DORA",
+ 0x1EF: "OBJECT_GI_LOACH",
+ 0x1F0: "OBJECT_GI_SEAHORSE",
+ 0x1F1: "OBJECT_BIGPO",
+ 0x1F2: "OBJECT_HARIKO",
+ 0x1F3: "OBJECT_DNO",
+ 0x1F4: "OBJECT_SINKAI_KABE",
+ 0x1F5: "OBJECT_KIN2_OBJ",
+ 0x1F6: "OBJECT_ISHI",
+ 0x1F7: "OBJECT_HAKUGIN_DEMO",
+ 0x1F8: "OBJECT_JG",
+ 0x1F9: "OBJECT_GI_SWORD_2",
+ 0x1FA: "OBJECT_GI_SWORD_3",
+ 0x1FB: "OBJECT_GI_SWORD_4",
+ 0x1FC: "OBJECT_UM",
+ 0x1FD: "OBJECT_MASK_GIBUDO",
+ 0x1FE: "OBJECT_MASK_JSON",
+ 0x1FF: "OBJECT_MASK_KERFAY",
+ 0x200: "OBJECT_MASK_BIGELF",
+ 0x201: "OBJECT_RB",
+ 0x202: "OBJECT_MBAR_OBJ",
+ 0x203: "OBJECT_IKANA_OBJ",
+ 0x204: "OBJECT_KZ",
+ 0x205: "OBJECT_TOKEI_TURRET",
+ 0x206: "OBJECT_ZOG",
+ 0x207: "OBJECT_ROTLIFT",
+ 0x208: "OBJECT_POSTHOUSE_OBJ",
+ 0x209: "OBJECT_GI_MASK09",
+ 0x20A: "OBJECT_GI_MASK14",
+ 0x20B: "OBJECT_GI_MASK15",
+ 0x20C: "OBJECT_INIBS_OBJECT",
+ 0x20D: "OBJECT_TREE",
+ 0x20E: "OBJECT_KAIZOKU_OBJ",
+ 0x20F: "OBJECT_GI_RESERVE_B_00",
+ 0x210: "OBJECT_GI_RESERVE_C_00",
+ 0x211: "OBJECT_ZOB",
+ 0x212: "OBJECT_MILKBAR",
+ 0x213: "OBJECT_DMASK",
+ 0x214: "OBJECT_MASK_KYOJIN",
+ 0x215: "OBJECT_GI_RESERVE_C_01",
+ 0x216: "OBJECT_ZOD",
+ 0x217: "OBJECT_KUMO30",
+ 0x218: "OBJECT_OBJ_YASI",
+ 0x219: "OBJECT_MASK_ROMERNY",
+ 0x21A: "OBJECT_TANRON1",
+ 0x21B: "OBJECT_TANRON2",
+ 0x21C: "OBJECT_TANRON3",
+ 0x21D: "OBJECT_GI_MAGICMUSHROOM",
+ 0x21E: "OBJECT_OBJ_CHAN",
+ 0x21F: "OBJECT_GI_MASK10",
+ 0x220: "OBJECT_ZOS",
+ 0x221: "OBJECT_MASK_POSTHAT",
+ 0x222: "OBJECT_F40_SWITCH",
+ 0x223: "OBJECT_LODMOON",
+ 0x224: "OBJECT_TRO",
+ 0x225: "OBJECT_GI_MASK12",
+ 0x226: "OBJECT_GI_MASK23",
+ 0x227: "OBJECT_GI_BOTTLE_21",
+ 0x228: "OBJECT_GI_CAMERA",
+ 0x229: "OBJECT_KAMEJIMA",
+ 0x22A: "OBJECT_HARFGIBUD",
+ 0x22B: "OBJECT_ZOV",
+ 0x22C: "OBJECT_HGDOOR",
+ 0x22D: "OBJECT_UNSET_22D",
+ 0x22E: "OBJECT_UNSET_22E",
+ 0x22F: "OBJECT_UNSET_22F",
+ 0x230: "OBJECT_DOR01",
+ 0x231: "OBJECT_DOR02",
+ 0x232: "OBJECT_DOR03",
+ 0x233: "OBJECT_DOR04",
+ 0x234: "OBJECT_LAST_OBJ",
+ 0x235: "OBJECT_REDEAD_OBJ",
+ 0x236: "OBJECT_IKNINSIDE_OBJ",
+ 0x237: "OBJECT_IKNV_OBJ",
+ 0x238: "OBJECT_PAMERA",
+ 0x239: "OBJECT_HSSTUMP",
+ 0x23A: "OBJECT_ZM",
+ 0x23B: "OBJECT_BIG_FWALL",
+ 0x23C: "OBJECT_SECOM_OBJ",
+ 0x23D: "OBJECT_HUNSUI",
+ 0x23E: "OBJECT_UCH",
+ 0x23F: "OBJECT_TANRON4",
+ 0x240: "OBJECT_TANRON5",
+ 0x241: "OBJECT_DT",
+ 0x242: "OBJECT_GI_MASK03",
+ 0x243: "OBJECT_CHA",
+ 0x244: "OBJECT_OBJ_DINNER",
+ 0x245: "OBJECT_GI_RESERVE_B_01",
+ 0x246: "OBJECT_LASTDAY",
+ 0x247: "OBJECT_BAI",
+ 0x248: "OBJECT_IN2",
+ 0x249: "OBJECT_IKN_DEMO",
+ 0x24A: "OBJECT_YB",
+ 0x24B: "OBJECT_RZ",
+ 0x24C: "OBJECT_MASK_ZACHO",
+ 0x24D: "OBJECT_GI_FIELDMAP",
+ 0x24E: "OBJECT_MASK_STONE",
+ 0x24F: "OBJECT_BJT",
+ 0x250: "OBJECT_TARU",
+ 0x251: "OBJECT_MOONSTON",
+ 0x252: "OBJECT_MASK_BREE",
+ 0x253: "OBJECT_GI_SCHEDULE",
+ 0x254: "OBJECT_GI_STONEMASK",
+ 0x255: "OBJECT_ZORABAND",
+ 0x256: "OBJECT_KEPN_KOYA",
+ 0x257: "OBJECT_OBJ_USIYANE",
+ 0x258: "OBJECT_GI_MASK05",
+ 0x259: "OBJECT_GI_MASK11",
+ 0x25A: "OBJECT_GI_MASK20",
+ 0x25B: "OBJECT_NNH",
+ 0x25C: "OBJECT_MASK_GERO",
+ 0x25D: "OBJECT_MASK_YOFUKASI",
+ 0x25E: "OBJECT_MASK_MEOTO",
+ 0x25F: "OBJECT_MASK_DANCER",
+ 0x260: "OBJECT_KZSAKU",
+ 0x261: "OBJECT_OBJ_MILK_BIN",
+ 0x262: "OBJECT_RANDOM_OBJ",
+ 0x263: "OBJECT_KUJIYA",
+ 0x264: "OBJECT_KITAN",
+ 0x265: "OBJECT_GI_MASK06",
+ 0x266: "OBJECT_GI_MASK16",
+ 0x267: "OBJECT_ASTR_OBJ",
+ 0x268: "OBJECT_BSB",
+ 0x269: "OBJECT_FALL2",
+ 0x26A: "OBJECT_STH",
+ 0x26B: "OBJECT_GI_MSSA",
+ 0x26C: "OBJECT_SMTOWER",
+ 0x26D: "OBJECT_GI_MASK21",
+ 0x26E: "OBJECT_YADO_OBJ",
+ 0x26F: "OBJECT_SYOTEN",
+ 0x270: "OBJECT_MOONEND",
+ 0x271: "OBJECT_OB",
+ 0x272: "OBJECT_GI_BOTTLE_04",
+ 0x273: "OBJECT_OBJ_DANPEILIFT",
+ 0x274: "OBJECT_WDOR01",
+ 0x275: "OBJECT_WDOR02",
+ 0x276: "OBJECT_WDOR03",
+ 0x277: "OBJECT_STK3",
+ 0x278: "OBJECT_KINSTA1_OBJ",
+ 0x279: "OBJECT_KINSTA2_OBJ",
+ 0x27A: "OBJECT_BH",
+ 0x27B: "OBJECT_WDOR04",
+ 0x27C: "OBJECT_WDOR05",
+ 0x27D: "OBJECT_GI_MASK17",
+ 0x27E: "OBJECT_GI_MASK22",
+ 0x27F: "OBJECT_LBFSHOT",
+ 0x280: "OBJECT_FUSEN",
+ 0x281: "OBJECT_ENDING_OBJ",
+ 0x282: "OBJECT_GI_MASK13",
+ 0x283: "OBJECT_ID_MAX",
+}
+
+@dataclasses.dataclass
+class GetItemEntry:
+ getItemId: int
+ itemId: int
+ field: int
+ gi: int
+ textId: int
+ objectId: int
+
+ def __str__(self) -> str:
+ itemId_name = itemId_names.get(self.itemId, f"NOT FOUND: 0x{self.itemId:X}")
+ gid = abs(self.gi) - 1
+ getitemDrawId_name = getItemDrawId_names.get(gid, f"NOT FOUND: 0x{abs(self.gi) - 1:X}")
+
+ if self.gi == 0:
+ chest_anim = 0
+ else:
+ chest_anim = "CHEST_ANIM_SHORT" if self.gi < 0 else "CHEST_ANIM_LONG"
+
+ objectId_name = objectId_names.get(self.objectId, f"NOT FOUND: 0x{abs(self.objectId):X}")
+
+ ret = f"/* 0x{self.getItemId:02X} */ GET_ITEM({itemId_name}, {objectId_name}, {getitemDrawId_name}, 0x{self.textId:X}, 0x{self.field:X}, {chest_anim})"
+
+ return ret
+
+def main() -> None:
+ description = "Extract and print the GetItem table"
+ epilog = ""
+
+ parser = argparse.ArgumentParser(description=description, epilog=epilog, formatter_class=argparse.RawTextHelpFormatter)
+ parser.add_argument("file", help="binary file to read")
+ parser.add_argument("offset", help="offset at which to start reading")
+ parser.add_argument("count", help="number of entries to extract")
+ parser.add_argument("-g", help="look further back for glitched items from Get Item Manipulation", action="store_true")
+
+ args = parser.parse_args()
+
+ start = int(args.offset, 0)
+ count = int(args.count, 0)
+ glitched = args.g
+ pos_start = 0
+
+ with open(args.file, "rb") as f:
+ if glitched:
+ start -= GETITEMENTRY_LENGTH * count
+ pos_start -= count
+ count *= 2
+
+ f.seek(start, os.SEEK_SET)
+ data = f.read(GETITEMENTRY_LENGTH * count)
+ unpacked_data = struct.iter_unpack(GETITEMENTRY_FORMAT, data)
+ get_item_entries: typing.List[GetItemEntry] = []
+
+ for i,entry in enumerate(unpacked_data):
+ get_item_entries.append(GetItemEntry(pos_start + i+1, *entry))
+
+ for entry in get_item_entries:
+ print(f"{entry},")
+
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/namefixer.py b/tools/namefixer.py
index a03cc06cf..417210d8f 100755
--- a/tools/namefixer.py
+++ b/tools/namefixer.py
@@ -18,10 +18,16 @@ simpleReplace = {
wordReplace = {
# Functions
"Actor_GetSwitchFlag": "Flags_GetSwitch",
- # "Math_FAtan2F": "Math_Atan2S_XY", // All old Math_FAtan2F should be renamed, so func_80086B30 can be renamed to Math_FAtan2F
"Math_Acot2F": "Math_Atan2F_XY",
"atan_flip": "Math_Atan2F_XY",
"atans": "Math_Atan2S",
+ "sin_rad": "Math_SinF",
+ "cos_rad": "Math_CosF",
+ "randPlusMinusPoint5Scaled": "Rand_CenteredFloat",
+ # "Math_FAtan2F": "Math_Atan2S_XY", // Old Math_FAtan2F was renamed
+ "func_80086B30": "Math_FAtan2F",
+ "func_80086760": "Math_FTanF",
+ "func_80086C48": "Math_FAcosF",
# "SysMatrix_StateAlloc": "Matrix_StateAlloc",
# "SysMatrix_StatePush": "Matrix_StatePush",
@@ -222,6 +228,7 @@ wordReplace = {
"SkelAnime_InitLink": "SkelAnime_InitPlayer",
"LinkAnimation_SetUpdateFunction": "PlayerAnimation_SetUpdateFunction",
"LinkAnimation_Update": "PlayerAnimation_Update",
+ "LinkAnimation_AnimateFrame": "PlayerAnimation_AnimateFrame",
"SkelAnime_SetTransition": "Animation_SetMorph",
"LinkAnimation_Change": "PlayerAnimation_Change",
"LinkAnimation_PlayOnce": "PlayerAnimation_PlayOnce",
@@ -706,6 +713,7 @@ wordReplace = {
"func_80158FB0": "Message_LoadTimeNES",
"func_8015926C": "Message_LoadOwlWarpTextNES",
"func_8015E750": "Message_FindCreditsMessage",
+ "func_80151BB4": "Message_BombersNotebookQueueEvent",
"func_80133038": "Schedule_RunScript",
"EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow",
@@ -742,6 +750,12 @@ wordReplace = {
"func_80102544": "LightContext_SetFog",
+ "func_800F3A64": "Horse_IsValidSpawn",
+ "func_800F3B2C": "Horse_ResetHorseData",
+ "func_800F40A0": "Horse_Spawn",
+ "func_800F415C": "Horse_RotateToPoint",
+ "func_800F41E4": "Horse_IsActive",
+
"Padmgr_GetControllerBitmask": "PadMgr_GetValidControllersMask",
"func_80174F24": "PadMgr_SetRumbleRetraceCallback",
"func_80174F44": "PadMgr_UnsetRumbleRetraceCallback",
@@ -764,6 +778,70 @@ wordReplace = {
"Padmgr_Stop": "PadMgr_HandlePreNMI",
"func_80175E68": "PadMgr_GetInputNoLock",
+ "Gfx_CallSetupDL": "Gfx_SetupDL",
+ "func_8012BFC4": "Gfx_SetupDL57",
+ "func_8012BFEC": "Gfx_SetupDL57_b",
+ "func_8012C014": "Gfx_SetupDL52_NoCD",
+ "func_8012C058": "Gfx_SetupDL58_Opa",
+ "func_8012C080": "Gfx_SetupDL57_Opa",
+ "func_8012C0A8": "Gfx_SetupDL50_Opa",
+ "func_8012C0D0": "Gfx_SetupDL51_Opa",
+ "func_8012C0F8": "Gfx_SetupDL52_Xlu",
+ "func_8012C120": "Gfx_SetupDL53_Opa",
+ "func_8012C148": "Gfx_SetupDL54_Opa",
+ "func_8012C170": "Gfx_SetupDL55_Xlu",
+ "func_8012C198": "Gfx_SetupDL26",
+ "func_8012C1C0": "Gfx_SetupDL26_Opa",
+ "func_8012C1EC": "Gfx_SetupDL23",
+ "func_8012C214": "Gfx_SetupDL23_Opa",
+ "func_8012C240": "Gfx_SetupDL25_Xlu2",
+ "func_8012C28C": "Gfx_SetupDL25_Opa",
+ "func_8012C2B4": "Gfx_SetupDL71",
+ "func_8012C2DC": "Gfx_SetupDL25_Xlu",
+ "func_8012C304": "Gfx_SetupDL72",
+ "func_8012C32C": "Gfx_SetupDL31_Opa",
+ "func_8012C354": "Gfx_SetupDL32_Opa",
+ "func_8012C37C": "Gfx_SetupDL33_Opa",
+ "func_8012C3A4": "Gfx_SetupDL64",
+ "func_8012C3CC": "Gfx_SetupDL34",
+ "func_8012C3F4": "Gfx_SetupDL34_Opa",
+ "func_8012C420": "Gfx_SetupDL35_Opa",
+ "func_8012C448": "Gfx_SetupDL44_Xlu",
+ "func_8012C470": "Gfx_SetupDL36_Opa",
+ "func_8012C498": "Gfx_SetupDL28",
+ "func_8012C4C0": "Gfx_SetupDL28_Opa",
+ "func_8012C4E8": "Gfx_SetupDL43_Opa",
+ "func_8012C510": "Gfx_SetupDL45_Opa",
+ "func_8012C538": "Gfx_SetupDL46_Overlay",
+ "func_8012C560": "Gfx_SetupDL38_Xlu",
+ "func_8012C588": "Gfx_SetupDL4_Xlu",
+ "func_8012C5B0": "Gfx_SetupDL37_Opa",
+ "func_8012C5D8": "Gfx_SetupDL2_Opa",
+ "func_8012C600": "Gfx_SetupDL39",
+ "func_8012C628": "Gfx_SetupDL39_Opa",
+ "func_8012C654": "Gfx_SetupDL39_Overlay",
+ "func_8012C680": "Gfx_SetupDL39_Ptr",
+ "func_8012C6AC": "Gfx_SetupDL40_Opa",
+ "func_8012C6D4": "Gfx_SetupDL41_Opa",
+ "func_8012C6FC": "Gfx_SetupDL47_Xlu",
+ "func_8012C724": "Gfx_SetupDL66",
+ "func_8012C74C": "Gfx_SetupDL67",
+ "func_8012C774": "Gfx_SetupDL68_NoCD",
+ "func_8012C7B8": "Gfx_SetupDL69_NoCD",
+ "func_8012C7FC": "Gfx_SetupDL65_NoCD",
+ "func_8012C840": "Gfx_SetupDL70",
+ "func_8012C868": "Gfx_SetupDL20_NoCD",
+ "func_8012C8AC": "Gfx_SetupDL42_Opa",
+ "func_8012C8D4": "Gfx_SetupDL42_Overlay",
+ "func_8012C8FC": "Gfx_SetupDL48_Opa",
+ "func_8012C924": "Gfx_SetupDL49_Xlu",
+ "func_8012C94C": "Gfx_SetupDL27_Xlu",
+ "func_8012C974": "Gfx_SetupDL60_XluNoCD",
+ "func_8012C9BC": "Gfx_SetupDL61_Xlu",
+ "func_8012C9E4": "Gfx_SetupDL56_Opa",
+ "func_8012CA0C": "Gfx_SetupDL56_Ptr",
+ "func_8012CA38": "Gfx_SetupDL59_Opa",
+
# Structs
"ActorAnimationEntry": "AnimationInfo",
"ActorAnimationEntryS": "AnimationInfoS",
@@ -903,6 +981,7 @@ wordReplace = {
"player->swordInfo": "player->meleeWeaponInfo",
"player->itemActionParam": "player->heldItemAction",
"player->heldItemActionParam": "player->itemAction",
+ "player->unk_A86": "player->currentActorCsIndex",
"player->unk_A9C": "player->secretRumbleCharge",
"player->unk_AA0": "player->closestSecretDistSq",
"player->unk_AAC": "player->headLimbRot",
@@ -911,6 +990,8 @@ wordReplace = {
"player->getItemDrawId": "player->getItemDrawIdPlusOne",
"player->unk_B68": "player->fallStartHeight",
"player->unk_B6A": "player->fallDistance",
+ "player->unk_B80": "player->pushedSpeed",
+ "player->unk_B84": "player->pushedYaw",
"player->targetActor": "player->talkActor",
"player->targetActorDistance": "player->talkActorDistance",
"player->unk_730": "player->targetedActor",
@@ -963,6 +1044,9 @@ wordReplace = {
"play->nextEntranceIndex": "play->nextEntrance",
"play->sceneNum": "play->sceneId",
"play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen",
+ "play->sceneLoadFlag": "play->transitionTrigger",
+ "play->unk_18B4A": "play->transitionMode",
+ "play->unk_1887F": "play->transitionType",
"play->playerActorCsIds": "play->playerCsIds",
"play->envFlags": "play->cutsceneFlags",
"play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1",
@@ -987,19 +1071,22 @@ wordReplace = {
"gSaveContext.unk_3E50": "gSaveContext.timerStartOsTimes",
"gSaveContext.unk_3E88": "gSaveContext.timerStopTimes",
"gSaveContext.unk_3EC0": "gSaveContext.timerPausedOsTimes",
-
- "play->sceneLoadFlag": "play->transitionTrigger",
- "play->unk_18B4A": "play->transitionMode",
- "play->unk_1887F": "play->transitionType",
"gSaveContext.nextTransition": "gSaveContext.nextTransitionType",
"gSaveContext.unk_3F48": "gSaveContext.cutsceneTransitionControl",
"gSaveContext.fadeDuration": "gSaveContext.transFadeDuration",
"gSaveContext.fadeSpeed": "gSaveContext.transWipeSpeed",
+ "path->unk1": "path->additionalPathIndex",
+ "path->unk2": "path->customValue",
+
"D_801D15B0": "gZeroVec3f",
"D_801D15BC": "gZeroVec3s",
"D_801D1DE0": "gIdentityMtx",
"D_801D1E20": "gIdentityMtxF",
+ "sSetupDL": "gSetupDLs",
+
+ "D_801BDA9C": "gHorseIsMounted",
+ "D_801BDAA4": "gHorsePlayedEponasSong",
# Macros
"CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE",
diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml
index 5f42d30d6..efa3bc2fe 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -5,6 +5,8 @@ compiler_type = "ido"
"gs[DS]P.*" = "void"
"gDma.*" = "void"
"G_IM_SIZ_.*" = "int"
+"G_IM_FMT_.*" = "int"
+"G_TX_.*" = "int"
"G_[AC]C.*" = "int"
LOG = "void"
SET_FULLSCREEN_VIEWPORT = "void"
diff --git a/tools/progress.py b/tools/progress.py
index 5a2958cd8..9096715aa 100755
--- a/tools/progress.py
+++ b/tools/progress.py
@@ -136,7 +136,6 @@ if not args.matching:
# The order of this list should not change to prevent breaking the graph of the website
# New stuff shall be appended at the end of the list
assetsCategories = [
- "archives",
"audio",
"interface",
"misc",
@@ -148,6 +147,11 @@ assetsCategories = [
]
assetsTracker = dict()
+# Assets that we don't have a proper way of tracking right now
+ignoredAssets = {
+ "archives",
+}
+
# Manual fixer for files that would be counted in wrong categories
# "filename": "correctSection"
fileSectionFixer = {
@@ -203,12 +207,12 @@ for line in map_file:
file_size = int(line_split[2], 16)
obj_file = line_split[3].strip()
objFileSplit = obj_file.split("/")
+ objFileName = objFileSplit[-1].split(".o")[0]
fileData = {"name": obj_file, "vram": obj_vram, "size": file_size, "section": section, "symbols": []}
mapFileList.append(fileData)
if (section == ".text"):
- objFileName = objFileSplit[-1].split(".o")[0]
srcCat = obj_file.split("/")[2]
if srcCat in srcCategoriesFixer:
srcCat = srcCategoriesFixer[srcCat]
@@ -229,6 +233,8 @@ for line in map_file:
assetCat = obj_file.split("/")[2]
if assetCat in assetsTracker:
assetsTracker[assetCat]["currentSize"] += file_size
+ elif assetCat in ignoredAssets:
+ pass
else:
eprint(f"Found file '{obj_file}' in unknown asset category '{assetCat}'")
eprint("I'll ignore this for now, but please fix it!")
diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv
index bbcf6d5de..ecc9eed27 100644
--- a/tools/sizes/boot_functions.csv
+++ b/tools/sizes/boot_functions.csv
@@ -154,48 +154,48 @@ asm/non_matchings/boot/mtxuty-cvt/MtxConv_F2L.s,MtxConv_F2L,0x80086110,0x52
asm/non_matchings/boot/mtxuty-cvt/MtxConv_L2F.s,MtxConv_L2F,0x80086258,0xA
asm/non_matchings/boot/assert/__assert.s,__assert,0x80086280,0xD
asm/non_matchings/boot/assert/func_800862B4.s,func_800862B4,0x800862B4,0xB
-asm/non_matchings/boot/boot_800862E0/SystemArena_MallocMin1.s,SystemArena_MallocMin1,0x800862E0,0xC
-asm/non_matchings/boot/boot_800862E0/SystemArena_FreeNullCheck.s,SystemArena_FreeNullCheck,0x80086310,0xB
-asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc.s,SystemArena_RunBlockFunc,0x8008633C,0x1C
-asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1.s,SystemArena_RunBlockFunc1,0x800863AC,0x1C
-asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc8.s,SystemArena_RunBlockFunc8,0x8008641C,0x34
-asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1Reverse.s,SystemArena_RunBlockFunc1Reverse,0x800864EC,0x27
-asm/non_matchings/boot/boot_800862E0/SystemArena_RunInits.s,SystemArena_RunInits,0x80086588,0x1C
-asm/non_matchings/boot/boot_800862E0/SystemArena_Init.s,SystemArena_Init,0x800865F8,0xA
+asm/non_matchings/boot/boot_800862E0/SystemHeap_Malloc.s,SystemHeap_Malloc,0x800862E0,0xC
+asm/non_matchings/boot/boot_800862E0/SystemArena_Free.s,SystemArena_Free,0x80086310,0xB
+asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc.s,SystemHeap_RunBlockFunc,0x8008633C,0x1C
+asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1.s,SystemHeap_RunBlockFunc1,0x800863AC,0x1C
+asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc8.s,SystemHeap_RunBlockFunc8,0x8008641C,0x34
+asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHeap_RunBlockFunc1Reverse,0x800864EC,0x27
+asm/non_matchings/boot/boot_800862E0/SystemHeap_RunInits.s,SystemHeap_RunInits,0x80086588,0x1C
+asm/non_matchings/boot/boot_800862E0/SystemHeap_Init.s,SystemHeap_Init,0x800865F8,0xA
asm/non_matchings/boot/padsetup/PadSetup_Init.s,PadSetup_Init,0x80086620,0x50
-asm/non_matchings/boot/boot_80086760/func_80086760.s,func_80086760,0x80086760,0xD
-asm/non_matchings/boot/boot_80086760/func_80086794.s,func_80086794,0x80086794,0x8
-asm/non_matchings/boot/boot_80086760/func_800867B4.s,func_800867B4,0x800867B4,0x8
-asm/non_matchings/boot/boot_80086760/func_800867D4.s,func_800867D4,0x800867D4,0x8
-asm/non_matchings/boot/boot_80086760/func_800867F4.s,func_800867F4,0x800867F4,0x8
-asm/non_matchings/boot/boot_80086760/func_80086814.s,func_80086814,0x80086814,0x8
-asm/non_matchings/boot/boot_80086760/func_80086834.s,func_80086834,0x80086834,0x13
-asm/non_matchings/boot/boot_80086760/func_80086880.s,func_80086880,0x80086880,0x49
-asm/non_matchings/boot/boot_80086760/func_800869A4.s,func_800869A4,0x800869A4,0x53
-asm/non_matchings/boot/boot_80086760/func_80086AF0.s,func_80086AF0,0x80086AF0,0x10
-asm/non_matchings/boot/boot_80086760/func_80086B30.s,func_80086B30,0x80086B30,0x3A
-asm/non_matchings/boot/boot_80086760/func_80086C18.s,func_80086C18,0x80086C18,0xC
-asm/non_matchings/boot/boot_80086760/func_80086C48.s,func_80086C48,0x80086C48,0xA
-asm/non_matchings/boot/fp/func_80086C70.s,func_80086C70,0x80086C70,0x3
-asm/non_matchings/boot/fp/func_80086C7C.s,func_80086C7C,0x80086C7C,0x3
-asm/non_matchings/boot/fp/func_80086C88.s,func_80086C88,0x80086C88,0x4
-asm/non_matchings/boot/fp/func_80086C98.s,func_80086C98,0x80086C98,0x4
-asm/non_matchings/boot/fp/func_80086CA8.s,func_80086CA8,0x80086CA8,0x3
-asm/non_matchings/boot/fp/func_80086CB4.s,func_80086CB4,0x80086CB4,0x3
-asm/non_matchings/boot/fp/func_80086CC0.s,func_80086CC0,0x80086CC0,0x4
-asm/non_matchings/boot/fp/func_80086CD0.s,func_80086CD0,0x80086CD0,0x4
-asm/non_matchings/boot/fp/func_80086CE0.s,func_80086CE0,0x80086CE0,0x3
-asm/non_matchings/boot/fp/func_80086CEC.s,func_80086CEC,0x80086CEC,0x3
-asm/non_matchings/boot/fp/func_80086CF8.s,func_80086CF8,0x80086CF8,0x4
-asm/non_matchings/boot/fp/func_80086D08.s,func_80086D08,0x80086D08,0x4
-asm/non_matchings/boot/fp/func_80086D18.s,func_80086D18,0x80086D18,0x3
-asm/non_matchings/boot/fp/func_80086D24.s,func_80086D24,0x80086D24,0x3
-asm/non_matchings/boot/fp/func_80086D30.s,func_80086D30,0x80086D30,0x4
-asm/non_matchings/boot/fp/func_80086D40.s,func_80086D40,0x80086D40,0x4
-asm/non_matchings/boot/fp/func_80086D50.s,func_80086D50,0x80086D50,0x7
-asm/non_matchings/boot/fp/func_80086D6C.s,func_80086D6C,0x80086D6C,0x8
-asm/non_matchings/boot/fp/func_80086D8C.s,func_80086D8C,0x80086D8C,0x8
-asm/non_matchings/boot/fp/func_80086DAC.s,func_80086DAC,0x80086DAC,0x9
+asm/non_matchings/boot/boot_80086760/Math_FTanF.s,Math_FTanF,0x80086760,0xD
+asm/non_matchings/boot/boot_80086760/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8
+asm/non_matchings/boot/boot_80086760/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8
+asm/non_matchings/boot/boot_80086760/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8
+asm/non_matchings/boot/boot_80086760/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8
+asm/non_matchings/boot/boot_80086760/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8
+asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13
+asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49
+asm/non_matchings/boot/boot_80086760/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53
+asm/non_matchings/boot/boot_80086760/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10
+asm/non_matchings/boot/boot_80086760/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A
+asm/non_matchings/boot/boot_80086760/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC
+asm/non_matchings/boot/boot_80086760/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA
+asm/non_matchings/boot/fp/floorf.s,floorf,0x80086C70,0x3
+asm/non_matchings/boot/fp/floor.s,floor,0x80086C7C,0x3
+asm/non_matchings/boot/fp/lfloorf.s,lfloorf,0x80086C88,0x4
+asm/non_matchings/boot/fp/lfloor.s,lfloor,0x80086C98,0x4
+asm/non_matchings/boot/fp/ceilf.s,ceilf,0x80086CA8,0x3
+asm/non_matchings/boot/fp/ceil.s,ceil,0x80086CB4,0x3
+asm/non_matchings/boot/fp/lceilf.s,lceilf,0x80086CC0,0x4
+asm/non_matchings/boot/fp/lceil.s,lceil,0x80086CD0,0x4
+asm/non_matchings/boot/fp/truncf.s,truncf,0x80086CE0,0x3
+asm/non_matchings/boot/fp/trunc.s,trunc,0x80086CEC,0x3
+asm/non_matchings/boot/fp/ltruncf.s,ltruncf,0x80086CF8,0x4
+asm/non_matchings/boot/fp/ltrunc.s,ltrunc,0x80086D08,0x4
+asm/non_matchings/boot/fp/nearbyintf.s,nearbyintf,0x80086D18,0x3
+asm/non_matchings/boot/fp/nearbyint.s,nearbyint,0x80086D24,0x3
+asm/non_matchings/boot/fp/lnearbyintf.s,lnearbyintf,0x80086D30,0x4
+asm/non_matchings/boot/fp/lnearbyint.s,lnearbyint,0x80086D40,0x4
+asm/non_matchings/boot/fp/roundf.s,roundf,0x80086D50,0x7
+asm/non_matchings/boot/fp/round.s,round,0x80086D6C,0x8
+asm/non_matchings/boot/fp/lroundf.s,lroundf,0x80086D8C,0x8
+asm/non_matchings/boot/fp/lround.s,lround,0x80086DAC,0x9
asm/non_matchings/boot/system_malloc/SystemArena_Malloc.s,SystemArena_Malloc,0x80086DD0,0xA
asm/non_matchings/boot/system_malloc/SystemArena_MallocR.s,SystemArena_MallocR,0x80086DF8,0xA
asm/non_matchings/boot/system_malloc/SystemArena_Realloc.s,SystemArena_Realloc,0x80086E20,0xC
@@ -203,7 +203,7 @@ asm/non_matchings/boot/system_malloc/SystemArena_Free.s,SystemArena_Free,0x80086
asm/non_matchings/boot/system_malloc/SystemArena_Calloc.s,SystemArena_Calloc,0x80086E78,0x15
asm/non_matchings/boot/system_malloc/SystemArena_GetSizes.s,SystemArena_GetSizes,0x80086ECC,0xE
asm/non_matchings/boot/system_malloc/SystemArena_CheckArena.s,SystemArena_CheckArena,0x80086F04,0x9
-asm/non_matchings/boot/system_malloc/SystemArena_InitArena.s,SystemArena_InitArena,0x80086F28,0xC
+asm/non_matchings/boot/system_malloc/SystemArena_Init.s,SystemArena_Init,0x80086F28,0xC
asm/non_matchings/boot/system_malloc/SystemArena_Cleanup.s,SystemArena_Cleanup,0x80086F58,0x9
asm/non_matchings/boot/system_malloc/SystemArena_IsInitialized.s,SystemArena_IsInitialized,0x80086F7C,0x9
asm/non_matchings/boot/rand/Rand_Next.s,Rand_Next,0x80086FA0,0xC
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index ba751f02a..42d1e5f0b 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -257,7 +257,7 @@ asm/non_matchings/code/z_actor/func_800B715C.s,func_800B715C,0x800B715C,0x5
asm/non_matchings/code/z_actor/Actor_SetCameraHorseSetting.s,Actor_SetCameraHorseSetting,0x800B7170,0x1B
asm/non_matchings/code/z_actor/Actor_MountHorse.s,Actor_MountHorse,0x800B71DC,0x9
asm/non_matchings/code/z_actor/func_800B7200.s,func_800B7200,0x800B7200,0xB
-asm/non_matchings/code/z_actor/func_800B722C.s,func_800B722C,0x800B722C,0x8
+asm/non_matchings/code/z_actor/Actor_SpawnHorse.s,Actor_SpawnHorse,0x800B722C,0x8
asm/non_matchings/code/z_actor/func_800B724C.s,func_800B724C,0x800B724C,0x13
asm/non_matchings/code/z_actor/func_800B7298.s,func_800B7298,0x800B7298,0x12
asm/non_matchings/code/z_actor/func_800B72E0.s,func_800B72E0,0x800B72E0,0x6
@@ -1197,16 +1197,16 @@ asm/non_matchings/code/z_fireobj/FireObj_Init.s,FireObj_Init,0x800F36CC,0x39
asm/non_matchings/code/z_fireobj/FireObj_Fini.s,FireObj_Fini,0x800F37B0,0x10
asm/non_matchings/code/z_fireobj/FireObj_SetState2.s,FireObj_SetState2,0x800F37F0,0xC
asm/non_matchings/code/z_fireobj/FireObj_Update.s,FireObj_Update,0x800F3820,0x48
-asm/non_matchings/code/z_horse/func_800F3940.s,func_800F3940,0x800F3940,0x1D
-asm/non_matchings/code/z_horse/func_800F39B4.s,func_800F39B4,0x800F39B4,0x2C
-asm/non_matchings/code/z_horse/func_800F3A64.s,func_800F3A64,0x800F3A64,0x32
-asm/non_matchings/code/z_horse/func_800F3B2C.s,func_800F3B2C,0x800F3B2C,0xF
-asm/non_matchings/code/z_horse/func_800F3B68.s,func_800F3B68,0x800F3B68,0x37
-asm/non_matchings/code/z_horse/func_800F3C44.s,func_800F3C44,0x800F3C44,0xA4
-asm/non_matchings/code/z_horse/func_800F3ED4.s,func_800F3ED4,0x800F3ED4,0x73
-asm/non_matchings/code/z_horse/func_800F40A0.s,func_800F40A0,0x800F40A0,0x2F
-asm/non_matchings/code/z_horse/func_800F415C.s,func_800F415C,0x800F415C,0x22
-asm/non_matchings/code/z_horse/func_800F41E4.s,func_800F41E4,0x800F41E4,0x2F
+asm/non_matchings/code/z_horse/Horse_GetJumpingFencePathIndex.s,Horse_GetJumpingFencePathIndex,0x800F3940,0x1D
+asm/non_matchings/code/z_horse/Horse_CopyPointFromPathList.s,Horse_CopyPointFromPathList,0x800F39B4,0x2C
+asm/non_matchings/code/z_horse/Horse_IsValidSpawn.s,Horse_IsValidSpawn,0x800F3A64,0x32
+asm/non_matchings/code/z_horse/Horse_ResetHorseData.s,Horse_ResetHorseData,0x800F3B2C,0xF
+asm/non_matchings/code/z_horse/Horse_IsValidSceneLayer.s,Horse_IsValidSceneLayer,0x800F3B68,0x37
+asm/non_matchings/code/z_horse/Horse_SpawnOverworld.s,Horse_SpawnOverworld,0x800F3C44,0xA4
+asm/non_matchings/code/z_horse/Horse_SpawnMinigame.s,Horse_SpawnMinigame,0x800F3ED4,0x73
+asm/non_matchings/code/z_horse/Horse_Spawn.s,Horse_Spawn,0x800F40A0,0x2F
+asm/non_matchings/code/z_horse/Horse_RotateToPoint.s,Horse_RotateToPoint,0x800F415C,0x22
+asm/non_matchings/code/z_horse/Horse_IsActive.s,Horse_IsActive,0x800F41E4,0x2F
asm/non_matchings/code/z_jpeg/Jpeg_ScheduleDecoderTask.s,Jpeg_ScheduleDecoderTask,0x800F42A0,0x47
asm/non_matchings/code/z_jpeg/Jpeg_CopyToZbuffer.s,Jpeg_CopyToZbuffer,0x800F43BC,0x4E
asm/non_matchings/code/z_jpeg/Jpeg_GetUnalignedU16.s,Jpeg_GetUnalignedU16,0x800F44F4,0x13
@@ -1221,7 +1221,7 @@ asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54,
asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11
asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23
asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11
-asm/non_matchings/code/z_kankyo/func_800F50D4.s,func_800F50D4,0x800F50D4,0xE
+asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE
asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212
asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E
asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21
@@ -1265,10 +1265,10 @@ asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,
asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s,Environment_DrawSandstorm,0x800FC64C,0x31A
asm/non_matchings/code/z_kankyo/func_800FD2B4.s,func_800FD2B4,0x800FD2B4,0xA1
asm/non_matchings/code/z_kankyo/func_800FD538.s,func_800FD538,0x800FD538,0x19
-asm/non_matchings/code/z_kankyo/func_800FD59C.s,func_800FD59C,0x800FD59C,0x11
-asm/non_matchings/code/z_kankyo/func_800FD5E0.s,func_800FD5E0,0x800FD5E0,0x1D
-asm/non_matchings/code/z_kankyo/func_800FD654.s,func_800FD654,0x800FD654,0x11
-asm/non_matchings/code/z_kankyo/func_800FD698.s,func_800FD698,0x800FD698,0x22
+asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s,Environment_LerpAmbientColor,0x800FD59C,0x11
+asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s,Environment_LerpDiffuseColor,0x800FD5E0,0x1D
+asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s,Environment_LerpFogColor,0x800FD654,0x11
+asm/non_matchings/code/z_kankyo/Environment_LerpFog.s,Environment_LerpFog,0x800FD698,0x22
asm/non_matchings/code/z_kankyo/get_days_elapsed.s,get_days_elapsed,0x800FD720,0x4
asm/non_matchings/code/z_kankyo/reset_days_elapsed.s,reset_days_elapsed,0x800FD730,0x4
asm/non_matchings/code/z_kankyo/get_current_day.s,get_current_day,0x800FD740,0x4
@@ -1828,72 +1828,72 @@ asm/non_matchings/code/z_quake/Quake_GetNumActiveQuakes.s,Quake_GetNumActiveQuak
asm/non_matchings/code/z_rcp/Gfx_SetFog.s,Gfx_SetFog,0x8012BC50,0x4F
asm/non_matchings/code/z_rcp/Gfx_SetFogWithSync.s,Gfx_SetFogWithSync,0x8012BD8C,0x5F
asm/non_matchings/code/z_rcp/Gfx_SetFog2.s,Gfx_SetFog2,0x8012BF08,0xD
-asm/non_matchings/code/z_rcp/Gfx_CallSetupDLImpl.s,Gfx_CallSetupDLImpl,0x8012BF3C,0xF
-asm/non_matchings/code/z_rcp/Gfx_CallSetupDL.s,Gfx_CallSetupDL,0x8012BF78,0x8
-asm/non_matchings/code/z_rcp/Gfx_CallSetupDLAtPtr.s,Gfx_CallSetupDLAtPtr,0x8012BF98,0xB
-asm/non_matchings/code/z_rcp/func_8012BFC4.s,func_8012BFC4,0x8012BFC4,0xA
-asm/non_matchings/code/z_rcp/func_8012BFEC.s,func_8012BFEC,0x8012BFEC,0xA
-asm/non_matchings/code/z_rcp/func_8012C014.s,func_8012C014,0x8012C014,0x11
-asm/non_matchings/code/z_rcp/func_8012C058.s,func_8012C058,0x8012C058,0xA
-asm/non_matchings/code/z_rcp/func_8012C080.s,func_8012C080,0x8012C080,0xA
-asm/non_matchings/code/z_rcp/func_8012C0A8.s,func_8012C0A8,0x8012C0A8,0xA
-asm/non_matchings/code/z_rcp/func_8012C0D0.s,func_8012C0D0,0x8012C0D0,0xA
-asm/non_matchings/code/z_rcp/func_8012C0F8.s,func_8012C0F8,0x8012C0F8,0xA
-asm/non_matchings/code/z_rcp/func_8012C120.s,func_8012C120,0x8012C120,0xA
-asm/non_matchings/code/z_rcp/func_8012C148.s,func_8012C148,0x8012C148,0xA
-asm/non_matchings/code/z_rcp/func_8012C170.s,func_8012C170,0x8012C170,0xA
-asm/non_matchings/code/z_rcp/func_8012C198.s,func_8012C198,0x8012C198,0xA
-asm/non_matchings/code/z_rcp/func_8012C1C0.s,func_8012C1C0,0x8012C1C0,0xB
-asm/non_matchings/code/z_rcp/func_8012C1EC.s,func_8012C1EC,0x8012C1EC,0xA
-asm/non_matchings/code/z_rcp/func_8012C214.s,func_8012C214,0x8012C214,0xB
-asm/non_matchings/code/z_rcp/func_8012C240.s,func_8012C240,0x8012C240,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDLImpl.s,Gfx_SetupDLImpl,0x8012BF3C,0xF
+asm/non_matchings/code/z_rcp/Gfx_SetupDL.s,Gfx_SetupDL,0x8012BF78,0x8
+asm/non_matchings/code/z_rcp/Gfx_SetupDLAtPtr.s,Gfx_SetupDLAtPtr,0x8012BF98,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL57.s,Gfx_SetupDL57,0x8012BFC4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL57_b.s,Gfx_SetupDL57_b,0x8012BFEC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL52_NoCD.s,Gfx_SetupDL52_NoCD,0x8012C014,0x11
+asm/non_matchings/code/z_rcp/Gfx_SetupDL58_Opa.s,Gfx_SetupDL58_Opa,0x8012C058,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL57_Opa.s,Gfx_SetupDL57_Opa,0x8012C080,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL50_Opa.s,Gfx_SetupDL50_Opa,0x8012C0A8,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL51_Opa.s,Gfx_SetupDL51_Opa,0x8012C0D0,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL52_Xlu.s,Gfx_SetupDL52_Xlu,0x8012C0F8,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL53_Opa.s,Gfx_SetupDL53_Opa,0x8012C120,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL54_Opa.s,Gfx_SetupDL54_Opa,0x8012C148,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL55_Xlu.s,Gfx_SetupDL55_Xlu,0x8012C170,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL26.s,Gfx_SetupDL26,0x8012C198,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL26_Opa.s,Gfx_SetupDL26_Opa,0x8012C1C0,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL23.s,Gfx_SetupDL23,0x8012C1EC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL23_Opa.s,Gfx_SetupDL23_Opa,0x8012C214,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu2.s,Gfx_SetupDL25_Xlu2,0x8012C240,0xA
asm/non_matchings/code/z_rcp/func_8012C268.s,func_8012C268,0x8012C268,0x9
-asm/non_matchings/code/z_rcp/func_8012C28C.s,func_8012C28C,0x8012C28C,0xA
-asm/non_matchings/code/z_rcp/func_8012C2B4.s,func_8012C2B4,0x8012C2B4,0xA
-asm/non_matchings/code/z_rcp/func_8012C2DC.s,func_8012C2DC,0x8012C2DC,0xA
-asm/non_matchings/code/z_rcp/func_8012C304.s,func_8012C304,0x8012C304,0xA
-asm/non_matchings/code/z_rcp/func_8012C32C.s,func_8012C32C,0x8012C32C,0xA
-asm/non_matchings/code/z_rcp/func_8012C354.s,func_8012C354,0x8012C354,0xA
-asm/non_matchings/code/z_rcp/func_8012C37C.s,func_8012C37C,0x8012C37C,0xA
-asm/non_matchings/code/z_rcp/func_8012C3A4.s,func_8012C3A4,0x8012C3A4,0xA
-asm/non_matchings/code/z_rcp/func_8012C3CC.s,func_8012C3CC,0x8012C3CC,0xA
-asm/non_matchings/code/z_rcp/func_8012C3F4.s,func_8012C3F4,0x8012C3F4,0xB
-asm/non_matchings/code/z_rcp/func_8012C420.s,func_8012C420,0x8012C420,0xA
-asm/non_matchings/code/z_rcp/func_8012C448.s,func_8012C448,0x8012C448,0xA
-asm/non_matchings/code/z_rcp/func_8012C470.s,func_8012C470,0x8012C470,0xA
-asm/non_matchings/code/z_rcp/func_8012C498.s,func_8012C498,0x8012C498,0xA
-asm/non_matchings/code/z_rcp/func_8012C4C0.s,func_8012C4C0,0x8012C4C0,0xA
-asm/non_matchings/code/z_rcp/func_8012C4E8.s,func_8012C4E8,0x8012C4E8,0xA
-asm/non_matchings/code/z_rcp/func_8012C510.s,func_8012C510,0x8012C510,0xA
-asm/non_matchings/code/z_rcp/func_8012C538.s,func_8012C538,0x8012C538,0xA
-asm/non_matchings/code/z_rcp/func_8012C560.s,func_8012C560,0x8012C560,0xA
-asm/non_matchings/code/z_rcp/func_8012C588.s,func_8012C588,0x8012C588,0xA
-asm/non_matchings/code/z_rcp/func_8012C5B0.s,func_8012C5B0,0x8012C5B0,0xA
-asm/non_matchings/code/z_rcp/func_8012C5D8.s,func_8012C5D8,0x8012C5D8,0xA
-asm/non_matchings/code/z_rcp/func_8012C600.s,func_8012C600,0x8012C600,0xA
-asm/non_matchings/code/z_rcp/func_8012C628.s,func_8012C628,0x8012C628,0xB
-asm/non_matchings/code/z_rcp/func_8012C654.s,func_8012C654,0x8012C654,0xB
-asm/non_matchings/code/z_rcp/func_8012C680.s,func_8012C680,0x8012C680,0xB
-asm/non_matchings/code/z_rcp/func_8012C6AC.s,func_8012C6AC,0x8012C6AC,0xA
-asm/non_matchings/code/z_rcp/func_8012C6D4.s,func_8012C6D4,0x8012C6D4,0xA
-asm/non_matchings/code/z_rcp/func_8012C6FC.s,func_8012C6FC,0x8012C6FC,0xA
-asm/non_matchings/code/z_rcp/func_8012C724.s,func_8012C724,0x8012C724,0xA
-asm/non_matchings/code/z_rcp/func_8012C74C.s,func_8012C74C,0x8012C74C,0xA
-asm/non_matchings/code/z_rcp/func_8012C774.s,func_8012C774,0x8012C774,0x11
-asm/non_matchings/code/z_rcp/func_8012C7B8.s,func_8012C7B8,0x8012C7B8,0x11
-asm/non_matchings/code/z_rcp/func_8012C7FC.s,func_8012C7FC,0x8012C7FC,0x11
-asm/non_matchings/code/z_rcp/func_8012C840.s,func_8012C840,0x8012C840,0xA
-asm/non_matchings/code/z_rcp/func_8012C868.s,func_8012C868,0x8012C868,0x11
-asm/non_matchings/code/z_rcp/func_8012C8AC.s,func_8012C8AC,0x8012C8AC,0xA
-asm/non_matchings/code/z_rcp/func_8012C8D4.s,func_8012C8D4,0x8012C8D4,0xA
-asm/non_matchings/code/z_rcp/func_8012C8FC.s,func_8012C8FC,0x8012C8FC,0xA
-asm/non_matchings/code/z_rcp/func_8012C924.s,func_8012C924,0x8012C924,0xA
-asm/non_matchings/code/z_rcp/func_8012C94C.s,func_8012C94C,0x8012C94C,0xA
-asm/non_matchings/code/z_rcp/func_8012C974.s,func_8012C974,0x8012C974,0x12
-asm/non_matchings/code/z_rcp/func_8012C9BC.s,func_8012C9BC,0x8012C9BC,0xA
-asm/non_matchings/code/z_rcp/func_8012C9E4.s,func_8012C9E4,0x8012C9E4,0xA
-asm/non_matchings/code/z_rcp/func_8012CA0C.s,func_8012CA0C,0x8012CA0C,0xB
-asm/non_matchings/code/z_rcp/func_8012CA38.s,func_8012CA38,0x8012CA38,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Opa.s,Gfx_SetupDL25_Opa,0x8012C28C,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL71.s,Gfx_SetupDL71,0x8012C2B4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu.s,Gfx_SetupDL25_Xlu,0x8012C2DC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL72.s,Gfx_SetupDL72,0x8012C304,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL31_Opa.s,Gfx_SetupDL31_Opa,0x8012C32C,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL32_Opa.s,Gfx_SetupDL32_Opa,0x8012C354,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL33_Opa.s,Gfx_SetupDL33_Opa,0x8012C37C,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL64.s,Gfx_SetupDL64,0x8012C3A4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL34.s,Gfx_SetupDL34,0x8012C3CC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL34_Opa.s,Gfx_SetupDL34_Opa,0x8012C3F4,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL35_Opa.s,Gfx_SetupDL35_Opa,0x8012C420,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL44_Xlu.s,Gfx_SetupDL44_Xlu,0x8012C448,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL36_Opa.s,Gfx_SetupDL36_Opa,0x8012C470,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL28.s,Gfx_SetupDL28,0x8012C498,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL28_Opa.s,Gfx_SetupDL28_Opa,0x8012C4C0,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL43_Opa.s,Gfx_SetupDL43_Opa,0x8012C4E8,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL45_Opa.s,Gfx_SetupDL45_Opa,0x8012C510,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL46_Overlay.s,Gfx_SetupDL46_Overlay,0x8012C538,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL38_Xlu.s,Gfx_SetupDL38_Xlu,0x8012C560,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL4_Xlu.s,Gfx_SetupDL4_Xlu,0x8012C588,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL37_Opa.s,Gfx_SetupDL37_Opa,0x8012C5B0,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL2_Opa.s,Gfx_SetupDL2_Opa,0x8012C5D8,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL39.s,Gfx_SetupDL39,0x8012C600,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Opa.s,Gfx_SetupDL39_Opa,0x8012C628,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Overlay.s,Gfx_SetupDL39_Overlay,0x8012C654,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Ptr.s,Gfx_SetupDL39_Ptr,0x8012C680,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL40_Opa.s,Gfx_SetupDL40_Opa,0x8012C6AC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL41_Opa.s,Gfx_SetupDL41_Opa,0x8012C6D4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL47_Xlu.s,Gfx_SetupDL47_Xlu,0x8012C6FC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL66.s,Gfx_SetupDL66,0x8012C724,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL67.s,Gfx_SetupDL67,0x8012C74C,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL68_NoCD.s,Gfx_SetupDL68_NoCD,0x8012C774,0x11
+asm/non_matchings/code/z_rcp/Gfx_SetupDL69_NoCD.s,Gfx_SetupDL69_NoCD,0x8012C7B8,0x11
+asm/non_matchings/code/z_rcp/Gfx_SetupDL65_NoCD.s,Gfx_SetupDL65_NoCD,0x8012C7FC,0x11
+asm/non_matchings/code/z_rcp/Gfx_SetupDL70.s,Gfx_SetupDL70,0x8012C840,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL20_NoCD.s,Gfx_SetupDL20_NoCD,0x8012C868,0x11
+asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Opa.s,Gfx_SetupDL42_Opa,0x8012C8AC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Overlay.s,Gfx_SetupDL42_Overlay,0x8012C8D4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL48_Opa.s,Gfx_SetupDL48_Opa,0x8012C8FC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL49_Xlu.s,Gfx_SetupDL49_Xlu,0x8012C924,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL27_Xlu.s,Gfx_SetupDL27_Xlu,0x8012C94C,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL60_XluNoCD.s,Gfx_SetupDL60_XluNoCD,0x8012C974,0x12
+asm/non_matchings/code/z_rcp/Gfx_SetupDL61_Xlu.s,Gfx_SetupDL61_Xlu,0x8012C9BC,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Opa.s,Gfx_SetupDL56_Opa,0x8012C9E4,0xA
+asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Ptr.s,Gfx_SetupDL56_Ptr,0x8012CA0C,0xB
+asm/non_matchings/code/z_rcp/Gfx_SetupDL59_Opa.s,Gfx_SetupDL59_Opa,0x8012CA38,0xA
asm/non_matchings/code/z_rcp/Gfx_BranchTexScroll.s,Gfx_BranchTexScroll,0x8012CA60,0x29
asm/non_matchings/code/z_rcp/func_8012CB04.s,func_8012CB04,0x8012CB04,0x9
asm/non_matchings/code/z_rcp/func_8012CB28.s,func_8012CB28,0x8012CB28,0x9
@@ -2270,9 +2270,9 @@ asm/non_matchings/code/z_vimode/func_80140898.s,func_80140898,0x80140898,0x1A
asm/non_matchings/code/z_vimode/func_80140900.s,func_80140900,0x80140900,0x3
asm/non_matchings/code/z_vimode/func_8014090C.s,func_8014090C,0x8014090C,0x19
asm/non_matchings/code/z_vimode/func_80140970.s,func_80140970,0x80140970,0xDC
-asm/non_matchings/code/z_vimode/func_80140CE0.s,func_80140CE0,0x80140CE0,0x9
-asm/non_matchings/code/z_vimode/func_80140D04.s,func_80140D04,0x80140D04,0x3
-asm/non_matchings/code/z_vimode/func_80140D10.s,func_80140D10,0x80140D10,0x5C
+asm/non_matchings/code/z_vimode/VisCvg_Init.s,VisCvg_Init,0x80140CE0,0x9
+asm/non_matchings/code/z_vimode/VisCvg_Destroy.s,VisCvg_Destroy,0x80140D04,0x3
+asm/non_matchings/code/z_vimode/VisCvg_Draw.s,VisCvg_Draw,0x80140D10,0x5C
asm/non_matchings/code/code_80140E80/func_80140E80.s,func_80140E80,0x80140E80,0x8
asm/non_matchings/code/code_80140E80/func_80140EA0.s,func_80140EA0,0x80140EA0,0x3
asm/non_matchings/code/code_80140E80/func_80140EAC.s,func_80140EAC,0x80140EAC,0x57
@@ -2316,21 +2316,21 @@ asm/non_matchings/code/z_sram_NES/Sram_OpenSave.s,Sram_OpenSave,0x80144E78,0x17D
asm/non_matchings/code/z_sram_NES/func_8014546C.s,func_8014546C,0x8014546C,0x8B
asm/non_matchings/code/z_sram_NES/func_80145698.s,func_80145698,0x80145698,0x4D
asm/non_matchings/code/z_sram_NES/func_801457CC.s,func_801457CC,0x801457CC,0x36D
-asm/non_matchings/code/z_sram_NES/func_80146580.s,func_80146580,0x80146580,0x2A
-asm/non_matchings/code/z_sram_NES/func_80146628.s,func_80146628,0x80146628,0x11E
+asm/non_matchings/code/z_sram_NES/Sram_EraseSave.s,Sram_EraseSave,0x80146580,0x2A
+asm/non_matchings/code/z_sram_NES/Sram_CopySave.s,Sram_CopySave,0x80146628,0x11E
asm/non_matchings/code/z_sram_NES/Sram_InitSave.s,Sram_InitSave,0x80146AA0,0xD6
-asm/non_matchings/code/z_sram_NES/func_80146DF8.s,func_80146DF8,0x80146DF8,0x12
+asm/non_matchings/code/z_sram_NES/Sram_WriteSaveOptionsToBuffer.s,Sram_WriteSaveOptionsToBuffer,0x80146DF8,0x12
asm/non_matchings/code/z_sram_NES/Sram_InitSram.s,Sram_InitSram,0x80146E40,0xC
asm/non_matchings/code/z_sram_NES/Sram_Alloc.s,Sram_Alloc,0x80146E70,0x13
-asm/non_matchings/code/z_sram_NES/func_80146EBC.s,func_80146EBC,0x80146EBC,0xB
+asm/non_matchings/code/z_sram_NES/Sram_SyncWriteToFlash.s,Sram_SyncWriteToFlash,0x80146EBC,0xB
asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialEnterClockTown.s,Sram_SaveSpecialEnterClockTown,0x80146EE8,0x1D
asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialNewDay.s,Sram_SaveSpecialNewDay,0x80146F5C,0x2B
-asm/non_matchings/code/z_sram_NES/func_80147008.s,func_80147008,0x80147008,0x6
-asm/non_matchings/code/z_sram_NES/func_80147020.s,func_80147020,0x80147020,0x12
-asm/non_matchings/code/z_sram_NES/func_80147068.s,func_80147068,0x80147068,0x34
-asm/non_matchings/code/z_sram_NES/func_80147138.s,func_80147138,0x80147138,0x6
-asm/non_matchings/code/z_sram_NES/func_80147150.s,func_80147150,0x80147150,0x12
-asm/non_matchings/code/z_sram_NES/func_80147198.s,func_80147198,0x80147198,0x5F
+asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesDefault.s,Sram_SetFlashPagesDefault,0x80147008,0x6
+asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashDefault.s,Sram_StartWriteToFlashDefault,0x80147020,0x12
+asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashDefault.s,Sram_UpdateWriteToFlashDefault,0x80147068,0x34
+asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesOwlSave.s,Sram_SetFlashPagesOwlSave,0x80147138,0x6
+asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashOwlSave.s,Sram_StartWriteToFlashOwlSave,0x80147150,0x12
+asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWriteToFlashOwlSave,0x80147198,0x5F
asm/non_matchings/code/z_sram_NES/func_80147314.s,func_80147314,0x80147314,0x40
asm/non_matchings/code/z_sram_NES/func_80147414.s,func_80147414,0x80147414,0x3E
asm/non_matchings/code/z_sram_NES/Sram_nop8014750C.s,Sram_nop8014750C,0x8014750C,0x5
@@ -2369,7 +2369,7 @@ asm/non_matchings/code/z_message/func_801514B0.s,func_801514B0,0x801514B0,0x100
asm/non_matchings/code/z_message/Message_StartTextbox.s,Message_StartTextbox,0x801518B0,0x22
asm/non_matchings/code/z_message/Message_ContinueTextbox.s,Message_ContinueTextbox,0x80151938,0x4C
asm/non_matchings/code/z_message/func_80151A68.s,func_80151A68,0x80151A68,0x53
-asm/non_matchings/code/z_message/func_80151BB4.s,func_80151BB4,0x80151BB4,0x3A
+asm/non_matchings/code/z_message/Message_BombersNotebookQueueEvent.s,Message_BombersNotebookQueueEvent,0x80151BB4,0x3A
asm/non_matchings/code/z_message/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42
asm/non_matchings/code/z_message/func_80151DA4.s,func_80151DA4,0x80151DA4,0x1A4
asm/non_matchings/code/z_message/func_80152434.s,func_80152434,0x80152434,0xC
@@ -2554,16 +2554,16 @@ asm/non_matchings/code/z_play/Play_IsDebugCamEnabled.s,Play_IsDebugCamEnabled,0x
asm/non_matchings/code/z_play/func_8016A178.s,func_8016A178,0x8016A178,0x3C
asm/non_matchings/code/z_play/Play_FillScreen.s,Play_FillScreen,0x8016A268,0x18
asm/non_matchings/code/z_play/Play_Init.s,Play_Init,0x8016A2C8,0x252
-asm/non_matchings/code/z_play_hireso/func_8016AC10.s,func_8016AC10,0x8016AC10,0x83
-asm/non_matchings/code/z_play_hireso/func_8016AE1C.s,func_8016AE1C,0x8016AE1C,0x117
-asm/non_matchings/code/z_play_hireso/func_8016B278.s,func_8016B278,0x8016B278,0x8E
-asm/non_matchings/code/z_play_hireso/func_8016B4B0.s,func_8016B4B0,0x8016B4B0,0x3A5
-asm/non_matchings/code/z_play_hireso/func_8016C344.s,func_8016C344,0x8016C344,0x282
-asm/non_matchings/code/z_play_hireso/func_8016CD4C.s,func_8016CD4C,0x8016CD4C,0x5B0
-asm/non_matchings/code/z_play_hireso/func_8016E40C.s,func_8016E40C,0x8016E40C,0x1A1
-asm/non_matchings/code/z_play_hireso/func_8016EA90.s,func_8016EA90,0x8016EA90,0x1C6
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawScisTexRect.s,BombersNotebook_DrawScisTexRect,0x8016AC10,0x83
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawHeaders.s,BombersNotebook_DrawHeaders,0x8016AE1C,0x117
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawColumns.s,BombersNotebook_DrawColumns,0x8016B278,0x8E
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawEntries.s,BombersNotebook_DrawEntries,0x8016B4B0,0x3A5
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawRows.s,BombersNotebook_DrawRows,0x8016C344,0x282
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawTimeOfDay.s,BombersNotebook_DrawTimeOfDay,0x8016CD4C,0x5B0
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawCursor.s,BombersNotebook_DrawCursor,0x8016E40C,0x1A1
+asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawArrows.s,BombersNotebook_DrawArrows,0x8016EA90,0x1C6
asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s,BombersNotebook_Draw,0x8016F1A8,0xD1
-asm/non_matchings/code/z_play_hireso/func_8016F4EC.s,func_8016F4EC,0x8016F4EC,0x2F
+asm/non_matchings/code/z_play_hireso/BombersNotebook_LoadFiles.s,BombersNotebook_LoadFiles,0x8016F4EC,0x2F
asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s,BombersNotebook_Update,0x8016F5A8,0x1B4
asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s,BombersNotebook_Init,0x8016FC78,0x8
asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s,BombersNotebook_Destroy,0x8016FC98,0x16
@@ -2739,15 +2739,15 @@ asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_Draw
asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F
asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90
asm/non_matchings/code/speed_meter/func_8017842C.s,func_8017842C,0x8017842C,0xC9
-asm/non_matchings/code/sys_cmpdma/func_80178750.s,func_80178750,0x80178750,0x32
-asm/non_matchings/code/sys_cmpdma/func_80178818.s,func_80178818,0x80178818,0x58
-asm/non_matchings/code/sys_cmpdma/func_80178978.s,func_80178978,0x80178978,0x17
-asm/non_matchings/code/sys_cmpdma/func_801789D4.s,func_801789D4,0x801789D4,0x6
-asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s,SysCfb_GetFbPtr,0x801789EC,0xA
+asm/non_matchings/code/sys_cmpdma/SysCfb_SetLoResMode.s,SysCfb_SetLoResMode,0x80178750,0x32
+asm/non_matchings/code/sys_cmpdma/SysCfb_SetHiResMode.s,SysCfb_SetHiResMode,0x80178818,0x58
+asm/non_matchings/code/sys_cmpdma/SysCfb_Init.s,SysCfb_Init,0x80178978,0x17
+asm/non_matchings/code/sys_cmpdma/SysCfb_Reset.s,SysCfb_Reset,0x801789D4,0x6
+asm/non_matchings/code/sys_cmpdma/SysCfb_GetFramebuffer.s,SysCfb_GetFramebuffer,0x801789EC,0xA
asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s,SysCfb_GetZBuffer,0x80178A14,0x4
-asm/non_matchings/code/sys_cmpdma/func_80178A24.s,func_80178A24,0x80178A24,0x4
-asm/non_matchings/code/sys_cmpdma/func_80178A34.s,func_80178A34,0x80178A34,0x18
-asm/non_matchings/code/sys_cmpdma/func_80178A94.s,func_80178A94,0x80178A94,0xB
+asm/non_matchings/code/sys_cmpdma/SysCfb_GetWorkBuffer.s,SysCfb_GetWorkBuffer,0x80178A24,0x4
+asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferPixel.s,SysCfb_GetZBufferPixel,0x80178A34,0x18
+asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferInt.s,SysCfb_GetZBufferInt,0x80178A94,0xB
asm/non_matchings/code/sys_cmpdma/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70
asm/non_matchings/code/sys_cmpdma/CmpDma_GetFileInfo.s,CmpDma_GetFileInfo,0x80178C80,0x3F
asm/non_matchings/code/sys_cmpdma/CmpDma_Decompress.s,CmpDma_Decompress,0x80178D7C,0xC
@@ -2762,13 +2762,13 @@ asm/non_matchings/code/sys_initial_check/Check_DrawExpansionPakErrorMessage.s,Ch
asm/non_matchings/code/sys_initial_check/Check_DrawRegionLockErrorMessage.s,Check_DrawRegionLockErrorMessage,0x801791CC,0x25
asm/non_matchings/code/sys_initial_check/Check_ExpansionPak.s,Check_ExpansionPak,0x80179260,0x11
asm/non_matchings/code/sys_initial_check/Check_RegionIsSupported.s,Check_RegionIsSupported,0x801792A4,0x17
-asm/non_matchings/code/sys_math/func_80179300.s,func_80179300,0x80179300,0x40
-asm/non_matchings/code/sys_math/func_80179400.s,func_80179400,0x80179400,0x31
-asm/non_matchings/code/sys_math/pow_int.s,pow_int,0x801794C4,0xA
-asm/non_matchings/code/sys_math/sin_rad.s,sin_rad,0x801794EC,0x15
-asm/non_matchings/code/sys_math/cos_rad.s,cos_rad,0x80179540,0x15
+asm/non_matchings/code/sys_math/Math_FactorialF.s,Math_FactorialF,0x80179300,0x40
+asm/non_matchings/code/sys_math/Math_Factorial.s,Math_Factorial,0x80179400,0x31
+asm/non_matchings/code/sys_math/Math_PowF.s,Math_PowF,0x801794C4,0xA
+asm/non_matchings/code/sys_math/Math_SinF.s,Math_SinF,0x801794EC,0x15
+asm/non_matchings/code/sys_math/Math_CosF.s,Math_CosF,0x80179540,0x15
asm/non_matchings/code/sys_math/Rand_ZeroFloat.s,Rand_ZeroFloat,0x80179594,0xB
-asm/non_matchings/code/sys_math/randPlusMinusPoint5Scaled.s,randPlusMinusPoint5Scaled,0x801795C0,0xC
+asm/non_matchings/code/sys_math/Rand_CenteredFloat.s,Rand_CenteredFloat,0x801795C0,0xC
asm/non_matchings/code/sys_math3d/Math3D_Normalize.s,Math3D_Normalize,0x801795F0,0x22
asm/non_matchings/code/sys_math3d/Math3D_PlaneVsLineSegClosestPoint.s,Math3D_PlaneVsLineSegClosestPoint,0x80179678,0x48
asm/non_matchings/code/sys_math3d/func_80179798.s,func_80179798,0x80179798,0xAB
@@ -2962,20 +2962,21 @@ asm/non_matchings/code/sys_slowly/Slowly_ThreadEntry.s,Slowly_ThreadEntry,0x8018
asm/non_matchings/code/sys_slowly/Slowly_Init.s,Slowly_Init,0x8018571C,0x21
asm/non_matchings/code/sys_slowly/Slowly_Destroy.s,Slowly_Destroy,0x801857A0,0x8
asm/non_matchings/code/sys_flashrom/func_801857C0.s,func_801857C0,0x801857C0,0x4
-asm/non_matchings/code/sys_flashrom/func_801857D0.s,func_801857D0,0x801857D0,0x25
-asm/non_matchings/code/sys_flashrom/func_80185864.s,func_80185864,0x80185864,0x29
-asm/non_matchings/code/sys_flashrom/func_80185908.s,func_80185908,0x80185908,0x18
-asm/non_matchings/code/sys_flashrom/func_80185968.s,func_80185968,0x80185968,0x22
-asm/non_matchings/code/sys_flashrom/func_801859F0.s,func_801859F0,0x801859F0,0xF
-asm/non_matchings/code/sys_flashrom/func_80185A2C.s,func_80185A2C,0x80185A2C,0x3C
-asm/non_matchings/code/sys_flashrom/func_80185B1C.s,func_80185B1C,0x80185B1C,0x32
-asm/non_matchings/code/sys_flashrom/func_80185BE4.s,func_80185BE4,0x80185BE4,0x10
+asm/non_matchings/code/sys_flashrom/SysFlashrom_IsInit.s,SysFlashrom_IsInit,0x801857C0,0x4
+asm/non_matchings/code/sys_flashrom/SysFlashrom_GetVendorStr.s,SysFlashrom_GetVendorStr,0x801857D0,0x25
+asm/non_matchings/code/sys_flashrom/SysFlashrom_CheckFlashType.s,SysFlashrom_CheckFlashType,0x80185864,0x29
+asm/non_matchings/code/sys_flashrom/SysFlashrom_InitFlash.s,SysFlashrom_InitFlash,0x80185908,0x18
+asm/non_matchings/code/sys_flashrom/SysFlashrom_ReadData.s,SysFlashrom_ReadData,0x80185968,0x22
+asm/non_matchings/code/sys_flashrom/SysFlashrom_EraseSector.s,SysFlashrom_EraseSector,0x801859F0,0xF
+asm/non_matchings/code/sys_flashrom/SysFlashrom_ExecWrite.s,SysFlashrom_ExecWrite,0x80185A2C,0x3C
+asm/non_matchings/code/sys_flashrom/SysFlashrom_AttemptWrite.s,SysFlashrom_AttemptWrite,0x80185B1C,0x32
+asm/non_matchings/code/sys_flashrom/SysFlashrom_NeedsToErase.s,SysFlashrom_NeedsToErase,0x80185BE4,0x10
asm/non_matchings/code/sys_flashrom/func_80185C24.s,func_80185C24,0x80185C24,0x47
asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s,SysFlashrom_ThreadEntry,0x80185D40,0x27
-asm/non_matchings/code/sys_flashrom/func_80185DDC.s,func_80185DDC,0x80185DDC,0x3A
-asm/non_matchings/code/sys_flashrom/func_80185EC4.s,func_80185EC4,0x80185EC4,0x10
-asm/non_matchings/code/sys_flashrom/func_80185F04.s,func_80185F04,0x80185F04,0x18
-asm/non_matchings/code/sys_flashrom/func_80185F64.s,func_80185F64,0x80185F64,0xB
+asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataAsync.s,SysFlashrom_WriteDataAsync,0x80185DDC,0x3A
+asm/non_matchings/code/sys_flashrom/SysFlashrom_IsBusy.s,SysFlashrom_IsBusy,0x80185EC4,0x10
+asm/non_matchings/code/sys_flashrom/SysFlashrom_AwaitResult.s,SysFlashrom_AwaitResult,0x80185F04,0x18
+asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataSync.s,SysFlashrom_WriteDataSync,0x80185F64,0xB
asm/non_matchings/code/code_80185F90/func_80185F90.s,func_80185F90,0x80185F90,0x26
asm/non_matchings/code/osFlash/func_80186A70.s,func_80186A70,0x80186A70,0x12
asm/non_matchings/code/osFlash/func_80186AB8.s,func_80186AB8,0x80186AB8,0x1C
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
index b96696b46..591671ab8 100755
--- a/tools/weekeventregconvert.py
+++ b/tools/weekeventregconvert.py
@@ -155,7 +155,7 @@ weekEventReg = {
(18 << 8) | 0x10: "WEEKEVENTREG_18_10",
(18 << 8) | 0x20: "WEEKEVENTREG_18_20",
(18 << 8) | 0x40: "WEEKEVENTREG_18_40",
- (18 << 8) | 0x80: "WEEKEVENTREG_18_80",
+ (18 << 8) | 0x80: "WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES",
(19 << 8) | 0x01: "WEEKEVENTREG_19_01",
(19 << 8) | 0x02: "WEEKEVENTREG_19_02",
(19 << 8) | 0x04: "WEEKEVENTREG_19_04",
@@ -174,15 +174,15 @@ weekEventReg = {
(20 << 8) | 0x80: "WEEKEVENTREG_20_80",
(21 << 8) | 0x01: "WEEKEVENTREG_21_01",
(21 << 8) | 0x02: "WEEKEVENTREG_21_02",
- (21 << 8) | 0x04: "WEEKEVENTREG_21_04",
- (21 << 8) | 0x08: "WEEKEVENTREG_21_08",
+ (21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON",
+ (21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON",
(21 << 8) | 0x10: "WEEKEVENTREG_21_10",
- (21 << 8) | 0x20: "WEEKEVENTREG_21_20",
+ (21 << 8) | 0x20: "WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM",
(21 << 8) | 0x40: "WEEKEVENTREG_21_40",
(21 << 8) | 0x80: "WEEKEVENTREG_21_80",
- (22 << 8) | 0x01: "WEEKEVENTREG_22_01",
+ (22 << 8) | 0x01: "WEEKEVENTREG_DEFENDED_AGAINST_THEM",
(22 << 8) | 0x02: "WEEKEVENTREG_22_02",
- (22 << 8) | 0x04: "WEEKEVENTREG_22_04",
+ (22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON",
(22 << 8) | 0x08: "WEEKEVENTREG_22_08",
(22 << 8) | 0x10: "WEEKEVENTREG_22_10",
(22 << 8) | 0x20: "WEEKEVENTREG_22_20",
@@ -221,11 +221,11 @@ weekEventReg = {
(26 << 8) | 0x40: "WEEKEVENTREG_26_40",
(26 << 8) | 0x80: "WEEKEVENTREG_26_80",
(27 << 8) | 0x01: "WEEKEVENTREG_27_01",
- (27 << 8) | 0x02: "WEEKEVENTREG_27_02",
- (27 << 8) | 0x04: "WEEKEVENTREG_27_04",
- (27 << 8) | 0x08: "WEEKEVENTREG_27_08",
- (27 << 8) | 0x10: "WEEKEVENTREG_27_10",
- (27 << 8) | 0x20: "WEEKEVENTREG_27_20",
+ (27 << 8) | 0x02: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN",
+ (27 << 8) | 0x04: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN",
+ (27 << 8) | 0x08: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN",
+ (27 << 8) | 0x10: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN",
+ (27 << 8) | 0x20: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN",
(27 << 8) | 0x40: "WEEKEVENTREG_27_40",
(27 << 8) | 0x80: "WEEKEVENTREG_27_80",
(28 << 8) | 0x01: "WEEKEVENTREG_28_01",
@@ -407,20 +407,20 @@ weekEventReg = {
(50 << 8) | 0x01: "WEEKEVENTREG_50_01",
(50 << 8) | 0x02: "WEEKEVENTREG_50_02",
(50 << 8) | 0x04: "WEEKEVENTREG_50_04",
- (50 << 8) | 0x08: "WEEKEVENTREG_50_08",
+ (50 << 8) | 0x08: "WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING",
(50 << 8) | 0x10: "WEEKEVENTREG_50_10",
- (50 << 8) | 0x20: "WEEKEVENTREG_50_20",
+ (50 << 8) | 0x20: "WEEKEVENTREG_HAD_MIDNIGHT_MEETING",
(50 << 8) | 0x40: "WEEKEVENTREG_50_40",
- (50 << 8) | 0x80: "WEEKEVENTREG_50_80",
- (51 << 8) | 0x01: "WEEKEVENTREG_51_01",
+ (50 << 8) | 0x80: "WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES",
+ (51 << 8) | 0x01: "WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES",
(51 << 8) | 0x02: "WEEKEVENTREG_51_02",
(51 << 8) | 0x04: "WEEKEVENTREG_51_04",
(51 << 8) | 0x08: "WEEKEVENTREG_51_08",
(51 << 8) | 0x10: "WEEKEVENTREG_51_10",
- (51 << 8) | 0x20: "WEEKEVENTREG_51_20",
+ (51 << 8) | 0x20: "WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT",
(51 << 8) | 0x40: "WEEKEVENTREG_51_40",
(51 << 8) | 0x80: "WEEKEVENTREG_51_80",
- (52 << 8) | 0x01: "WEEKEVENTREG_52_01",
+ (52 << 8) | 0x01: "WEEKEVENTREG_ESCORTED_CREMIA",
(52 << 8) | 0x02: "WEEKEVENTREG_52_02",
(52 << 8) | 0x04: "WEEKEVENTREG_52_04",
(52 << 8) | 0x08: "WEEKEVENTREG_52_08",
@@ -532,61 +532,61 @@ weekEventReg = {
(65 << 8) | 0x20: "WEEKEVENTREG_65_20",
(65 << 8) | 0x40: "WEEKEVENTREG_65_40",
(65 << 8) | 0x80: "WEEKEVENTREG_65_80",
- (66 << 8) | 0x01: "WEEKEVENTREG_66_01",
- (66 << 8) | 0x02: "WEEKEVENTREG_66_02",
- (66 << 8) | 0x04: "WEEKEVENTREG_66_04",
- (66 << 8) | 0x08: "WEEKEVENTREG_66_08",
- (66 << 8) | 0x10: "WEEKEVENTREG_66_10",
- (66 << 8) | 0x20: "WEEKEVENTREG_66_20",
- (66 << 8) | 0x40: "WEEKEVENTREG_66_40",
- (66 << 8) | 0x80: "WEEKEVENTREG_66_80",
- (67 << 8) | 0x01: "WEEKEVENTREG_67_01",
- (67 << 8) | 0x02: "WEEKEVENTREG_67_02",
- (67 << 8) | 0x04: "WEEKEVENTREG_67_04",
- (67 << 8) | 0x08: "WEEKEVENTREG_67_08",
- (67 << 8) | 0x10: "WEEKEVENTREG_67_10",
- (67 << 8) | 0x20: "WEEKEVENTREG_67_20",
- (67 << 8) | 0x40: "WEEKEVENTREG_67_40",
- (67 << 8) | 0x80: "WEEKEVENTREG_67_80",
- (68 << 8) | 0x01: "WEEKEVENTREG_68_01",
- (68 << 8) | 0x02: "WEEKEVENTREG_68_02",
- (68 << 8) | 0x04: "WEEKEVENTREG_68_04",
- (68 << 8) | 0x08: "WEEKEVENTREG_68_08",
- (68 << 8) | 0x10: "WEEKEVENTREG_68_10",
- (68 << 8) | 0x20: "WEEKEVENTREG_68_20",
- (68 << 8) | 0x40: "WEEKEVENTREG_68_40",
- (68 << 8) | 0x80: "WEEKEVENTREG_68_80",
- (69 << 8) | 0x01: "WEEKEVENTREG_69_01",
- (69 << 8) | 0x02: "WEEKEVENTREG_69_02",
- (69 << 8) | 0x04: "WEEKEVENTREG_69_04",
- (69 << 8) | 0x08: "WEEKEVENTREG_69_08",
- (69 << 8) | 0x10: "WEEKEVENTREG_69_10",
- (69 << 8) | 0x20: "WEEKEVENTREG_69_20",
- (69 << 8) | 0x40: "WEEKEVENTREG_69_40",
- (69 << 8) | 0x80: "WEEKEVENTREG_69_80",
- (70 << 8) | 0x01: "WEEKEVENTREG_70_01",
- (70 << 8) | 0x02: "WEEKEVENTREG_70_02",
- (70 << 8) | 0x04: "WEEKEVENTREG_70_04",
- (70 << 8) | 0x08: "WEEKEVENTREG_70_08",
- (70 << 8) | 0x10: "WEEKEVENTREG_70_10",
- (70 << 8) | 0x20: "WEEKEVENTREG_70_20",
- (70 << 8) | 0x40: "WEEKEVENTREG_70_40",
- (70 << 8) | 0x80: "WEEKEVENTREG_70_80",
- (71 << 8) | 0x01: "WEEKEVENTREG_71_01",
- (71 << 8) | 0x02: "WEEKEVENTREG_71_02",
- (71 << 8) | 0x04: "WEEKEVENTREG_71_04",
- (71 << 8) | 0x08: "WEEKEVENTREG_71_08",
- (71 << 8) | 0x10: "WEEKEVENTREG_71_10",
- (71 << 8) | 0x20: "WEEKEVENTREG_71_20",
- (71 << 8) | 0x40: "WEEKEVENTREG_71_40",
- (71 << 8) | 0x80: "WEEKEVENTREG_71_80",
- (72 << 8) | 0x01: "WEEKEVENTREG_72_01",
- (72 << 8) | 0x02: "WEEKEVENTREG_72_02",
- (72 << 8) | 0x04: "WEEKEVENTREG_72_04",
- (72 << 8) | 0x08: "WEEKEVENTREG_72_08",
- (72 << 8) | 0x10: "WEEKEVENTREG_72_10",
- (72 << 8) | 0x20: "WEEKEVENTREG_72_20",
- (72 << 8) | 0x40: "WEEKEVENTREG_72_40",
+ (66 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU",
+ (66 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI",
+ (66 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN",
+ (66 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY",
+ (66 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI",
+ (66 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA",
+ (66 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR",
+ (66 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAOME_AROMA",
+ (67 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO",
+ (67 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN",
+ (67 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN",
+ (67 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS",
+ (67 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND",
+ (67 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER",
+ (67 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO",
+ (67 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG",
+ (68 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS",
+ (68 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO",
+ (68 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU",
+ (68 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS",
+ (68 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY",
+ (68 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING",
+ (68 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI",
+ (68 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI",
+ (69 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI",
+ (69 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES",
+ (69 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES",
+ (69 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT",
+ (69 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM",
+ (69 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM",
+ (69 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE",
+ (69 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA",
+ (70 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK",
+ (70 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK",
+ (70 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL",
+ (70 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL",
+ (70 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE",
+ (70 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK",
+ (70 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP",
+ (70 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP",
+ (71 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP",
+ (71 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP",
+ (71 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP",
+ (71 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP",
+ (71 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK",
+ (71 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK",
+ (71 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD",
+ (71 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK",
+ (72 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK",
+ (72 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT",
+ (72 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK",
+ (72 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK",
+ (72 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK",
+ (72 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK",
+ (72 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK",
(72 << 8) | 0x80: "WEEKEVENTREG_72_80",
(73 << 8) | 0x01: "WEEKEVENTREG_73_01",
(73 << 8) | 0x02: "WEEKEVENTREG_73_02",
@@ -608,7 +608,7 @@ weekEventReg = {
(75 << 8) | 0x02: "WEEKEVENTREG_75_02",
(75 << 8) | 0x04: "WEEKEVENTREG_75_04",
(75 << 8) | 0x08: "WEEKEVENTREG_75_08",
- (75 << 8) | 0x10: "WEEKEVENTREG_75_10",
+ (75 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_ROOM_KEY",
(75 << 8) | 0x20: "WEEKEVENTREG_75_20",
(75 << 8) | 0x40: "WEEKEVENTREG_75_40",
(75 << 8) | 0x80: "WEEKEVENTREG_75_80",
@@ -648,7 +648,7 @@ weekEventReg = {
(80 << 8) | 0x02: "WEEKEVENTREG_80_02",
(80 << 8) | 0x04: "WEEKEVENTREG_80_04",
(80 << 8) | 0x08: "WEEKEVENTREG_80_08",
- (80 << 8) | 0x10: "WEEKEVENTREG_80_10",
+ (80 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_PRIORITY_MAIL",
(80 << 8) | 0x20: "WEEKEVENTREG_80_20",
(80 << 8) | 0x40: "WEEKEVENTREG_80_40",
(80 << 8) | 0x80: "WEEKEVENTREG_80_80",
@@ -714,11 +714,11 @@ weekEventReg = {
(88 << 8) | 0x08: "WEEKEVENTREG_88_08",
(88 << 8) | 0x10: "WEEKEVENTREG_88_10",
(88 << 8) | 0x20: "WEEKEVENTREG_88_20",
- (88 << 8) | 0x40: "WEEKEVENTREG_88_40",
- (88 << 8) | 0x80: "WEEKEVENTREG_88_80",
- (89 << 8) | 0x01: "WEEKEVENTREG_89_01",
- (89 << 8) | 0x02: "WEEKEVENTREG_89_02",
- (89 << 8) | 0x04: "WEEKEVENTREG_89_04",
+ (88 << 8) | 0x40: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE",
+ (88 << 8) | 0x80: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN",
+ (89 << 8) | 0x01: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU",
+ (89 << 8) | 0x02: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA",
+ (89 << 8) | 0x04: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON",
(89 << 8) | 0x08: "WEEKEVENTREG_89_08",
(89 << 8) | 0x10: "WEEKEVENTREG_89_10",
(89 << 8) | 0x20: "WEEKEVENTREG_89_20",
diff --git a/undefined_syms.txt b/undefined_syms.txt
index 1e09ceaab..9dd07f623 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -122,9 +122,11 @@ D_A4800010 = 0xA4800010; // SI_PIF_ADDR_WR64B_REG
D_A4800014 = 0xA4800014; // reserved
D_A4800018 = 0xA4800018; // SI_STATUS_REG
-// buffers
+// sys_cfb buffers
gFramebuffer1 = 0x80000500;
+gFramebufferHiRes0 = 0x80780000;
+gFramebufferHiRes1 = 0x80000500;
D_80025D00 = 0x80025D00;
// Ucode symbols
@@ -586,10 +588,6 @@ D_060005F8 = 0x060005F8;
D_06000A20 = 0x06000A20;
D_06000040 = 0x06000040;
-/* ovl_Bg_Tobira01 */
-D_060011C0 = 0x060011C0;
-D_06000088 = 0x06000088;
-
// ovl_Boss_01
D_06000C44 = 0x06000C44;
@@ -727,14 +725,6 @@ D_060134D0 = 0x060134D0;
D_06013828 = 0x06013828;
D_06014040 = 0x06014040;
-// ovl_Demo_Moonend
-
-D_06001214 = 0x06001214;
-D_0600B540 = 0x0600B540;
-D_0600B5A0 = 0x0600B5A0;
-D_06010C40 = 0x06010C40;
-D_060129F0 = 0x060129F0;
-
// ovl_Dm_Tsg
D_06002D30 = 0x06002D30;
@@ -1107,21 +1097,6 @@ D_06002188 = 0x06002188;
D_06000B70 = 0x06000B70;
D_06000D60 = 0x06000D60;
-// ovl_player_actor
-
-D_06008860 = 0x06008860;
-D_0600BDD8 = 0x0600BDD8;
-D_0600C540 = 0x0600C540;
-D_060127B0 = 0x060127B0;
-D_06013138 = 0x06013138;
-D_060134D0 = 0x060134D0;
-D_06014684 = 0x06014684;
-D_060177B8 = 0x060177B8;
-D_060178D0 = 0x060178D0;
-
-
-// segment 0x07
-
// segment 0x08
@@ -1175,20 +1150,6 @@ D_0B000188 = 0x0B000188;
// segment 0x0C
D_0C000000 = 0x0C000000;
-D_0C000800 = 0x0C000800;
-D_0C001000 = 0x0C001000;
-D_0C001800 = 0x0C001800;
-D_0C001980 = 0x0C001980;
-D_0C006C00 = 0x0C006C00;
-D_0C006E00 = 0x0C006E00;
-D_0C014668 = 0x0C014668;
-
-// segment 0x0D
-
-D_0D002000 = 0x0D002000;
-D_0D002200 = 0x0D002200;
-D_0D002400 = 0x0D002400;
-D_0D003700 = 0x0D003700;
// segment 0x0E